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

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

观察程序段可知,对带参数的宏的展开只是将语句中的宏名后面括号内的实参字符串代替#define命令行中的形参。本题中c=f(a)/f(b)用#define f(x)x*x代替得c=f(6)/f(2),即c=6*6/2*2,结果为36。

(102)执行下面的程序段 int x=35;

char z=‘A’: int B;

B=((x&15)&&(z<‘a’)); 后,B的值为________。

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

考察知识点:简单的位运算

解析;本题的考查点是逻辑与及位与运算。

从整个表达式来看是个逻辑表达式,而与运算符“&&”的右边的子表达式中由于z的值为“A”,而A的ASCⅡ码的值小于a的ASCⅡ码值,所以这个子表达式的值为真,即1;在与运算符“&&”的左边的子表达式是个基于位运算的子表达式,将x的值与15做位与运算,表达式值不为零,所以两个子表达式的与值应当为1。

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

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

考察知识点:文件的打开与关闭

解析:本题的考查点是文件结束符的返回值问题。

函数feof是用来判断文件是否已读到末尾,如果已读到末尾则返回非零值,否则返回0。 (104)若有以下定义:int t[3][2];能正确表示t数组元素地址的表达式是________。 A)&t[3][2] B)t[3] C)t[1] D)*t[2] 参考答案:C

考察知识点:指针数组,指向指针的指针

解析:本题的考查点是数组元素地址的表示问题。选项A和B两个表达式都越界了;选项D中,*t[2]是目标变量,即一个整型值,而不是地址值。

(116)有如下程序 main() {

char ch[2][5]={“6937”,”8254”},*p[2]; int i,j,s=0;

for(i=0;i<2;i++)] p[i]=ch[i]; for(i=0;i<2;i++)

for(j=0;p[i][j]>‘\\0’;j+=2) s=1O*s+(p[i][j]-‘0’); printf(“%d\\n”,s); }

该程序的输出结果是______。

A)69825 B)63825 C)6385 D)693825

参考答案:C

考察知识点:指针数组

解析:本题“ch[2][5]={“6937”,”8254”}”用于2行5列的二维数组初始化,ch[0][0]--ch[0][4]的值分别为:6,9,3,7,\\0;ch[1][0]~ch[1][4]的值分别为:8,2,5,4,\\0;第一个for循环用于将数组指针分别指向二维数组的第一行和第二行;第二个for嵌套循环用于取出p[O][0],p[0][2],p[1][O],p[1][2]四个存储单元的数组成一个四位数进行输出。具体执行过程如下:

i=O: j=0:s=O+(p[O][O]-'0');即s=6(“p[O][0]-0”通过ASCⅡ码相减的方法将字符转换成数字)

j=2:s=60+(p[0][2]-’O‘):即s=63 i=1:

j:0:s=630+(p[1][0]-’0’);即s=638 j=2:s=6380+(p[1][2]-’0’);即s=6385

(119)若已定义x和y为double类型,则表达式x=1,y=x+3/2的值是______。 A)1 B)2 C)2.0 D)2.5 参考答案:C

考察知识点:表达式的运算

解析:这是一个逗号表达式,它的值应为表达式y=x+3/2的值,而前一个表达式已给x赋值1,在没有进行类型转换的情况下,3/2的值为1,所以x+3/2的值应为2.0。

(120)若变量a、i已正确定义,且i已正确赋值,合法的语句是______。 A)a==1 B)++i; C)a=a++=5; D)a=int(i); 参考答案:B

考察知识点:基本语句中的表达式语句

解析:选项D显然是错的,而选项A没有分号结束,不是c语句;a++=5违反了赋值表达式左侧必须为一个变量(不能是常量或表达式)的规定。

(121)有如下程序 main()

{ int y=3,x=3,z=1;

printf(“%d%d\\n”,(++x,y++),z+2); }

运行该程序的输出结果是______。

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

考察知识点:基本语句中的输入输出语句

解析:逗号表达式(++x,y++)的值应该是y++的值,由于y++是先引用后自增,所以y++的值是3。

(122)能正确表示逻辑关系:“a≥10或a≤0”的c语言表达式是______。

A)a>=10 0r a<=0 B)a>=0|a<=10 C)a>=10 && a<=0 D)a>=10||a<=10 参考答案:D

考察知识点:C语言表达式

解析:C语言中的“或”关系用“||”表示,其他相关逻辑运算符“与”用“&&”表示;运算符”非”用“!”来表示。

(123)有如下程序

main()

{ int x=1,a=0,b=0: switch(x)

{ case 0:b++; case 1:a++; case 2:a++;b++; }

printf(“a=%d,b=%d\\n”,a,b); }

该程序的输出结果是_______。

A)a=2,b=1 B)a=1,b=1 C)a=1,b=0 D)a=2,b=2 参考答案:A

考察知识点:用switch语句实现多分支选择结构

解析:在这个switch语句中,因为x的值为1,所以执行case 1:后面的a++,这样a=1。但又由于其下没有break语句,所以其后面的语句“a++;b++”也将被执行,这样一来,a=2,b=1。

(125)有如下程序 main()

{ int i,sum;

for(i=1;i<=3;sum++) sum+=i;

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

该程序的执行结果是_______。

A)6 B)3 C)死循环 D)0 参考答案:C

考察知识点:for循环结构

解析:在循环过程中,i的值一直没有被改变,所以这是一个死循环。 (126)有如下程序 main() { int x=3; do

{ printf(“%d”,x--); }while(!x); }

该程序的执行结果是_______。

A)321 B)3 C)不输出任何内容 D)陷入死循环 参考答案:B

考察知识点:do-while循环结构

解析:本题x赋初值为3,当执行print(“%d”,x--);时,由于x--的作用是先运算x,再将x的值减1,所以,printf输出的x值为3,等输出后,x的值减1变为2,继续执行,判断条件!x为假,循环只被执行一次。

(129)有如下程序

int func(int a,int b)

{ return(a+b); } main()

{ int x=2,y=5,z=8,r; r=func(func(x,y),z); printf(“%d\\n”,r); }

该程序的输出结果是________。

A)12 B)13 C)14 D)15 参考答案:D

考察知识点:函数参数的传递

解析:调用函数func(x,y),返回x+y,即7:再调用函数func(7,z),返回7+z,即15。 (130)有如下程序段 int *p,a=10,b--1: p=&a;a=*p+b;

执行该程序段后,a的值为________。

A)12 B)11 C)10 D)编译出错 参考答案:B

考察知识点:指针变量的概念

解析:执行p=&a;后,p指向整数a,*p即p的目标变量,也就是a;所以a=*p+b等价于a=a+b,可知a的值最终为11。

(131)有如下程序 long fib(int n) { if(n>2)

return (fib(n-1)+fib(n-2)); else return(2); }

main()

{ printf(“%ld\\n”,fib(3));} 该程序的输出结果是________。

A)2 B)4 C)6 D)8 参考答案:B

考察知识点:函数的递归调用

解析:函数fib内部有两个递归调用,当n=3时,fib(n-1)返回2,fib(n-2)也返回2,所以fib(n-1)+fib(n-2)的值为4。

(132)在c语言中,函数中变量的隐含存储类别是________。

A)auto B)static C)extern D)无存储类别 参考答案:A

考察知识点:函数中变量的存储类别

解析:函数中变量的存储类别包括auto,static,extem,其中auto为隐含存储类别,static为静态存储类别,register是寄存器存储类别。

(133)有如下程序 #define N 2 #define M N+i #define NUM 2*M+1