c語言經(jīng)典筆試題_第1頁
c語言經(jīng)典筆試題_第2頁
c語言經(jīng)典筆試題_第3頁
c語言經(jīng)典筆試題_第4頁
c語言經(jīng)典筆試題_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第頁共頁c語言經(jīng)典筆試題c語言經(jīng)典筆試題1.用預(yù)處理指令#define聲明一個常數(shù),用以;#defineSECONDS_PER_YEAR(;2.寫一個“標(biāo)準(zhǔn)”宏MIN,這個宏輸入兩個參數(shù)并;#defineMIN(A,B)((A)<=;4.嵌入式系統(tǒng)中經(jīng)常要用到無限循環(huán),你怎么樣用C;這個問題用幾個解決方案;while(1);一些程序員更喜歡如下方案:;for(;;);第三個方案是用goto;1.用預(yù)處理指令#define聲明一個常數(shù),用以說明1年中有多少秒〔忽略閏年問題〕#defineSECONDS_PER_YEAR(60*60*24*365)UL2.寫一個“標(biāo)準(zhǔn)”宏MIN,這個宏輸入兩個參數(shù)并返回較小的一個。#defineMIN(A,B)((A)<=(B)(A):(B))4.嵌入式系統(tǒng)中經(jīng)常要用到無限循環(huán),你怎么樣用C編寫死循環(huán)呢?這個問題用幾個解決方案。我首選的方案是:while(1){}一些程序員更喜歡如下方案:for(;;){}第三個方案是用gotoLoop:...gotoLoop;5.用變量a給出下面的定義a)一個整型數(shù)〔Aninteger〕b)一個指向整型數(shù)的指針〔Apointertoaninteger〕c)一個指向指針的的指針,它指向的指針是指向一個整型數(shù)〔Apointertoapointertoaninteger〕d)一個有10個整型數(shù)的數(shù)組〔Anarrayof10integers〕e)一個有10個指針的數(shù)組,該指針是指向一個整型數(shù)的〔Anarrayof10pointerstointegers〕f)一個指向有10個整型數(shù)數(shù)組的指針〔Apointertoanarrayof10integers〕g)一個指向函數(shù)的指針,該函數(shù)有一個整型參數(shù)并返回一個整型數(shù)〔Apointertoafunctionthattakesanintegerasanargumentandreturnsaninteger〕h)一個有10個指針的數(shù)組,該指針指向一個函數(shù),該函數(shù)有一個整型參數(shù)并返回一個整型數(shù)〔Anarrayoftenpointerstofunctionsthattakeanintegerargumentandreturnaninteger〕答案是:a)inta;//Anintegerb)int*a;//Apointertoanintegerc)int**a;//Apointertoapointertoanintegerd)inta[10];//Anarrayof10integerse)int*a[10];//Anarrayof10pointerstointegersf)int(*a)[10];//Apointertoanarrayof10integersg)int(*a)(int);//Apointertoafunctionathattakesanintegerargumentandreturnsanintegerh)int(*a[10])(int);//Anarrayof10pointerstofunctionsthattakeanintegerargumentandreturnaninteger6.關(guān)鍵字static的作用是什么?這個簡單的問題很少有人能答復(fù)完全。在C語言中,關(guān)鍵字static有三個明顯的作用:1).在函數(shù)體,一個被聲明為靜態(tài)的變量在這一函數(shù)被調(diào)用過程中維持其值不變。2).在模塊內(nèi)〔但在函數(shù)體外〕,一個被聲明為靜態(tài)的變量可以被模塊內(nèi)所用函數(shù)訪問,但不能被模塊外其它函數(shù)訪問。它是一個本地的全局變量。3).在模塊內(nèi),一個被聲明為靜態(tài)的`函數(shù)只可被這一模塊內(nèi)的其它函數(shù)調(diào)用。那就是,這個函數(shù)被限制在聲明它的模塊的本地范圍內(nèi)使用。7.關(guān)鍵字const是什么含意?constinta;intconsta;constint*a;int*consta;intconst*aconst;前兩個的作用是一樣,a是一個常整型數(shù)。第三個意味著a是一個指向常整型數(shù)的指針〔也就是,整型數(shù)是不可修改的,但指針可以〕。第四個意思a是一個指向整型數(shù)的常指針〔也就是說,指針指向的整型數(shù)是可以修改的,但指針是不可修改的〕。最后一個意味著a是一個指向常整型數(shù)的常指針〔也就是說,指針指向的整型數(shù)是不可修改的,同時指針也是不可修改的〕。假如應(yīng)試者能正確答復(fù)這些問題,那么他就給我留下了一個好印象。8.關(guān)鍵字volatile有什么含意并給出三個不同的例子。一個定義為volatile的變量是說這變量可能會被意想不到地改變,這樣,編譯器就不會去假設(shè)這個變量的值了。準(zhǔn)確地說就是,優(yōu)化器在用到這個變量時必須每次都小心地重新讀取這個變量的值,而不是使用保存在存放器里的備份。下面是volatile變量的幾個例子:1).并行設(shè)備的硬件存放器〔如:狀態(tài)存放器〕2).一個中斷效勞子程序中會訪問到的非自動變量(Non-automaticvariables)3).多線程應(yīng)用中被幾個任務(wù)共享的變量1).一個參數(shù)既可以是const還可以是volatile嗎?解釋為什么。2).一個指針可以是volatile嗎?解釋為什么。3).下面的函數(shù)有什么錯誤:intsquare(volatileint*ptr){return*ptr**ptr;}Ptr內(nèi)容可能被修改,無法保證兩次獲得同一個值,應(yīng)該先取出值放入一個變量中,然后通過這個變量來計算9.嵌入式系統(tǒng)總是要用戶對變量或存放器進(jìn)展位操作。給定一個整型變量a,寫兩段代碼,第一個設(shè)置a的bit3,第二個去除a的bit3。在以上兩個操作中,要保持其它位不變。#defineBIT3(0x1<<3)staticinta;voidset_bit3(void){}voidclear_bit3(void){a-=~BIT3;}10.嵌入式系統(tǒng)經(jīng)常具有要求程序員去訪問某特定的內(nèi)存位置的特點(diǎn)。在某工程中,要求設(shè)置一絕對地址為0x67a9的整型變量的值為0xaa66。編譯器是一個純粹的ANSI編譯器。寫代碼去完成這一任務(wù)。Int*p;P=(int*)0x67a9;*p=0xaa66;11.中斷是嵌入式系統(tǒng)中重要的組成局部,這導(dǎo)致了很多編譯開發(fā)商提供一種擴(kuò)展—讓標(biāo)準(zhǔn)C支持中斷。具代表事實(shí)是,產(chǎn)生了一個新的關(guān)鍵字__interrupt。下面的代碼就使用了__interrupt關(guān)鍵字去定義了一個中斷效勞子程序(ISR),請?jiān)u論一下這段代碼的。__interruptdoublepute_area(doubleradius){doublearea=PI*radius*radius;printf(“Area=%f”,area);returnarea;}12.下面的代碼輸出是什么,為什么?voidfoo(void){unsignedinta=6;intb=-20;(a+b》6)puts(“》6”):puts(“<=6”);}》613.評價下面的代碼片斷:unsignedintzero=0;unsignedintpzero=0xFFFF;/*1'splementofzero*/14.盡管不像非嵌入式計算機(jī)那么常見,嵌入式系統(tǒng)還是有從堆〔heap〕中動態(tài)分配內(nèi)存的過程的。那么嵌入式系統(tǒng)中,動態(tài)分配內(nèi)存可能發(fā)生的問題是什么?主要有三種類型:內(nèi)存泄露、內(nèi)存碎片和內(nèi)存崩潰內(nèi)存崩潰是內(nèi)存使用最嚴(yán)重的結(jié)果,主要原因有數(shù)組訪問越界、寫已經(jīng)釋放的內(nèi)存、指針計算錯誤、訪問堆棧地址越界等等。碎片搜集的問題,變量的持行時間等等下面的代碼片段的輸出是什么,為什么?if((ptr=(char*)malloc(0))==NULL)puts(“Gotanullpointer”);elseputs(“Gotavalidpointer”);該代碼的輸出是“Gotavalidpointer”。15.Typedef在C語言中頻繁用以聲明一個已經(jīng)存在的數(shù)據(jù)類型的同義字。也可以用預(yù)處理器做類似的事。例如,考慮一下下面的例子:#definedPSstructs*typedefstructs*tPS;答案是:typedef更好??紤]下面的例子:dPSp1,p2;tPSp3,p4;第一個擴(kuò)展為structs*p1,p2;上面的代碼定義p1為一個指向構(gòu)造的指,p2為一個實(shí)際的構(gòu)造,這也許不是你想要的。第二個例子正確地定義了p3和p4兩個指針。16.C語言同意一些令人震驚的構(gòu)造,下面的構(gòu)造是合法的嗎,假如是它做些什么?inta=5,b=7,c;c=a+++b;上面的代碼被處理成:c=a+++b;因此,這段代碼持行后a=6,b=7,c=12。17.找錯題試題1:voidtest1{charstring[10];char*str1=“0123456789”;strcpy(string,str1);}試題2:voidtest2{charstring[10],str1[10];inti;for(i=0;i<10;i++){str1[i]='a';}strcpy(string,str1);}試題3:voidtest3(char*str1){charstring[10];if(strlen(str1)<=10){strcpy(string,str1);}}解答:試題1字符串str1需要11個字節(jié)才能存放下〔包括末尾的-〕,而string只有10個字節(jié)的空間,strcpy會導(dǎo)致數(shù)組越界;對試題2,假如面試者指出字符數(shù)組str1不能在數(shù)組內(nèi)完畢可以給3分;假如面試者指出strcpy(string,str1)調(diào)用使得從str1內(nèi)存起復(fù)制到string內(nèi)存起所復(fù)制的字節(jié)數(shù)具有不確定性可以給7分,在此根底上指出庫函數(shù)strcpy工作方式的給10分;對試題3,if(strlen(str1)<=10)應(yīng)改為if(strlen(str1)<10),因?yàn)閟trlen的結(jié)果未統(tǒng)計-

溫馨提示

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

評論

0/150

提交評論