国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

考查初級(jí)嵌入式開(kāi)發(fā)人員C基本功的16道題

發(fā)布時(shí)間:2010-1-3 08:14    發(fā)布者:李寬
非常基本關(guān)于C語(yǔ)言的問(wèn)題,一個(gè)信息類(lèi)(計(jì)算機(jī),資訊工程,電子工程, 通信工程)專(zhuān)業(yè)的本科畢業(yè)生應(yīng)該達(dá)到的水平,如果你有3道以上的題目不能答對(duì),基本上我們都不好說(shuō)什么了....題目不難,全部都能快速地答完,當(dāng)然也需要一定的知識(shí)儲(chǔ)備.

約定:
   1) 下面的測(cè)試題中,認(rèn)為所有必須的頭文件都已經(jīng)正確的包含了
    2)數(shù)據(jù)類(lèi)型   
        char 一個(gè)字節(jié) 1 byte
        int 兩個(gè)字節(jié) 2 byte (16位系統(tǒng),認(rèn)為整型是2個(gè)字節(jié))
        long int 四個(gè)字節(jié) 4 byte
        float  四個(gè)字節(jié)4 byet
        double 八個(gè)字節(jié) 8 byte
        long double 十個(gè)字節(jié) 10 byte
        pointer 兩個(gè)字節(jié) 2 byte(注意,16位系統(tǒng),地址總線(xiàn)只有16位)

第1題: 考查對(duì)volatile關(guān)鍵字的認(rèn)識(shí)

#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);
}   

請(qǐng)問(wèn),這段程序的輸出是
(a) 3
(b) 5
(c) 0
(d) 以上均不是

第2題:考查類(lèi)型轉(zhuǎn)換

main()
{
   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題:考查遞歸調(diào)用

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;
}


這段代碼對(duì)x和n完成什么樣的功能(操作)?
(a) xn
(b) x*n
(c) nx
(d) 以上均不是

第4題:考查指針

main()
{
  int  a[5] = {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題:考查多維數(shù)組與指針

void foo(int [][3] );     

main()
{
  int a [3][3]= { { 1,2,3} , { 4,5,6},{7,8,9}};
  foo(a);
  printf("%d" , a[2][1]);
}

void foo( int b[][3])   
{
  ++ b;
  b[1][1] =9;
}
  

這段程序的輸出是:

(a) 8
(b) 9
(c) 7
(d)以上均不對(duì)


第6題目:考查逗號(hào)表達(dá)式

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題:考查指針數(shù)組

main()
{
  int a[][3] = { 1,2,3 ,4,5,6};
  int (*ptr)[3] =a;

  printf("%d %d "  ,(*ptr)[1], (*ptr)[2] );

  ++ptr;
  printf("%d %d"  ,(*ptr)[1], (*ptr)[2] );
}

這段程序的輸出是:

(a) 2 3 5 6
(b) 2 3 4 5
(c) 4 5 0 0
(d) 以上均不對(duì)

第8題:考查函數(shù)指針

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個(gè)函數(shù)哪一個(gè)最可能引起指針?lè)矫娴膯?wèn)題

(a) 只有 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題:考查形式參數(shù),實(shí)際參數(shù),指針和數(shù)組

void f1(int *, int);
void f2(int *, int);
void(*p[2]) ( int *, int);

