全国计算机等级考试二级C语言笔试题详解 联系客服

发布时间 : 星期一 文章全国计算机等级考试二级C语言笔试题详解更新完毕开始阅读56a95f25e2bd960590c67748

(28)请选出以下程序的输出结果_______。 #include sub(int*s,int y) { static int t=3; y=s[t];t--; } main()

{ int a[]={1,2,3,4},i,x=0; for(i=0;i<4;i++) { sub(a,x);

printf(“%d”,x); }

printf(“\\n”); }

A)1234 B)4321 C)0000 D)4444 参考答案:C

考察知识点:函数的形参和实参的关系

解析:x作为函数sub()的实参时,函数对x值的改变没有返回主函数,并不能使得x的值变化,所以在打印时,x的值是始终不变的,即为O。

(29)若有以下说明和语句,请选出哪个是对c数组元素的正确引用_______。 int c[4][5],(*cp)[5]; cp=c;

A)cp+1 B)*(cp+3) C)*(cp+1)+3 D)*(*cp+2) 参考答案:D

考察知识点:数组元素的引用

解析:cp=c这个语句是将数组第0行的地址赋给了cp。cp+1使指针指向二维数组c的第一行;*(cp+3)是数组c的第三行的第0列的地址值;*(cp+1)+3是数组c的第一行第三列的地址值。

(30)设有以下语句 char a=3,b=6,c; c=a^b<<2:

则c的二进制值是_______。

A)00011011 B)00010100 C)00011 100 D)00011000 参考答案:A

考察知识点:位运算

解析:“<<”是c语言中规定的左移运算符,例如,a=a<<2,这个语句即是将a的二进制数左移两位,左移一位相当于该数乘以2,左移两位相当于该数乘以2的2次方;,^是异或运算符,所以,c的二进制值应为00011011。

(33)有以下程序 #include main() { int c;

while((c=getchar())!=‘\\n’) {

switch(c-‘2’) { case O:

case 1:putchar(c+4);

case 2:putchar(c+4);break; case 3:putchar(c+3);

efault:putchar(c+2);break; } }

}

从第一列开始输入以下数据,? 代表一个回车符。 2473?

程序的输出结果是_______。

A)66877 B)66866 C)66778777 D)6688766 参考答案:A

考察知识点:switch()语句

解析:getchar()函数是从键盘接受一个字符输入;当用户键入的字符不是回车符时,会进入一个多分支选择语句,根据表达式c-‘2’的值进行分支选择:putchar()是在屏幕上打印一个字符,最后的结果应当为668977。

(34)以下程序的输出结果是________。 main() { int w=5; fun(w);

printf(“\\n”); }

fun(int k) { if(k>O) fun(k-1);

printf(“%d”,k); }

A)5 4 3 2 1 B)0 1 2 3 4 5 C)1 2 3 4 5 D)5 4 3 2 1 0 参考答案:B

考察知识点:函数的递归调用 解析:函数的递归调用就是在调用一个函数的过程中又出现直接或间接地调用该函数本身。fun函数共被调用6次,即fun(5)、fun(4)、fun(3)、fun(2)、fun(1)、fun(O)。其中fun(5)是main函数调用的,其余是在fun函数中调用的。

(35)若fp是指向某文件的指针,且已读到此文件的末尾,则函数feof(f1))的返回值是_________ 。

A)EOF B)0 C)非零值 D)NULL 参考答案:C

考察知识点:文件结束符的返回值

解析:函数feof是用来判断文件是否已读到末尾,如果己读到末尾则返回非零值,否则返回O。

(46)请读程序:

#include main()

{ int a;float b,c;

scanf(“-?O”,&a,&b,&c);

printf(“\\na=%d,b=ì=%f\\n”,a,b,c); }

若运行时从键盘上输入9876543210↙,则上面程序的输出结果是_______。 A)a=98,b=765,c=4321 B)a=10,b=432,c=8765 C)a=98,b=765.000000,c=432 1.000000 D)a=98,b=765.0,c=4321.0 参考答案:C

