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

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

第三部分 全国计算机等级考试二级C语言笔试题详解

第5章 选择题详细解析

(1)下面描述中,不符合结构化程序设计风格的是________。

A)使用顺序、选择和重复(循环)三种基本控制结构表示程序的控制逻辑 B)自顶向下

C)注重提高程序的执行效率 D)限制使用goto语句 参考答案:C

考察知识点:结构化程序设计

解析:结构化程序设计方法的四条原则是:1.自顶向下:2.逐步求精;3.模块化;4.限制使用goto语句。“自顶向下”是说,程序设计时,应先考虑总体,后考虑细节,先考虑全局目标,后考虑局部目标;“逐步求精’’是说,对复杂问题,应设计一些子目标作过渡,逐步细节化;“模块化”是说,一个复杂问题肯定是由若干稍简单的问题构成,解决这个复杂问题的程序,也应对应若干稍简单的问题,分解成若干稍小的部分。

(11)C语言规定,程序中各函数之间_______。 A)既允许直接递归调用也允许间接递归调用 B)不允许直接递归调用也不允许间接递归调用 C)允许直接递归调用不允许间接递归调用 D)不允许直接递归调用允许间接递归调用 参考答案:A

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

解析:c语言规定,程序中各函数之间既允许直接递归调用也允许间接递归调用。 (15)下列描述中不正确的是_______。 A)字符型数组中可以存放字符串

B)可以对字符型数组进行整体输入、输出 C)可以对整型数组进行整体输入、输出

D)不能在赋值语句中通过赋值运算符“=”对字符型数组进行整体赋值 参考答案:C

考察知识点:对数组的理解

解析:c语言规定只能逐个引用数组元素而不能一次引用整个数组。字符数组的输入、输出可以将整个字符串一次输入或输出。所以,选项C的说法是不正确的。

(16)以下程序的输出结果是_______。 main()

{ int i,x[3][3]={9,8,7,6,5,4,3,2,1},*p=&x[1][1]; for(i=0;i<4;i+=2)

printf(“%d”,p[i]]; }

A)5 2 B)5 1 C)5 3 D)9 7 参考答案:C

考察知识点:通过指针引用数组元素

解析:题中*p=&x[1][1];是指将数组x的数组元素x[1][1]的地址赋值给指针变量p,使p指向x[1][1]这个数组元素,那么p[0]即为指针变量p当前所指向的数组元素x[1][1]的值。具体执行时如下所示:

i=0时,输出p[0],也就是x[1][1],输出是5;

i=2时,输出p[2],即p[2+0],也就是x[2][0],输出是3。 (17)以下程序的运行结果是_______。 #include “stdio.h” main()

{ int a[]={1,2,3,4,5,6,7,8,9,10,11,12}; int *p=a+5,*q=NULL; *q=*(p+5);

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

A)运行后报错 B)6 6 C)6 12 D)5 5 参考答案:A

考察知识点:通过指针引用数组 解析:题目中没有给q分配存储单元,只是简单地给它赋了一个值,所以程序的运行结果是611 NULL pointer assignment,也就是运行后报错。

(19)能正确表示a和b同时为正或同时为负的逻辑表达式是________。 A)(a>=0||b>=0)&&(a<0||b<0) B)(a>=0&&b>=0)&&(a<0&&b0)&&(a+b<=0) D)a*b>0 参考答案:D

考察知识点:对逻辑表达式的判断

解析:逻辑表达式是指用逻辑运算符将关系表达式或逻辑量连接起来。 选项A中,表达式表示的是a,b为异号;

选项B中,表达式表示的是0,因为没有满足条件的值; 选项C中,表达式表示的是0,因为没有满足条件的值; 选项D表示的是a和b为同号。

(20)若己定义:int a[9],*p=a;并在以后的语句中未改变p的值,不能表示a[1]地址的表达式是________。

A)p+1 B)a+1 C)a++ D)++p 参考答案:C

考察知识点:数组地址的表示

解析:数组名是指针常量,是个固定的指针,不能对数组名赋予一个新的地址值,也不能使这个指针常量“移动”,指向数组的其他元素。

(21)以下程序的输出结果是________。 main()

