考查嵌入式C開發(fā)人員的最好的0x10道題_第1頁
考查嵌入式C開發(fā)人員的最好的0x10道題_第2頁
考查嵌入式C開發(fā)人員的最好的0x10道題_第3頁
考查嵌入式C開發(fā)人員的最好的0x10道題_第4頁
考查嵌入式C開發(fā)人員的最好的0x10道題_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、考查嵌入式C開發(fā)人員的最好的0x10道題編者按:非常基本關于C語言的問題,一個信息類(計算機,資訊工程,電子工程, 通信工程專業(yè)的本科畢業(yè)生應該達到的水平。題目不難,全部都能快速地答完,當然也需要一定的知識儲備。對于大多數人,我們預期你可能答錯 3 4 15題,所以答錯3道以內的,我們認為你很棒答錯5道題以內,我們認為你還不錯(你還可能答錯第9題如果你有6道以上的題目不能答對,基本上我們都不好說什么了.約定:1 下面的測試題中,認為所有必須的頭文件都已經正確的包含了2數據類型 char 一個字節(jié) 1 byteint 兩個字節(jié) 2 byte (16位系統(tǒng),認為整型是2個字節(jié)long int 四個

2、字節(jié) 4 bytefloat 四個字節(jié)4 byetdouble 八個字節(jié) 8 bytelong double 十個字節(jié) 10 bytepointer 兩個字節(jié) 2 byte(注意,16位系統(tǒng),地址總線只有16位第1題: 考查對volatile關鍵字的認識#include static jmp_buf buf;main( volatile int b; b =3; if(setjmp(buf!=0 printf("%d ", b; exit(0; b=5; longjmp(buf , 1; 請問,這段程序的輸出是(a 3(b 5(c 0(d 以上均不是第2題:考查類型轉換ma

3、in( struct node int a; int b; int c; ; struct node s= 3, 5,6 ; struct node *pt = &s; printf("%d" , *(int*pt; 這段程序的輸出是:(a 3(b 5(c 6(d 7第3題:考查遞歸調用int foo ( int x , int n int val; val =1; if (n>0 if (n%2 = 1 val = val *x; val = val * foo(x*x , n/2; return val; 這段代碼對x和n完成什么樣的功能(操作?(a xn

4、 (x的n次冪(b x*n(x與n的乘積(c nx(n的x次冪(d 以上均不是第4題:考查指針,這道題只適合于那些特別細心且對指針和數組有深入理解的人main( int a5 = 1,2,3,4,5; int *ptr = (int*(&a+1; printf("%d %d" , *(a+1, *(ptr-1 ; 這段程序的輸出是:(a 2 2(b 2 1(c 2 5(d 以上均不是第5題:考查多維數組與指針void foo(int 3 ; main( int a 33= 1,2,3 , 4,5,6,7,8,9; foo(a; printf("%d&quo

5、t; , a21;void foo( int b3 + b; b11 =9; 這段程序的輸出是:(a 8(b 9(c 7(d以上均不對第6題目:考查逗號表達式main( int a, b,c, d; a=3; b=5; c=a,b; d=(a,b; printf("c=%d" ,c; printf("d=%d" ,d;這段程序的輸出是:(a c=3 d=3(b c=5 d=3(c c=3 d=5(d c=5 d=5第7題:考查指針數組main( int a3 = 1,2,3 ,4,5,6; int (*ptr3 =a; printf("%d %

6、d " ,(*ptr1, (*ptr2 ; +ptr; printf("%d %d" ,(*ptr1, (*ptr2 ;這段程序的輸出是:(a 2 3 5 6(b 2 3 4 5(c 4 5 0 0(d 以上均不對第8題:考查函數指針int *f1(void int x =10; return(&x;int *f2(void int*ptr; *ptr =10; return ptr;int *f3(void int *ptr; ptr=(int* malloc(sizeof(int; return ptr;上面這3個函數哪一個最可能引起指針方面的問題(a

7、 只有 f3(b 只有f1 and f3(c 只有f1 and f2(d f1 , f2 ,f3第9題:考查自加操作(+main( int i=3; int j; j = sizeof(+i+ +i; printf("i=%d j=%d", i ,j;這段程序的輸出是:(a i=4 j=2(b i=3 j=2(c i=3 j=4(d i=3 j=6第10題:考查形式參數,實際參數,指針和數組void f1(int *, int; void f2(int *, int; void(*p2 ( int *, int;main( int a; int b; p0 = f1; p1

8、 = f2; a=3; b=5; p0(&a , b; printf("%dt %dt" , a ,b; p1(&a , b; printf("%dt %dt" , a ,b;void f1( int* p , int q int tmp; tmp =*p; *p = q; q= tmp;void f2( int* p , int q int tmp; tmp =*p; *p = q; q= tmp; 這段程序的輸出是:(a 5 5 5 5(b 3 5 3 5(c 5 3 5 3(d 3 3 3 3第11題:考查自減操作(-void e(

9、int ; main( int a; a=3; e(a;void e(int n if(n>0 e(-n; printf("%d" , n; e(-n; 這段程序的輸出是:(a 0 1 2 0(b 0 1 2 1(c 1 2 0 1(d 0 2 1 1第12題:考查typedef類型定義,函數指針typedef int (*test ( float * , float*test tmp; tmp 的類型是(a 函數的指針,該函數以 兩個指向浮點數(float的指針(pointer作為參數(argumentsPointer to function of having t

10、wo arguments that is pointer to float(b 整型(c 函數的指針,該函數以 兩個指向浮點數(float的指針(pointer作為參數(arguments,并且函數的返回值類型是整型Pointer to function having two argument that is pointer to float and return int(d 以上都不是第13題:數組與指針的區(qū)別與聯(lián)系main( char p; char buf10 = 1,2,3,4,5,6,9,8; p = (buf+15; printf("%d" , p;這段程序的輸

11、出是:(a 5(b 6(c 9(d 以上都不對第14題: 考查指針數組的指針Void f(char*;main( char * argv = "ab" ,"cd" , "ef" ,"gh", "ij" ,"kl" ; f( argv ;void f( char *p char* t; t= (p+= sizeof(int-1; printf( "%s" , t;這段程序的輸出是:(a ab(b cd(c ef(d gh第15題:此題考查的是C的變長參數,就

12、像標準函數庫里printf(那樣,這個話題一般國內大學課堂是不會講到的,不會也情有可原呵呵,#include int ripple ( int , .;main( int num; num = ripple ( 3, 5,7; printf( " %d" , num;int ripple (int n, . int i , j; int k; va_list p; k= 0; j = 1; va_start( p , n; for (; j 這段程序的輸出是 : (a 7(b 6(c 5(d 3第16題:考查靜態(tài)變量的知識int counter (int i static

13、int count =0; count = count +i; return (count ;main( int i , j; for (i=0; i <=5; i+ j = counter(i;本程序執(zhí)行到最后,j的值是:(a 10(b 15(c 6(d 7詳細參考答案第1題: (bvolatile字面意思是易于揮發(fā)的。這個關鍵字來描述一個變量時,意味著 給該變量賦值(寫入之后,馬上再讀取,寫入的值與讀取的值可能不一樣,所以說它"容易揮發(fā)"的。這是因為這個變量可能一個寄存器,直接與外部設備相連,你寫入之后,該寄存器也有可能被外部設備的寫操作所改變;或者,該變量被一個

14、中斷程序,或另一個進程改變了.volatile 不會被編譯器優(yōu)化影響,在longjump 后,它的值 是后面假定的變量值,b最后的值是5,所以5被打印出來.setjmp : 設置非局部跳轉 /* setjmp.h*/Stores context information such as register values so that the lomgjmp function can return control to the statement following the one calling setjmp.Returns 0 when it is initially called.Lonjj

15、mp: 執(zhí)行一個非局部跳轉 /* setjmp.h*/Transfers control to the statement where the call to setjmp (which initialized buf was made. Execution continues at this point as if longjmp cannot return the value 0.A nonvolatile automatic variable might be changed by a call to longjmp.When you use setjmp and longjmp, th

16、e only automatic variables guaranteed to remain valid are those declared volatile.Note: Test program without volatile qualifier (result may very更詳細介紹,請參閱 C語言的setjmp和longjmp第2題: (a結構題的成員在內存中的地址是按照他們定義的位置順序依次增長的。如果一個結構體的指針被看成 它的第一個成員的指針,那么該指針的確指向第一個成員第3題: (a此題目較難.這個程序的非遞歸版本 int what ( int x , int n in

17、t val; int product; product =1; val =x; while(n>0 if (n%2 = 1 product = product*val; /*如果是奇數次冪, x(val 要先乘上一次,; 偶數次冪,最后返回時才會到這里 乘以1*/ val = val* val; n = n/2; return product;/* 用二元復乘策略 */算法描述(while n>0 if next most significant binary digit of n( power is one then multiply accumulated product by

18、 current val , reduce n(power sequence by a factor of two using integer division . get next val by multiply current value of itself 第4題: (ca的類型是一個整型數組,它有5個成員&a的類型是一個整型數組的指針所以&a + 1指向的地方等同于 a6所以*(a+1 等同于a1ptr等同 a6, ptr-1就等同與a5第5題: (b題目自身就給了足夠的提示b00 = 4b10 = 7第6題: (c考查逗號表達式,逗號表達式的優(yōu)先級是很低的,比 賦值(

19、=的優(yōu)先級 低. 逗號表達式的值就是最后一個元素的值逗號表達式的還有一個作用就是分割函數的參數列表.E1, E2, ., En上面這個表示式的左右是,E1, E2,. En的值被分別計算出來,En計算出來的結構賦給整個逗號表達式 c=a,b; / *yields c=a* /d=(a,b; /* d =b */第7題: (aptr是一個數組的指針,該數組有3個int成員第8題: (cf1顯然有問題,它返回一個局部變量的指針,局部變量是保存在stack中的,退出函數后,局部變量就銷毀了,保留其指針沒有意義,因為其指向的stack空間可能被其他變量覆蓋了f2也有問題, ptr是局部變量,未初始化,

20、它的值是未知的,*ptr不知道指向哪里了,直接給*ptr賦值可能會覆蓋重要的系統(tǒng)變量,這就是通常說的野指針的一種第9題: (bsizeof 操作符給出其操作數需要占用的空間大小,它是在編譯時就可確定的,所以其操作數即使是一個表達式,也不需要在運行時進行計算.( +i + + i 是不會執(zhí)行的,所以i 的值還是3第10題: (a很顯然選a.f1交換*p 和 q的值,f1執(zhí)行完后, *p 和 q的值的確交換了, 但 q的改變不會影響到 b的改變, *p 實際上就是 a 所以執(zhí)行f1后, a=b=5這道題考查的知識范圍很廣,包括typedef自定義類型,函數指針,指針數組void(*p 2 ( in

21、t *, int;定義了一個函數指針的數組p,p有兩個指針元素. 元素是函數的指針,函數指針指向的函數是一個帶2個參數,返回void的函數,所帶的兩個參數是 指向整型的指針,和整型p 0 = f1; p 1 = f2 contain address of function .function name without parenthesis represent address of function Value and address of variable is passed to function only argument that is effected is a (address i

22、s passed. Because of call by value f1, f2 can not effect b第11題: (a考查-操作和遞歸調用,仔細分析一下就可以了第12題: (c分析函數聲明,建議不會的看看C專家編程這里介紹一個簡單規(guī)則:從左往有,遇到括號停下來,將第一個括號里的東西看成一個整體 第13題: (c考查什么時候數組就是指針.對某些類型T而言,如果一個表達式是 T (T的數組, 這個表達式的值實際上就是指向該數組的第一個元素的指針.所以(buf+15實際上就是*(buf +6或者buf6第14題: (bsizeof(int的值是2,所以p+=sizeof(int 指向

23、argv2,這點估計大家都沒有什么疑問(p+=sizeof(int-1 指向 argv1,能理解嗎,因為(p+=sizeof(int-1 就相當于 (p+=2-1 ,也就是(p+2-1第15題: (c在C編譯器通常提供了一系列處理可變參數的宏,以屏蔽不同的硬件平臺造成的差異,增加程序的可移植性。這些宏包括va_start、 va_arg和va_end等。 采用ANSI標準形式時,參數個數可變的函數的原型聲明是: type funcname(type para1, type para2, . 這種形式至少需要一個普通的形式參數,后面的省略號不表示省略,而是函數原型的一部分。type是函數返回值和

24、形式參數的類型。不同的編譯器,對這個可變長參數的實現不一樣 ,gcc4.x中是內置函數.關于可變長參數,可參閱 程序分析va_list p; /*定義一個變量 ,保存 函數參數列表 的指針*/va_start( p , n; /*用va_start宏 初始化 變量p, va_start宏的第2個參數n , 是一個固定的參數, 必須是我們自己定義的變長函數的最后一個入棧的參數 也就是調用的時候參數列表里的第1個參數*/for (; j 從 1 開始 , 遍歷所有可變參數 */ i = va_arg( p , int; /*va_arg 取出當前的參數 , 并認為取出的參數是一個整數 (int *

25、/ for (; i; i &=i-1 /* 判斷取出的 i 是否為 0*/ +k; /* 如果 i 不為 0, k 自加 , i 與 i-1 進行與邏輯運算 , 直到 i 為 0 這是一個技巧,下面會談到它的功能 */ 當我們調用 ripple 函數時,傳遞給 ripple 函數的 參數列表的第一個參數 n 的值是 3 . va_start 初始化 p士氣指向第一個未命名的參數(n是有名字的參數 ,也就是 is 5 (第一個.每次對 va_arg的調用,都將返回一個參數,并且把 p 指向下一個參數.va_arg 用一個類型名來決定返回的參數是何種類型,以及在 var_arg的內部實現中決定移動多大的距離才到達下一個 參數(; i; i&=i-1 k+ /* 計算i有多少bit被置1

溫馨提示

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

評論

0/150

提交評論