考察知识点:格式输入、输出函数

解析:scanf()把刚户从键盘录入的数字的第1、2位存入整型变量a;把第3、4、5位存入单精度实型变量b,由于“f”是以小数形式输出单、双精度数。隐含输出6位小数,所以b=4321.000000;把第6、7、8、9位存入单精度实型变量c,用户录入的第10位被scanf()遗弃。这时变量fd、b、c的值分别为:98、765.000000、432 1.000000。

(47)请选出以下程序的输出结果_______。 #include sub(x,y,z) int x,y,*z: { *z=y-x;} main()

{ int a,b,c;

sub(10,5,&a);sub(7,a,&b);sub(a,b,&c); printf(“%d,%d,%d\\n”,a,b,c); }

A)5,2,3 B)-5,-12,-7 C)-5,-12,-17 D)5,-2,-7 参考答案:B

考察知识点:函数的调用

解析:sub()函数的是将形参y和x的差赋给了z指向的那个内存地址,所以在sub(10,5,&a)中,10和5用于值传递,直接将数值10和5分别传递给了变量x和y,而对于a是属于地址传递,也就是a与z指向了一个存储单元,在执行函数后,a的值随*z变化,但b,c值并不改变,所以此次函数被调用后,a的值为y-x=-5,同理可知,在sub(7,a,&b)后,b的值发生变化,其值为-5-7=-12,住sub(a,b,&c)后,c的值发生变化,其值为-12-(-5)=-7。

(48)若x是整型变量,pb是基类型为整型的指针变量,则正确的赋值表达式是_______。 A)pb=&x; B)pb=x; C)*pb=&x; D)*pb=*x 参考答案:A

考察知识点:赋值表达式

解析:选项A是将变量x的地址赋给变量pb,使pb指向x,故为正确的赋值表达式。 选项B是将x的值当作地址赋给指针pb,pb指¨一个地址等于x值的内存单元。 选项C足将x的地址赋给指针pb指向的那个地址等于x值的内存单元。 选项D是不正确的语句。

(49)若要用下面的程序片段使指针变量p指向一个存储整型变量的动态存储单元。 int *p;

p=_______malloc(sizeof(int));

则应填入_______。

A)int B)ira* C)(*int) D)(int*) 参考答案:D

考察知识点:强制类型转换

解析:不论p是指向什么类型的指针变量,都可以通过强制类型转换的方法使之类型一致,强制类型转换的格式为(数据类型*)。

(50)若执行下面程序时从键盘上输入5, main() { int x;

scanf(“%d”,&x); if(x++>5)

printf(“%d\\n”,x); else

printf(“%d\\n”,x--); }

则输出是_______。

A)7 B)6 C)5 D)4 参考答案:B

考察知识点:if条件的判断

解析:根据c语言的语法,x++是在使用x之后,再将x的值加1,在if语句中,x的值为5,条件不成立,执行else后面的语句,因为x的值已经加1,为6,所以打印结果为6。

(51)设a、b和c都是int型变量,且a=3、b=4、c=5,则下面的表达式中,值为0的表达式是_______。

A)‘a’&&‘b’ B)a<=b C)a||+c&&b-c D)!((a

考察知识点:几种运算符的使用

解析:选项A:‘a’&&‘b’是字符a与b的相与,故不为0。 选项B:a<=b,由题中变量赋值可知,结果为1。

选项c:a||+c&&b-c,此表达式先做算术运算b-c,结果为-1.而+c属于单目运算符,由于c初值为5,经过单目运算符运算后,还是5,下面再进行逻辑与的运算,即5&&-1结果为1(因为c语言中除O代表假外,其他任一个数都代表真),最后a||1,结果为1。

选项D:!((a

(52)设有如下程序 #include main()

{ int **k,*j,i=100; j=&i; k=&j;

printf(“%d\\n”,**k); }

上述程序的输出结果是_______。

A)运行错误 B)100 C)i的地址 D)j的地址