{ int a=-1,b=1,k;

if((++a<0)&&!(b--<=0))

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

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

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

考察知识点:if条件的判断 解析:逻辑运算符的优先次序如下:!(非)→&&(与)→||(或),但本题需特别注意的是短

路的概念:对于&&运算符,其两边表达式的值只要有一边为假,则整个与运算表达式的值即为假,系统在执行时,先运算&&左边的表达式,若为假,则系统不会再判断&&运算符右边的表达式了,直接运用短路原理得整个与运算表达式的值为0。由于++a是先运算后使用,b--是先使用后运算。所以本题在执行++a后,a值为0,不满足条件,所以a为1,根据短路原理,b仍为0,接下去执行else语句,输出1 0。

(22)以下选项中,能定义s为合法的结构体变量的是________。 A) typedef struct abc

B ) struct

{ double a;

{ double a;

char b[10];

char b[10];

}s;

}s;

C) struct ABC D ) typedef ABC { double a; { double a; char b[10]; char b[10]; } } ABC s; ABC s: 参考答案:B

考察知识点:结构体变量的定义

解析:定义一个结构体类型的变量,可采用三种方法:

①先定义结构体类型,再定义变量名; ②在定义类型的同时定义变量;③直接定义结构类型变量,即不出现结构体名。选项B符合第三种定义方法。

(23)请读程序: #include #include main()

{ char*s1=“AbCdEf”,*s2=“aB”;

s1++;s2++;

printf(“%d\\n”,strcmp(s1,s2)); }

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

A)正数 B)负数 C)零 D)不确定的值 参考答案:A

考察知识点:字符串比较函数strcmp()的应用

解析:strcmp(X1,X2)是串比较函数,当X1>X2时返回值为正数,当X1

本题中“s1”、“s2”分别表示这两个串中第一个字符的地址,s1++和s2++是将指针指向串的第二个字符,则*s1为“bCdEf',*s2为“B”。而在字符串比较中。大小的确定是由各个字符串相应位置字符的ASCⅡ码值的大小决定的。“B”的ASCⅡ码值为66,”b”的ASCⅡ码值为98,所以s1>s2,返回值为正数。

(24)请读程序: #include func(int a,int b) { int c: c=a+b: return C:

} main()

{ int x=6,y=7,z=8,r;

r=func((x--,y++,x+y),z--); printf(“%d\\n”,r); }

上面程序的输出结果是________。

A)11 B)20 C)21 D)31 参考答案:C

考察知识点:自增、自减运算

解析:函数func()的作用是返回两个形参的和,第一个形参是x、y分别自减和自增后的和,其中(x--,y++,x+y)是一个逗号表达式,它的值应该等于x+y,所以整个表达式(x--,y++,x+y)的值为13,而第二个形参的值为8(根据语法规则,应当先使用,后自增),所以fune()的返回值为13+8=21。

(25)请读程序: #include main()

{ int a,b;

for(a=1,b=1;a<=100;a++) { if(b>=20)break;

if(b%3==1){b+=3;continue; } b=5; }

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

上面程序的输出结果是________。

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

考察知识点:break语句和continue语句

解析:break语句的作用是用于跳出循环体,继续执行循环体下面的语句;而continue语句的作用是用于跳出本次循环,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。“%”是求余运算符,执行第一次循环时,条件(b%3==1)为真,b=4,继续下一次循环,如此反复,当b=22时,条件(b>=20)为假,跳出循环,此时共循环8次,即a=8。

(26)请读程序片段(字符串内没有空格字符): printf(“%d\\n”,strlen(“ATS\\n012\\1\\\\”)); 上面程序片段的输出结果是_______。

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

考察知识点:字符串的长度

解析:这个语句的目的是输出“ATS\\n012\\1\\\\”这个串的长度,在串中“\\\\”代表一个“\\”,为了和printf()函数中的转义字符区分开来,在语法上使用了两个反斜杠代替了一个反斜杠,所以它仅仅为一个字符,而”\\1”代表数字1,也占一个字符,“\\n”是回车换行符,也占一个字符,加上A、T、s、0、1、2,一共是9个字符。

联系合同范文客服:xxxxx#qq.com(#替换为@)