C語言招聘試題及答案.rtf_第1頁
C語言招聘試題及答案.rtf_第2頁
C語言招聘試題及答案.rtf_第3頁
C語言招聘試題及答案.rtf_第4頁
C語言招聘試題及答案.rtf_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1. 用預處理指令#define 聲明一個常數(shù),用以表明1年中有多少秒(忽略閏年問題) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在這想看到幾件事情: 1). #define 語法的基本知識(例如:不能以分號結束,括號的使用,等等) 2). 懂得預處理器將為你計算常數(shù)表達式的值,因此,直接寫出你是如何計算一年中有多 少秒而不是計算出實際的值,是更清晰而沒有代價的。 3). 意識到這個表達式將使一個16位機的整型數(shù)溢出-因此要用到長整型符號L,告訴編譯 器這個常數(shù)是的長整型數(shù)。 4). 如果你在你的表達式中用到UL(表示無符號長整型),那么你有了一個好的起點。記 住,第一印象很重要。 2. 寫一個“標準”宏MIN,這個宏輸入兩個參數(shù)并返回較小的一個。 #define MIN(A,B) (A) 6“) : puts(“6”。原因是當表達式中存在有符 號類型和無符號類型時所有的操作數(shù)都自動轉(zhuǎn)換為無符號類型。因此-20變成了一個非常 大的正整數(shù),所以該表達式計算出的結果大于6。這一點對于應當頻繁用到無符號數(shù)據(jù)類 型的嵌入式系統(tǒng)來說是豐常重要的。如果你答錯了這個問題,你也就到了得不到這份工作 的邊緣。 13. 評價下面的代碼片斷: unsigned int zero = 0; unsigned int compzero = 0xFFFF; /*1s complement of zero */ 對于一個int型不是16位的處理器為說,上面的代碼是不正確的。應編寫如下: unsigned int compzero = 0; 這一問題真正能揭露出應試者是否懂得處理器字長的重要性。在我的經(jīng)驗里,好的嵌入式 程序員非常準確地明白硬件的細節(jié)和它的局限,然而PC機程序往往把硬件作為一個無法避 免的煩惱。 到了這個階段,應試者或者完全垂頭喪氣了或者信心滿滿志在必得。如果顯然應試者不是 很好,那么這個測試就在這里結束了。但如果顯然應試者做得不錯,那么我就扔出下面的 追加問題,這些問題是比較難的,我想僅僅非常優(yōu)秀的應試者能做得不錯。提出這些問題, 我希望更多看到應試者應付問題的方法,而不是答案。不管如何,你就當是這個娛樂吧 動態(tài)內(nèi)存分配(Dynamic memory allocation) 14. 盡管不像非嵌入式計算機那么常見,嵌入式系統(tǒng)還是有從堆(heap)中動態(tài)分配內(nèi)存 的過程的。那么嵌入式系統(tǒng)中,動態(tài)分配內(nèi)存可能發(fā)生的問題是什么? 這里,我期望應試者能提到內(nèi)存碎片,碎片收集的問題,變量的持行時間等等。這個主題 已經(jīng)在ESP雜志中被廣泛地討論過了(主要是 P.J. Plauger, 他的解釋遠遠超過我這里能 提到的任何解釋),所有回過頭看一下這些雜志吧!讓應試者進入一種虛假的安全感覺后, 我拿出這么一個小節(jié)目:下面的代碼片段的輸出是什么,為什么? char *ptr; if (ptr = (char *)malloc(0) = NULL) puts(“Got a null pointer“); else puts(“Got a valid pointer“); 這是一個有趣的問題。最近在我的一個同事不經(jīng)意把0值傳給了函數(shù)malloc,得到了一個 合法的指針之后,我才想到這個問題。這就是上面的代碼,該代碼的輸出是“Got a vali d pointer”。我用這個來開始討論這樣的一問題,看看被面試者是否想到庫例程這樣做 是正確。得到正確的答案固然重要,但解決問題的方法和你做決定的基本原理更重要些。 Typedef 15. Typedef 在C語言中頻繁用以聲明一個已經(jīng)存在的數(shù)據(jù)類型的同義字。也可以用預處 理器做類似的事。例如,思考一下下面的例子: #define dPS struct s * typedef struct s * tPS; 以上兩種情況的意圖都是要定義dPS 和 tPS 作為一個指向結構s指針。哪種方法更好呢? (如果有的話)為什么? 這是一個非常微妙的問題,任何人答對這個問題(正當?shù)脑颍┦菓敱还驳?。答案是?typedef更好。思考下面的例子: dPS p1,p2; tPS p3,p4; 第一個擴展為 struct s * p1, p2; 上面的代碼定義p1為一個指向結構的指,p2為一個實際的結構,這也許不是你想要的。第 二個例子正確地定義了p3 和p4 兩個指針。 晦澀的語法 16. C語言同意一些令人震驚的結構,下面的結構是合法的嗎,如果是它做些什么? int a = 5, b = 7, c; c = a+b; 這個問題將做為這個測驗的一個愉快的結尾。不管你相不相信,上面的例子是完全合乎語 法的。問題是編譯器如何處理它?水平不高的編譯作者實際上會爭論這個問題,根據(jù)最處 理原則,編譯器應當能處理盡可能所有合法的用法。因此,上面的代碼被處理成: c = a+ + b; 因此, 這段代碼持行后a = 6, b = 7, c = 12。 如果你知道答案,或猜出正確答案,做得好。如果你不知道答案,我也不把這個當作問題。 我發(fā)現(xiàn)這個問題的最大好處是:這是一個關于代碼編寫風格,代碼的可讀性,代碼的可修 改性的好的話題 What will print out? main() char *p1=“name”; char *p2; p2=(char*)malloc(20); memset (p2, 0, 20); while(*p2+ = *p1+); printf(“%sn”,p2); Answer:empty string. What will be printed as the result of the operation below: main() int x=20,y=35; x=y+ + x+; y= +y + +x; printf(“%d%dn”,x,y); Answer : 5794 What will be printed as the result of the operation below: main() int x=5; printf(“%d,%d,%dn”,x,x2); Answer: 5,20,1 What will be printed as the result of the operation below: #define swap(a,b) a=a+b;b=a-b;a=a-b; void main() int x=5, y=10; swap (x,y); printf(“%d %dn”,x,y); swap2(x,y); printf(“%d %dn”,x,y); int swap2(int a, int b) int temp; temp=a; b=a; a=temp; return 0; Answer: 10, 5 10, 5 What will be printed as the result of the operation below: main() char *ptr = ” Cisco Systems”; *ptr+; printf(“%sn”,ptr); ptr+; printf(“%sn”,ptr); Answer:Cisco Systems isco systems What will be printed as the result of the operation below: main() char s1=“Cisco”; char s2= “systems”; printf(“%s”,s1); Answer: Cisco What will be printed as the result of the operation below: main() char *p1; char *p2; p1=(char *)malloc(25); p2=(char *)malloc(25); strcpy(p1,”Cisco”); strcpy(p2,“systems”); strcat(p1,p2); printf(“%s”,p1); Answer: Ciscosystems The following variable is available in file1.c, who can access it?: static int average; Answer: all the functions in the file1.c can access the variable. WHat will be the result of the following code? #define TRUE 0 / some code while(TRUE) / some code Answer: This will not go into the loop as TRUE is defined as 0. What will be printed as the result of the operation below: int x; int modifyvalue() return(x+=10); int changevalue(int x) return(x+=1); void main() int x=10; x+; changevalue(x); x+; modifyvalue(); printf(“First output:%dn“,x); x+; changevalue(x); printf(“Second output:%dn“,x); modifyvalue(); printf(“Third output:%dn“,x); Answer: 12 , 13 , 13 What will be printed as the result of the operation below: main() int x=10, y=15; x = x+; y = +y; printf(“%d %dn”,x,y); Answer: 11, 16 What will be printed as the result of the operation below: main() int a=0; if(a=0) printf(“Cisco Systemsn”); printf(“Cisco Systemsn”); Answer: Two lines with “Cisco Systems” will be printed. 再次更新C+相關題集 1. 以下三條輸出語句分別輸出什么?C易 char str1 = “abc“; char str2 = “abc“; const char str3 = “abc“; const char str4 = “abc“; const char* str5 = “abc“; const char* str6 = “abc“; cout 9 ) cl += (A-9-1); cout temp; unsigned int const size2 = temp; char str2 size2 ; 9. 以下代碼中的輸出語句輸出0嗎,為什么?C+易 struct CLS int m_i; CLS( int i ) : m_

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論