非常基本关于C语言的问题,一个信息类(计算机,资讯工程,电子工程, 通信工程)专业的本科毕业生应该达到的水平。题目不难,全部都能快速地答完,当然也需要一定的知识储备。<br /> 对于大多数人,我们预期你可能答错 3) 4) 15)题,所以答错3道以内的,我们认为你很棒<br /> 答错5道题以内,我们认为你还不错(你还可能答错第9题)<br /> 如果你有6道以上的题目不能答对,基本上我们都不好说什么了....<br /><br />约定:<br />1) 下面的测试题中,认为所有必须的头文件都已经正确的包含了<br />2) 数据类型 <br /> char 一个字节 1 byte<br /> int 两个字节 2 byte (16位系统,认为整型是2个字节)<br /> long int 四个字节 4 byte<br /> float 四个字节4 byet<br /> double 八个字节 8 byte<br /> long double 十个字节 10 byte<br /> pointer 两个字节 2 byte(注意,16位系统,地址总线只有16位)<br /><br /><br />第1题: 考查对volatile关键字的认识<br /><br />#include<setjmp.h><br />static jmp_buf buf;<br /><br />main() <br />{<br />volatile int b;<br />b =3;<br /><br />if(setjmp(buf)!=0) <br />{<br /> printf("%d ", b); <br /> exit(0);<br />}<br />b=5;<br />longjmp(buf , 1);<br />} <br /><br />请问,这段程序的输出是<br />(a) 3<br />(b) 5<br />(c) 0<br />(d) 以上均不是<br /><br />第2题:考查类型转换<br /><br />main()<br />{<br /> struct node <br /> {<br /> int a;<br /> int b;<br /> int c; <br /> };<br /> struct node s= { 3, 5,6 };<br /> struct node *pt = &s;<br /> printf("%d" , *(int*)pt);<br /><br />}<br /><br />这段程序的输出是:<br />(a) 3<br />(b) 5<br />(c) 6<br />(d) 7<br /><br />第3题:考查递归调用<br /><br />int foo ( int x , int n) <br />{<br />int val;<br />val =1;<br /><br />if (n>0) <br />{<br /> if (n%2 == 1) val = val *x;<br /> <br /> val = val * foo(x*x , n/2);<br />}<br />return val;<br />}<br /><br />这段代码对x和n完成什么样的功能(操作)?<br />(a) x^n (x的n次幂)<br />(b) x*n(x与n的乘积)<br />(c) n^x(n的x次幂)<br />(d) 以上均不是<br /><br />第4题:考查指针,这道题只适合于那些特别细心且对指针和数组有深入理解的人<br /><br />main() <br />{<br />int a[5] = {1,2,3,4,5};<br />int *ptr = (int*)(&a+1);<br /><br />printf("%d %d" , *(a+1), *(ptr-1) );<br /><br />}<br /><br />这段程序的输出是:<br /><br />(a) 2 2<br />(b) 2 1<br />(c) 2 5<br />(d) 以上均不是<br /><br />第5题:考查多维数组与指针<br /><br />void foo(int [][3] ); <br /><br />main()<br />{<br />int a [3][3]= { { 1,2,3} , { 4,5,6},{7, ,9}};<br />foo(a);<br />printf("%d" , a[2][1]);<br />}<br /><br />void foo( int b[][3]) <br />{<br />++ b;<br />b[1][1] =9;<br />}<br /><br />这段程序的输出是:<br /><br />(a) 8<br />(b) 9<br />(c) 7<br />(d)以上均不对<br /><br /><br />第6题目:考查逗号表达式<br /><br />main()<br />{<br />int a, b,c, d;<br />a=3;<br />b=5;<br />c=a,b;<br />d=(a,b);<br /><br />printf("c=%d" ,c);<br />printf("d=%d" ,d);<br /><br />}<br /><br />这段程序的输出是:<br /><br />(a) c=3 d=3<br />(b) c=5 d=3<br />(c) c=3 d=5<br />(d) c=5 d=5<br /><br />第7题:考查指针数组<br /><br />main()<br />{<br />int a[][3] = { 1,2,3 ,4,5,6};<br />int (*ptr)[3] =a;<br /><br />printf("%d %d " ,(*ptr)[1], (*ptr)[2] );<br /><br />++ptr;<br />printf("%d %d" ,(*ptr)[1], (*ptr)[2] );<br />}<br /><br />这段程序的输出是:<br /><br />(a) 2 3 5 6<br />(b) 2 3 4 5<br />(c) 4 5 0 0<br />(d) 以上均不对<br /><br />第8题:考查函数指针<br /><br />int *f1(void)<br />{<br />int x =10;<br />return(&x);<br />}<br /><br />int *f2(void)<br />{<br />int*ptr;<br />*ptr =10;<br />return ptr;<br />}<br /><br />int *f3(void)<br />{<br />int *ptr;<br />ptr=(int*) malloc(sizeof(int));<br />return ptr;<br />}<br /><br />上面这3个函数哪一个最可能引起指针方面的问题<br /><br />(a) 只有 f3<br />(b) 只有f1 and f3<br />(c) 只有f1 and f2<br />(d) f1 , f2 ,f3<br /><br />第9题:考查自加操作(++)<br /><br />main()<br />{<br />int i=3;<br />int j;<br /><br />j = sizeof(++i+ ++i);<br /><br />printf("i=%d j=%d", i ,j);<br />}<br /><br />这段程序的输出是:<br /><br />(a) i=4 j=2<br />(b) i=3 j=2<br />(c) i=3 j=4<br />(d) i=3 j=6<br /><br />第10题:考查形式参数,实际参数,指针和数组<br /><br />void f1(int *, int); <br />void f2(int *, int); <br />void(*p[2]) ( int *, int);<br /><br />main()<br />{<br />int a;<br />int b;<br /><br />p[0] = f1;<br />p[1] = f2;<br />a=3;<br />b=5;<br /><br />p[0](&a , b);<br />printf("%d %d " , a ,b);<br /><br />p[1](&a , b);<br />printf("%d %d " , a ,b);<br />}<br /><br />void f1( int* p , int q)<br />{<br />int tmp;<br />tmp =*p;<br />*p = q;<br />q= tmp;<br />}<br /><br />void f2( int* p , int q)<br />{<br />int tmp;<br />tmp =*p;<br />*p = q;<br />q= tmp;<br />}<br /><br />这段程序的输出是:<br /><br />(a) 5 5 5 5<br />(b) 3 5 3 5<br />(c) 5 3 5 3<br />(d) 3 3 3 3<br /><br />第11题:考查自减操作(--)<br /><br />void e(int ); <br /><br />main()<br />{<br />int a;<br />a=3;<br />e(a);<br />}<br /><br />void e(int n)<br />{<br />if(n>0)<br />{<br /> e(--n);<br /> printf("%d" , n);<br /> e(--n);<br />}<br />}<br /><br />这段程序的输出是:<br /><br />(a) 0 1 2 0<br />(b) 0 1 2 1<br />(c) 1 2 0 1<br />(d) 0 2 1 1<br /><br />第12题:考查typedef类型定义,函数指针<br /><br />typedef int (*test) ( float * , float*)<br />test tmp;<br /><br />tmp 的类型是<br /><br />(a) 函数的指针,该函数以 两个指向浮点数(float)的指针(pointer)作为参数(arguments)<br /> Pointer to function of having two arguments that is pointer to float<br />(b) 整型<br />(c) 函数的指针,该函数以 两个指向浮点数(float)的指针(pointer)作为参数(arguments),并且函数的返回值类型是整<br /><br />型<br /> Pointer to function having two argument that is pointer to float and return int<br />(d) 以上都不是<br /><br /><br />第13题:数组与指针的区别与联系<br /><br />main()<br />{<br />char p;<br />char buf[10] ={ 1,2,3,4,5,6,9,8};<br />p = (buf+1)[5];<br />printf("%d" , p);<br />}<br /><br />这段程序的输出是:<br /><br />(a) 5<br />(b) 6<br />(c) 9<br />(d) 以上都不对<br /><br />第14题: 考查指针数组的指针<br /><br />void f(char**);<br /><br />main()<br />{<br />char * argv[] = { "ab" ,"cd" , "ef" ,"gh", "ij" ,"kl" };<br />f( argv );<br />}<br /><br />void f( char **p )<br />{<br />char* t;<br /><br />t= (p+= sizeof(int))[-1];<br /><br />printf( "%s" , t);<br />}<br /><br />这段程序的输出是:<br /><br />(a) ab<br />(b) cd<br />(c) ef<br />(d) gh<br /><br />第15题:此题考查的是C的变长参数,就像标准函数库里printf()那样,这个话题一般国内大学课堂是不会讲到的,不会也情<br /><br />有可原呵呵,<br /><br />#include<stdarg.h><br />int ripple ( int , ...);<br /><br />main()<br />{<br />int num;<br />num = ripple ( 3, 5,7);<br />printf( " %d" , num);<br />}<br /><br />int ripple (int n, ...)<br />{<br />int i , j;<br />int k; <br />va_list p;<br /><br />k= 0;<br />j = 1;<br />va_start( p , n); <br /><br />for (; j<n; ++j) <br />{<br /> i = va_arg( p , int);<br /> for (; i; i &=i-1 )<br /> ++k;<br />}<br />return k;<br />}<br /><br />这段程序的输出是:<br /><br />(a) 7<br />(b) 6<br />(c) 5<br />(d) 3<br /><br />第16题:考查静态变量的知识<br /><br />int counter (int i)<br />{<br />static int count =0;<br />count = count +i;<br />return (count );<br />}<br />main()<br />{<br />int i , j;<br /><br />for (i=0; i <=5; i++)<br /> j = counter(i);<br />}<br /><br />本程序执行到最后,j的值是:<br /><br />(a) 10<br />(b) 15<br />(c) 6<br />(d) 7<br /> |
|