main()
{
  int a;
  int b;

  p[0] = f1;
  p[1] = f2;
  a=3;
  b=5;

  p[0](&a , b);
  printf("%d\t %d\t" , a ,b);

  p[1](&a , b);
  printf("%d\t %d\t" , 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(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類(lèi)型定義,函數(shù)指針

typedef int (*test) ( float * , float*)
test tmp;

tmp 的類(lèi)型是

(a) 函數(shù)的指針,該函數(shù)以 兩個(gè)指向浮點(diǎn)數(shù)(float)的指針(pointer)作為參數(shù)(arguments)
      Pointer to function of having two arguments that is pointer to float
(b) 整型
(c) 函數(shù)的指針,該函數(shù)以 兩個(gè)指向浮點(diǎn)數(shù)(float)的指針(pointer)作為參數(shù)(arguments),并且函數(shù)的返回值類(lèi)型是整型
      Pointer to function having two argument that is pointer to float and return int
(d) 以上都不是


第13題:數(shù)組與指針的區(qū)別與聯(lián)系

main()
{
  char *p;
  char buf[10] ={ 1,2,3,4,5,6,9,8};
  p = (buf+1)[5];
  printf("%d" , p);
}

這段程序的輸出是:

(a) 5
(b) 6
(c) 9
(d) 以上都不對(duì)

第14題: 考查指針數(shù)組的指針

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的變長(zhǎng)參數(shù),就像標(biāo)準(zhǔn)函數(shù)庫(kù)里printf()那樣,這個(gè)話(huà)題一般國(guó)內(nèi)大學(xué)課堂是不會(huì)講到的,不會(huì)也情有可原呵呵,

#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   {
    i =  va_arg( p , int);
    for (; i;    i &=i-1  )
      ++k;
  }
  return k;
}

這段程序的輸出是:

(a) 7
(b) 6
(c) 5
(d) 3

第16題:考查靜態(tài)變量的知識(shí)

int counter (int i)
{
  static 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




詳細(xì)參考答案

第1題:   (b)
volatile字面意思是易于揮發(fā)的。這個(gè)關(guān)鍵字來(lái)描述一個(gè)變量時(shí),意味著 給該變量賦值(寫(xiě)入)之后,馬上再讀取,寫(xiě)入的值與讀取的值可能不一樣,所以說(shuō)它"容易揮發(fā)"的。
這是因?yàn)檫@個(gè)變量可能一個(gè)寄存器,直接與外部設(shè)備相連,你寫(xiě)入之后,該寄存器也有可能被外部設(shè)備的寫(xiě)操作所改變;或者,該變量被一個(gè)中斷程序,或另一個(gè)進(jìn)程
改變了.
volatile variable isn't affected by the optimization. Its value after the longjump is the last value variable assumed.

b last value is 5 hence 5 is printed.

setjmp : Sets up for nonlocal goto /* 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.

Lonjjmp: longjmp Performs nonlocal goto /* 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, the only automatic variables guaranteed to remain valid are those declared volatile.

Note: Test program without volatile qualifier (result may very)


第2題:   (a)
The members of structures have address in increasing order of their declaration. If a pointer to a structure is cast to the type of a pointer to its first member, the result refers to the first member.

第3題:  (a)
Non recursive version of the program

int  what ( int x , int  n)
{
  int val;
  int product;
  product =1;
  val =x;

  while(n>0)
  {
    if (n%2 == 1)  
      product = product*val;
    n = n/2;
    val = val* val;
  }
}

/* Code raise a number (x) to a large power (n) using binary doubling strategy */
Algorithm description

(while n>0)  
{
  if  next most significant binary digit of  n( power)  is one
  then multiply accumulated product by current val  ,
  reduce n(power)  sequence by a factor of two using integer division .
  get next val by multiply current value of itself                  
}



第4題:  (c)
type of a is array of int
type of &a is pointer to array of int



Taking a pointer to the element one beyond the end of an array is sure to work.

第5題:  (b)




第6題:  (c)
The comma separates the elements of a function argument list. The comma is also used as an operator in comma expressions. Mixing the two uses of comma is legal, but you must use parentheses to distinguish them. the left operand E1 is evaluated as a void expression, then E2 is evaluated to give the result and type of the comma expression. By recursion, the expression

E1, E2, ..., En

results in the left-to-right evaluation of each Ei, with the value and type of En giving the result of the whole expression.

c=a,b;  / *yields c=a* /
d=(a,b); /* d =b  */



第7題:  (a)



/* ptr is pointer to array of 3 int */


第8題:  (c)
f1顯然有問(wèn)題,它返回一個(gè)局部變量的指針,局部變量是保存在stack中的,退出函數(shù)后,局部變量就銷(xiāo)毀了,保留其指針沒(méi)有意義,因?yàn)槠渲赶虻膕tack空間可能被其他變量覆蓋了
f2也有問(wèn)題, ptr是局部變量,未初始化,它的值是未知的,*ptr不知道指向哪里了,直接給*ptr賦值可能會(huì)覆蓋重要的系統(tǒng)變量,這就是通常說(shuō)的野指針的一種

第9題:  (b)
sizeof  操作符給出其操作數(shù)需要占用的空間大小,它是在編譯時(shí)就可確定的,所以其操作數(shù)即使是一個(gè)表達(dá)式,也不需要在運(yùn)行時(shí)進(jìn)行計(jì)算.( ++i + ++ i  )是不會(huì)執(zhí)行的,所以
i 的值還是3

第10題:  (a)
很顯然選a.
f1交換*p 和 q的值,f1執(zhí)行完后, *p 和 q的值的確交換了,  但 q的改變不會(huì)影響到  b的改變,  *p 實(shí)際上就是 a
所以執(zhí)行f1后,  a=b=5
這道題考查的知識(shí)范圍很廣,包括typedef自定義類(lèi)型,函數(shù)指針,指針數(shù)組
void(*p[ 2 ]) ( int *, int);
定義了一個(gè)函數(shù)指針的數(shù)組p,p有兩個(gè)指針元素.  元素是函數(shù)的指針,函數(shù)指針指向的函數(shù)是一個(gè)帶2個(gè)參數(shù),返回void的函數(shù),所帶的兩個(gè)參數(shù)是 指向整型的指針,和整型
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 is passed). Because of call by value f1, f2 can not effect b

