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

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

main() { int i;

for(i=1;i<=NUM;i++) printf(“%d\\n”,i); }

该程序中的for循环执行的次数是________。 A)5 B)6 C)7 D)8 参考答案:B

考察知识点:宏定义的应用

解析:在c语言中,宏定义在编译时将被直接替换.所以NUM最后会被替换成2*N+1+1,即2*2+1+1,值为6。因此,for循环执行的次数为6。

(134)有以下函数 char *fun(char*p) {return p; }

该函数的返回值是________。

A)无确切的值 B)形参p中存放的地址值 C)一个临时存储单元的地址 D)形参p自身的地址值 参考答案:B

考察知识点:返回指针值的指针函数

解析:p本身就是一个字符型指针变量,返回p也就是返回变量p中存放的地址值。 (135)有如下程序段 int a=14,b=15,x; char c=‘A’;

x=(a&&b)&&(c<‘B’);

执行该程序段后,x的值为_______。

A)true B)false C)0 D)1 参考答案:D

考察知识点:逻辑表达式的运算 解析: a&&b的值为true,c<‘B’的值也为true,所以(a&&b)&&(c<‘B’)的值为true。但x是int型变量,所以(a&&b)&&(c<‘B’)的值最后要从bool型转换为int型赋给x。这样x的值应为1。

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

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

考察知识点:库函数的返回值

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

(137)有如下说明

int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 则数值为9的表达式是_______。

A)*p+9 B)*(p+8) C)*p+=9 D)p+8 参考答案:B

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

解析:p是指针,p+8是地址值,D是错的;*p是p的目标变量,即a[0],值为1,所以*p+9的值是10,而*p+=9的值是重新给a[0]赋了值(1+9),所以A和C也是错的。p+8是地址值,指向a[8],那么。(p+8)的值就是a[8]的值,即9。

(138)若有以下定义:int t[3][2],能正确表示t数组元素地址的表达式是_______。 A)&t[3][2] B)t[3] C)t[1] D)*t[2] 参考答案:C

考察知识点:数组的概念

解析:A和B两个表达式都已越界了;*t[2]是目标变量,即一个整数,而不是地址值。 (139)有如下程序 main()

{ int a[3][3]={{1,2},{3,4},{5,6}},i,j,s=0; for(i=1;i<3;i++) for(j=O;j<=i;j++) s+=a[i][j]; printf(“%d\\n”,s); }

该程序的输出结果是_______。

A)18 B)19 C)20 D)21 参考答案:A

考察知识点:循环的嵌套使用

解析:题中的外循环只执行了2次:

笫1次:a[1][0]=3,a[1][1]=4,所以s=7;

第2次:a[2][0]=5,a[2][1]=6,a[2][2]=0,所以s=7+5+6+0=18。 (140)若已建立如下图所示的单向链表结构: 在该链表结构中,指针p、s分别指向图中所示结点,则不能将s所指的结点插入 到链表末尾仍构成单向链表的语句组是_______。

A)p=p->next;s->next=p;p->next=s;

B)p=p->next;s->next=p->next;p->next=s; C)s->next=NULL;p=p->next;p->next=s;

D)p=(*p).next;(*s).next=(*p).next;(*p).next=s; 参考答案:A

考察知识点:单向链表的建立

解析:在答案A中:p=p->next;s->next=p;p->next=s;s的确已插到了链表的末尾,但它的next却并没有为NULL,而是指向了它的直接前趋p,这样它就小是一个单向链表(单向链表最后一个结点的next指针一定是一个NULL)。

(153)若a为int类型,且其值为3,则执行完表达式a+=a--=a*a后,a的值是______。 A)-3 B)9 C)-12 D)6 参考答案:C

考察知识点:运算符的优先级

解析:c语言中对赋值运算的运算顺序是自右向左。本题中,计算a*a之后,a的值依然为3,表达式a*a的值为9;a-=9.a=3-9=-6;a+=-6.a=-6+-6=-12.

(154)设x、y、t均为int型变量,则执行语句:x=y=3;t=++x‖++y;后,y的值为______。 A)不定值 B)4 C)3 D)1 参考答案:C

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

解析:C语言中在做逻辑或运算时,自左向右判断各个参加或运算的表达式,一旦运算到某式的值为非零时,表明整个表达式一定为真,余下的语句则不再进行运算。本题中,++x的值为真,则++y并没有进行运算,所以v值不变。

(155)若执行以下程序时从键盘上输入9,则输出结果是______。 main() {

int n;

scanf(“%d:”,&n);

if(n++<10)printf(“%d\\a”,n); else printf(“%d\\n”,n--); }

A)11 B)10 C)9 D)8 参考答案:B

考察知识点:复合语句和if语句

解析:n++是在语句结束后再加1,因此,if语句中相当于判断的是9<10,当然是执行if语句后面的printf语句,而这时,因为if语句被执行。n的值也被加1,所以在打印时,n值为10,而n--是存printf语句执行完毕后再减1的。

(156)有以下程序段 int k=O;

while(k=1)k++;

while循环执行的次数是______。

A)无限次 B)有语法错,不能执行 C)一次也不执行 D)执行1次 参考答案:A

考察知识点:while循环语句

解析:乍一看,还以为程序要表达的意思是当k等于1的时候做k++,但是c语言里关系表达式的等于应该是“==”。一个等于号表示赋值,即这里面重复地把1赋给k,自然表达式k=1的值总为1,while后面的表达式恒为真,当然会进入死循环。

(157)以下程序执行后sum的值是______。 main() {

int i,sum;

for(i=1;i<6;i++)sum+=i; printf(“%d\\n”,sum); }

A)15 B)14 C)不确定 D)0 参考答案:C

考察知识点:for循环语句

解析:变量sum在使用时未赋初值,所以无法确定sum最终的值。 (158)有以下程序段 int x=3; do

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

其输出结果是_______。

A)1 B)3 0 C)1 -2 D)死循环 参考答案:C

考察知识点:do-while循环语句

解析:本题中循环执行了两次,第一次,执行完printf语句后,x=1,而--x是先自减后执行语句的,所以(!(--x))的值为非零,所以又执行了一次。第二次x的值为-2,--x的值为-3,求非后,值为0,跳出循环。

(159)若变量c为char类型,能正确判断出c为小写字母的表达式是_______。 A)‘a’<=c<=‘z’ B)(c>=‘a')||(c<=‘z’) C)(‘a’<=c)and(‘z’>=c) D)(c>=‘a’)&&(C<=‘z’) 参考答案:D

考察知识点:变量的灵活应用

解析:(c>=‘a’)和(c<=‘z’)的关系应该是“与”的关系。 (161)以下程序的输出结果是_______。 fun(int x,int y,int z) (Z=x*x+y*y;) main()

{ int a=31: fun(5,2,a);

printf(“%d”,a); }

A)0 B)29 C)31 D)无定值 参考答案:C

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

解析:本题中,a的值并没有改变,因为传递到函数中的是变量值。 (162)下列程序段的输出结果是_______。 void fun(int *x,int *y)

{printf(“%d%d”,*x,*y);*x=3;*y=4;} main()

{ int x=1,y=2; fun(&y,&x);

printf(“%d%d”,x,y); }

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

考察知识点:函数的参数传递 解析:本题中函数传递的是变量的地址,如果形参在函数中发生改变,相对应的实参也就有了改变。

(163)下列程序的输出结果是_______。 main()

{ char a[10]={9,8,7,6,5,4,3,2,1,0},*p=a+5; printf(“%d”,*--p); }

A)非法 B)a[4]的地址 C)5 D)3