考试演练题目答案(包括解释)
二级C语言程序设计答案及详解
一、选择题
(11)B) 【解析】每一个C 语言的文件或函数都可以单独编译,但只有main 函数的才可以执行。
(12)A) 【解析】预定义标识符是C语言中的标识符,在C语言中也有特定的含义,如函数printf、
scanf、sin 等和编译预处理命令名(如define 和include)。预定义标识符可以作为用户标识符使用,只是这样会
失去系统规定的原义。
(13)B) 【解析】0xab 是十六进制表示的常量。
(14)A) 【解析】C语言用函数实现软件的模块化设计。
(15)C) 【解析】C语言中,常常用一个标识符来代表一个常量,称为符号常量。符号常量在使用之
前要先定义,定义格式如下:
#define(常量)
其中,可以是数字常量,也可以是字符
(16)f)Tj/F5 1C) 【解析】题目中用scanf 函数以整数的形式输入a,b 的值。选项C)整型数字3 后面有一个
空格,当输入空格时,scanf 函数输入就会终止。
(17)C) 【解析】C语言中char 类型数据占字节数为1.
(18)B) 【解析】由于3!=4 的结果为1,而1>2 的结果为假。
(19)D) 【解析】使用switch 语句直接处理多个分支,其一般形式为:
switch(表达式)
{
case 常量表达式1:
语句1;
break;
case 常量表达式2:
语句2;
break;
„„
case 常量表达式n:
语句n;
break;
default:
语句n+1;
break;
}
switch 语句的执行流程是:首先计算switch 后面圆括号中表达式的值,然后用此值依次与各个case 的常量表
达式比较,若圆括号中表达式的值与某个case 后面的常量表达式的值相等,就执行此case 后面的语句,执行后
遇break 语句就退出switch 语句;若圆括号中表达式的值与所有case 后面的常量表达式都不等,则执行default
后面的语句n+1,然后退出switch 语句。
(20)D) 【解析】由于a 的初始值等于-2,所以while 循环语言执行两次结束,此时变量a 的值等于
1,变量b 的等于2。
(21)C) 【解析】定义指针变量时,必须将指针变量初始化为NULL(为空),否则,如果不赋给它
地址,系统会随机给它分配一个地址。
(22)D) 【解析】两个连续的双引号:"",是一个字符串常量,称为“空串”。
(23)D) 【解析】由于a 的值为'H',符合(a>='A'&&a
'h'。
(24)B) 【解析】在函数main()中,第一次执行for 循环时,b 的值等于1,此时输出字母B;第二次
执行for 循环时,b 的值等于3,此时输出字母D;第三次执行for 循环时,b 的值等于8,此时输出字母I。
(25)D) 【解析】x[0]可看作是由3 个整型元素组成的一维数组,不可以用语句x[0]=0,为数组所有
元素赋初值0。
(26)C) 【解析】给指针变量p 赋NULL 值,NULL 是在stdio.h 头文件中定义的预定义符,其代码
值为0,当执行p=NULL;语句后,称p 为空指针。因为NULL 的代码值为0,所以p=NULL;语句等价于p='\0';或
p=0;。
(27)A) 【解析】因为指针变量p 的初始值指向数组a,所以执行for 循环语句后,数组a 中的元素
的值不变。
(28)B) 【解析】函数fun()的作用是求出二维数组a[][N]中每一行中的最大元素,所以在main()函数
中执行完fun(x,y)后,数组y 中的元素为二维数组x[N][N]每一行的最大元素。
(29)C) 【解析】程序执行后strcpy(a+1,b+2)后,字符数组a 的值为“a2”,再进行字符串的连接
strcat(a,c+1),此时字符数组a 的值为“a2yz”。
(30)A) 【解析】选项A)是定义了字符数组str3[],并对其赋初值。
(31)C) 【解析】这个程序的执行过程如下:当k=0 时,s[1]=2!= '\0',k++=1,a=0+(s[1]- '\0')=2;当
k=1 时,s[2]=1!= '\0',k++=2,a=2+(s[2]- '\0'+1)=2+(1+1)=4;当k=2 时,s[3]=3!= '\0',k++=3,a=4+(s[3]- '\0')=4+3=7;
2012 年9 月笔试真卷及答案详解 第11 页(共12页)
当k=3 时,s[4]=4!= '\0',k++=4,a=7+(s[4]- '\0'+1)=7+(4+1)=12;当k=4 时,s[5]= '\0'结束循环,输出变量k 和
a 值。
(32)A) 【解析】这个程序的执行过程是当i=0 时,j=1,a[0][0]=o
i=1 时,
j=2,a[1][0]=t =a[2][0]=t;不置换;当i=2 时,j=3,a[2][0]=t>a[3][0]=f;置换a[2][0]=f, a[3][0]=t;此时,a[2][0]=f,a[1][0]=t,
再置换a[2][0]=t,a[1][0]=f,;当i=3时,j=4,a[3][0]=f=a43][0]=f;不置换;所以a[1]的结果为fwo。
(33)B) 【解析】函数fun1()的作用是输出局部变量a 和b 的值,在主函数中执行fun1(5,6)的结果是
输出5,6;函数fun2()的作用是给变量a 和b 分别赋值3,4;执行fun2()的作用是输出3,4。
(34)A) 【解析】在函数func(int n)中定义了局部静态变量num,,其初始值等于1,所以在主函数中
执行func(3),输出4,此时静态变量num的值等于4,当退出函数func(3)时,其值不会丢失,所以当在执行func(4)
时,输出8。
(35)C) 【解析】执行fun(&a,&b,q);语句时,在内存中开辟了一块内存空间,存放变量a 与b 的和,
并用指针变量q 引用它,但是当这条语句执行结束,这块内存空间又释放了,指针这量q 仍然引用的是变量a
的地址,所以输出结果为1。
(36)D) 【解析】在主函数中,定义了结构体STU数组c[2],并对其赋初始值。执行f(c)时,在函数
f()中,把结构体变量b 的值赋给了c[1]。
(37)B) 【解析】typedef 语句的作用仅仅是用“标识符”来代表已存在的“类型名”,并未产生新的
数据类型,原来类型名依然有效。为了便于识别,一般习惯将新的类型名用大写字母表示。
(38)A) 【解析】函数的返回值类型可以是结构体类型。
(39)B) 【解析】变量b 的值等于2,其向左移动2 位,其值等于8,即b
8。而3||b 做
或运算的结果等于1。所以表达式(b
(40)D) 【解析】在程序中定义了一个整型数组a[6],并对它赋初值,并以写入的方式打开了文件
d2.dat。然后利用一个for 循环把数组a 中的元素数据写入文件d2.dat 中,调用函数rewind 把将文件内部的位置
指针重新指向一个文件的开头,再利用for 循环语句把文件中的数据依次写入到倒序排列的数组a 中,最后输出
数组a 中的数组元素。
二、填空题
(6)【6】(ab)
2012 年9 月笔试真卷及答案详解 第12 页(共12页)
【解析】表达式!(ab)。
(7)【7】%lf%f
【解析】对于变量a 和b 的输入采用实数的形式,所以scanf 函数的输入格式符为 %lf%f。
(8)【8】224
【解析】当从键盘上输入01234567!时,根据程序中switch()语句,当输入的字符为'1'、'3'时,变量n1++;
所以n1 的值等于2;当输入的字符为'2'、'4'时,变量n2++;所以n2的值等于2;当输入的字符为其他字符时,
变量n3++;所以n3 的值等于4。所以答案为224。
(9)【9】16
【解析】程序的功能是求1、3、5、7 之和,等于16。
(10)【10】4321
【解析】在程序的while 循环中,每次求出n 的个位上的数字,然后n 的值减小10 位,所以输出结果为4321。
(11)【11】7
【解析】函数*st()的作用是返回*a 与*c 中较大数的指针,所以在主函数中,执行st(p)时,返回变量k 的指
针,因而输出结果为7。
(12)【12】22
【解析】根据C语言中对带参数的宏的定义,2*(N+M)2))=2*(3+(3+1)*2)=22。
(13)【13】2
【解析】在C语言中在每个字符串的最后都增加一个字符串结束标识字符'\0',所以本题中的字符串在内存
中占有2 个字节。
(14)【14】6
【解析】根据函数的迭代,f(3)=3*f(2)=3*2*f(1)=3*2*1*f(1)=3*2*1*1=6。
(15)【15】 p->next
【解析】在while 循环中输出循环链表的每个结点,p->next 指向当前结点的下一个结点。