第11題:  (a)



考查--操作和遞歸調(diào)用,仔細(xì)分析一下就可以了

第12題:  (c)
建議不會(huì)的看看C專(zhuān)家編程
從左往有,遇到括號(hào)停下來(lái),將第一個(gè)括號(hào)里的東西看成一個(gè)整體



第13題:  (c)

考查什么時(shí)候數(shù)組就是指針.對(duì)某些類(lèi)型T而言,如果一個(gè)表達(dá)式是 T[]  (T的數(shù)組),  這個(gè)表達(dá)式的值實(shí)際上就是指向該數(shù)組的第一個(gè)元素的指針.所以(buf+1)[5]實(shí)際上就是*(buf +6)或者buf[6]


第14題:  (b)



sizeof(int)的值是2,所以p+=sizeof(int) 指向 argv[2],這點(diǎn)估計(jì)大家都沒(méi)有什么疑問(wèn)

(p+=sizeof(int))[-1] 指向 argv[1],能理解嗎,因?yàn)?p+=sizeof(int))[-1]  就相當(dāng)于 (p+=2)[-1] ,也就是(p+2-1)

第15題:  (c)

在C編譯器通常提供了一系列處理可變參數(shù)的宏,以屏蔽不同的硬件平臺(tái)造成的差異,增加程序的可移植性。這些宏包括va_start、 va_arg和va_end等。
采用ANSI標(biāo)準(zhǔn)形式時(shí),參數(shù)個(gè)數(shù)可變的函數(shù)的原型聲明是:
type funcname(type para1, type para2, ...)
這種形式至少需要一個(gè)普通的形式參數(shù),后面的省略號(hào)不表示省略,而是函數(shù)原型的一部分。type是函數(shù)返回值和形式參數(shù)的類(lèi)型。

不同的編譯器,對(duì)這個(gè)可變長(zhǎng)參數(shù)的實(shí)現(xiàn)不一樣 ,gcc4.x中是內(nèi)置函數(shù).

關(guān)于可變長(zhǎng)參數(shù),可參閱

http://www.upsdn.net/html/2004-11/26.html

http://www.upsdn.net/html/2004-11/24.html


程序分析

va_list p;  /*定義一個(gè)變量 ,保存  函數(shù)參數(shù)列表 的指針*/
va_start( p , n);     /*用va_start宏 初始化 變量p,   
                             va_start宏的第2個(gè)參數(shù)n  ,
                            是一個(gè)固定的參數(shù),
                          必須是我們自己定義的變長(zhǎng)函數(shù)的最后一個(gè)入棧的參數(shù)
                            也就是調(diào)用的時(shí)候參數(shù)列表里的第1個(gè)參數(shù)*/
for (; j {
    i =  va_arg( p , int);      /*va_arg取出當(dāng)前的參數(shù),
                                      并認(rèn)為取出的參數(shù)是一個(gè)整數(shù)(int)  */
    for (; i;    i &=i-1  )      /*判斷取出的i是否為0*/
      ++k;                              /* 如果i不為0,   k自加,  
                                      i與i-1進(jìn)行與邏輯運(yùn)算, 直到i 為0
                                     這是一個(gè)技巧,下面會(huì)談到它的功能*/
}

當(dāng)我們調(diào)用ripple函數(shù)時(shí),傳遞給ripple函數(shù)的 參數(shù)列表的第一個(gè)參數(shù)n的值是3 .

va_start 初始化 p士氣指向第一個(gè)未命名的參數(shù)(n是有名字的參數(shù)) ,也就是 is 5 (第一個(gè)).

每次對(duì) va_arg的調(diào)用,都將返回一個(gè)參數(shù),并且把 p 指向下一個(gè)參數(shù).

va_arg 用一個(gè)類(lèi)型名來(lái)決定返回的參數(shù)是何種類(lèi)型,以及在 var_arg的內(nèi)部實(shí)現(xiàn)中決定移動(dòng)多大的距離才到達(dá)下一個(gè) 參數(shù)

(; i; i&=i-1) k++        /* 計(jì)算i有多少bit被置1 */


5用二進(jìn)制表示是 (101) 2
7用二進(jìn)制表示 (111) 3
所以 k 返回 5(2+3),也即本題應(yīng)該選c

舉個(gè)例子,就很好理解了

令  i= 9 = 1001
     i-1  = 1000        
    (i-1) +1 = i
               1000
                 +1
              1 001

因?yàn)閕與i-1的最右邊的那位(最低位) 肯定是不同,如果i1,i-1肯定是0,反之亦然.     i & i-1 這個(gè)運(yùn)算,在二相補(bǔ)的數(shù)字系統(tǒng)中,將會(huì) 消除最右邊的1位


第16題:  (b)
答案是 (b)
相傳高斯小學(xué)一年級(jí)的時(shí)候就會(huì)做這類(lèi)等比數(shù)列的題目了.這道題考查的是靜態(tài)變量的知識(shí),當(dāng)每次調(diào)用完函數(shù)之后,靜態(tài)變量的值不會(huì)丟失,這與棧中的臨時(shí)局部變量明顯不同的地方.
所以,第一次調(diào)用counter(0)之后,count =0
第二次調(diào)用 counter(1)后 count = 0+1;
第三次調(diào)用 counter(2) count = 1+2;    /* count = count +i */
第四次調(diào)用 counter(3) count = 3+3;
第五次調(diào)用 counter(4) count = 6+4;
第六次調(diào)用 counter(5) count = 10+5;
本文地址:http://www.qingdxww.cn/thread-7187-1-1.html     【打印本頁(yè)】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
freedomzlp 發(fā)表于 2010-5-28 09:08:56
呵呵  干嗎 英文和漢語(yǔ)摻著來(lái)?中毒了?
pjar 發(fā)表于 2010-6-1 08:50:32
好東西
heguangjing 發(fā)表于 2010-7-1 19:11:42
受教
zhujunfeng0117 發(fā)表于 2010-9-4 15:53:12
樓上受驚(精)了。。。
罪過(guò)罪過(guò)。。。
刺客 發(fā)表于 2010-9-20 16:40:38
看來(lái)C很重要啊!
oyty87 發(fā)表于 2010-9-21 14:04:50
好東西
shinhwaforever 發(fā)表于 2010-10-21 15:07:15
學(xué)習(xí)了,謝謝樓主的分享啊.
zwc6658305 發(fā)表于 2010-11-12 17:15:24
錯(cuò)3個(gè)
m1221m 發(fā)表于 2010-11-18 20:37:34
樓主辛苦,謝謝分享
wangxutao 發(fā)表于 2011-1-1 21:30:34
thank you!
shenyan 發(fā)表于 2011-1-14 22:36:01
學(xué)習(xí)了
lala1008 發(fā)表于 2011-1-25 11:46:57
謝謝
lhj76310 發(fā)表于 2011-2-25 21:09:16
謝謝了,我會(huì)好好學(xué)習(xí)一下的
cqzy6666 發(fā)表于 2011-3-1 10:02:22
不錯(cuò)
shalione 發(fā)表于 2011-3-21 19:35:25
wuafeng 發(fā)表于 2011-3-30 09:15:33
受教了
williamkmcn 發(fā)表于 2011-4-20 11:56:26
thanks, learn it
sw9518 發(fā)表于 2011-4-26 11:55:09
ckq1988 發(fā)表于 2011-5-22 23:57:13
頂起!!
12下一頁(yè)
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠(chǎng)商推薦

  • Microchip視頻專(zhuān)區(qū)
  • 無(wú)線(xiàn)充電基礎(chǔ)知識(shí)及應(yīng)用培訓(xùn)教程2
  • 無(wú)線(xiàn)充電基礎(chǔ)知識(shí)及應(yīng)用培訓(xùn)教程3
  • 5分鐘詳解定時(shí)器/計(jì)數(shù)器E和波形擴(kuò)展!
  • 為何選擇集成電平轉(zhuǎn)換?
  • 貿(mào)澤電子(Mouser)專(zhuān)區(qū)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久性视频| 最近免费观看高清韩国日本大全 | 日日摸夜夜欧美一区二区 | 亚洲精品网址 | 最新更新国内自拍视频 | 欧美成人久久久免费播放 | 99久久国产综合精麻豆 | 欧美三级视频在线 | 亚洲一区中文字幕 | 禁网站在线观看免费视频 | 免费欧洲毛片a级视频 | 中文字幕日韩精品麻豆系列 | 99久久精品久久久久久清纯 | 亚洲六月丁香色婷婷综合久久 | 国产欧美日本在线观看 | 欧美在线高清视频 | 日本一区二区不卡久久入口 | 日韩日韩日韩日韩日韩 | 成年女人在线观看片免费视频 | 伊人影视在线观看日韩区 | 玖玖在线国产精品 | 免费亚洲视频在线观看 | 日韩操片 | h漫免费 | 亚洲欧美日本国产一区二区三区 | 久久精品国产精品亚洲婷婷 | 成人欧美在线观看 | 日本黄大片在线观看 | 成年美女黄网站色视频大全免费 | 国产在线麻豆精品 | 青青日 | 日本男女网站 | 一级爱爱片一级毛片-一毛 一级a爰片久久毛片 | 亚洲系列国产系列 | 99这里| 亚洲高清在线天堂精品 | 4438x全国最大色 | 亚洲视频免费一区 | 婷婷丁香色综合狠狠色 | 国产高清一级毛片在线人 | 久草免费在线观看 |