二级C语言笔试-113
(总分:100.00,做题时间:90分钟)
一、选择题(总题数:40,分数:70.00)
1.函数fun的返回值是
fun(char *a, char *b)
int num=0,n=0;
while(*(a+num)!='/0')num++;
while(b[n])*(a+num)=b[n];num++;n++;
return num;



(分数:2.00)
 A.字符串a的长度
 B.字符串b的长度
 C.字符串a和b的长度之差
 D.字符串a和b的长度之和 
解析:[解析] 本题首先通过第一个while循环计算字符串a的长度,再通过第二个循环将字符串b连接到字符a的后面,最后返回连接后的总长度。
2.调用gets和puts函数时,必须包含的头文件是


(分数:2.00)
 A.stdio.h 
 B.stdlib.h
 C.define
 D.string.h
解析:[解析] gets函数和puts函数是库函数,必须包含的头文件是stdio.h。
3.下列叙述中正确的是


(分数:2.00)
 A.线性链表是线性表的链式存储结构 
 B.栈与队列是非线性结构
 C.双向链表是非线性结构
 D.只有根结点的二叉树是线性结构
解析:[解析] 一个非空的数据结构如果满足下列两个条件:①有且只有一个根结点;②每一个结点最多有一个前件,也最多有一个后件,则称为线性结构。线性链表是线性表的链式存
储结构,故选项A的说法是正确的。栈与队列是特殊的线性表,它们也是线性结构,故选项B的说法是错误的;双向链表是线性表的链式存储结构,其对应的逻辑结构也是线性结构,而不是非线性结构,故选项C的说法是错误的;二叉树是非线性结构,而不是线性结构,故选项D的说法是错误的。
4.在E-R图中,用来表示实体的图形是


(分数:2.00)
 A.矩形 
 B.椭圆形
 C.菱形
 D.三角形
解析:[解析] 在E-R图中,用3种图框分别表示实体、属性和实体之间的联系,其规定如下:用矩形框表示实体,框内标明实体名;用椭圆状框表示实体的属性,框内标明属性名:用菱形框表示实体间的联系,框内标明联系名。
5.下面4个选项中,均是不合法的用户标识符的选项是


(分数:2.00)
 A.A P _0 d0
 B.float la0 _A
 C.b-a goto in 
 D.123 temp int
解析:[解析] C语言规定的标识符只能由字母、数字和下画线3种字符组成,第一个字符必须
为字母或下画线,并且不能使用C语言中的关键字作为标识符;对于选项C,goto和int是关键字,b-a中的“-”不是组成标识符的3种字符之一;对于选项D,int是关键字。所以,均是不合法用户标识符的选项是C。
6.两个或两个以上模块之间关联的紧密程度称为


(分数:2.00)
 A.耦合度 
 B.内聚度
 C.复杂度
 D.数据传输特性
解析:[解析] 本题考核模块独立性的评价。评价模块独立性的主要标准有两个:一是模块之
间的耦合度,它表明两个模块之间互相独立的程度,也可以说是两个或两个以上模块之间关联的紧密程度,所以,本题的正确答案为选项A;二是模块内部之间的关系是否紧密,称为内聚。一般来说,要求模块之间的耦合尽可能地弱,即模块尽可能独立;而要求模块的内聚程度尽量地高。
7.以下程序运行后的输出结果是
fun(int x,int y,int z) z=x*y;
main( )
int a=4,b=2,c=6;
float型fun(a,b,c);
printf("%d",c);



(分数:2.00)
 A.16
 B.6 
 C.8
 D.12
解析:[解析] 本题考查的函数形参与实参的传递规则,当形参与实参都是简单的数据类型时,形参值的改变不能影响实参值的改变,即本题中c的值未改变,仍然是6。
8.若有以下结构体,则正确的定义或引用是
struct Test
int x;
int y:
v1;


(分数:2.00)
 A.Test.x=10;
 B.Test v2;v2.x=10;
 C.struct v2;v2.x=10;
 D.struct Test v2=10; 
解析:[解析] 此题考查结构体的定义和引用。选项A的错误是通过结构体名引用结构体成员,选项B的错误是将结构体名作为类型名使用,选项c的错误是将关键字struct作为类型名使用。选项D,定义变量v2并对其初始化的语句,初始值只有前一部分,这是允许的。
9.以下程序运行后的输出结果是
main( )
int a=2,b=-1,c=2;
if(a<b)
if(b<0) c=0;
else c++:
printf("%d/n",c);



(分数:2.00)
 A.0
 B.1
 C.2 
 D.3
解析:[解析] if语句嵌套使用时,else总是与它上面最近的if配对。因此,本题中先判断(a<b),表达式值为0,则不执行下面的if语句,直接跳到printf行,e的值没有改变。
10.能正确表示逻辑关系“a≥10或a≤0”的C语言表达式是



(分数:2.00)
 A.a>=10 or a<=0
 B.a>=0 | a<=10
 C.a>=10&&a<=0
 D.a>=10 ‖ a<=0 
解析:[解析] 本题考查C语言的逻辑表达式及逻辑或(“||”)运算符的用法。“||”表示或的意思,“|”是按位或的意思,“&&”是并且的意思,C语言中没有“or”。
11.下列叙述中正确的是


(分数:1.00)
 A.软件测试应该由程序开发者来完成
 B.程序经调试后一般不需要再测试
 C.软件维护只包括对程序代码的维护
 D.以上3种说法都不对 
解析:[解析] 本题考核软件测试、软件调试和软件维护的概念。软件测试的目标是在精心控制的环境下执行程序,以发现程序中的错误,给出程序可靠性的鉴定。软件测试具有挑剔性,测试不是为了证明程序是正确的,而是在设想程序有错误的前提下进行的,其目的是设法暴露程序中的错误和缺陷,也就是说,测试是程序执行的过程,目的在于发现错误;一个好的测试在于能发现至今未发现的错误;一个成功的测试是发现了至今未发现的错误。由于测试的这一特征,一般应当避免由开发者测试自己的程序。所以,选项A的说法错误。
调试也称排错,目的是发现错误的位置,并改正错误,经测试发现错误后,可以立即进行调试并改正错误;经过调试后的程序还需进行回归测试,以检查调试的效果,同时也可防止在调试过程中引进新的错误。所以,选项B的说法错误。
软件维护通常有4类:为纠正使用中出现的错误而进行的改正性维护:为适应环境变化而进行的适应性维护;为改进原有软件而进行的完善性维护;为将来的可维护和可靠而进行的预防性维护。软件维护不仅包括程序代码的维护,还包括文档的维护。文档可以分为用户文档和系统文档两类。但无论是哪类文档,都必须与程序代码同时维护。只有与程序代码完全一致的文档才有意义和价值。所以,选项C的说法错误。
12.若有说明:int a[][3]=1,2,3,4,5,6,7;,则a数组第一维的大小是


(分数:1.00)
 A.2
 B.3 
 C.4
 D.无确定值
解析:[解析] 本题考查二维数组的定义方式。第一维的大小由以下方法判断:①当初值的个数能被第二维的常量表达式的值除尽时,所得商数就是第一维的大小;②当初值的个数不能被第二维的常量表达式的值除尽时,则第一维的大小=所得的商数+1。
13.下面程序段的运行结果是
char str[]="ABC",*p=str;
printf("%d/n",*(p+3));


(分数:1.00)
 A.67
 B.0 
 C.字符'C'的地址
 D.字符'C'
解析:[解析] 考查指向字符串的指针变量。在该题中,指针变量p指向的应该是该字符串中的首地址,p+3指向的是字符串结束标志'/0'的地址,因而*(p+3)的值为0。
14.下面程序段的运行结果是
char a[]="lanuage",*p;
p=a;
while(*p!='u')printf("%c",*p-32);p++;


(分数:1.00)
 A.LANGUAGE
 B.language
 C.LAN 
 D.langUAGE
解析:[解析] 本段程序的作用是输出字符串“lanuage”中字母u之前的字符,并将其转化为大写字母。
15.已知函数的调用形式:fread(buf,size,count,fp),参数buf的含义是


(分数:1.00)
 A.一个整型变量,代表要读入的数据项总数
 B.一个文件指针,指向要读的文件
 C.一个指针,指向要读入数据的存放地址 
 D.一个存储区,存放要读的数据项
解析:[解析] buf是一个指针。对fread来说,它是读入数据的存放地址(指起始地址);对fwrite来说,是要输出数据的地址。
16.设变量a是int型,f是floaf型,i是double型,则表达式10+'a'+i*f值的数据类型为


(分数:1.00)
 A.int
 B.float
 C.double 
 D.不确定
解析:[解析] 根据混合运算规则,如果有一个数据是float型或double型,则其他数据类型先转化为double型,运算的结果最终也是double型。
17.在深度为7的满二叉树中,叶子结点的个数为



(分数:1.00)
 A.32
 B.31
 C.64 
 D.63
解析:[解析] 在二叉树的第k层上,最多有2k-1(k≥1)个结点。对于满二叉树来说,每一层上的结点数都达到最大值,即在满二叉树的第k层上有2k-1个结点。因此,在深度为7的满二叉树中,所有叶子结点在第7层上,即其结点数为2k-1=27-1=64。
18.以下程序运行后的输出结果是
main( )
int x=23;
do
printf("%d",x--);while(!x);



(分数:1.00)
 A.321
 B.·23 
 C.不输出任何内容
 D.陷入死循环
解析:[解析] do-while语句的执行过程是:先执行一次循环体语句,本题中执行x--后判断表达式,表达式的值!x为假,程序结束循环。
19.若变量a是int类型,并执行了语句:a='A'+1.6;,则正确的叙述是


(分数:1.00)
 A.a的值是字符C
 B.a的值是浮点型
 C.不允许字符型和浮点型相加
 D.a的值是字符'A'的ASCII值加上1 
解析:[解析] 字符'A'要转换成相应的ASCII码值,由于运算结果要赋值给int型变量,所以对1.6进行取整运算,最后a的值应是66。
20.下面程序段的运行结果是
char *p="abedefgh":
p+=3;
printf("070 d/n",strlen(strcpy(P,"ABCD")));


(分数:1.00)
 A.8
 B.12
 C.4 
 D.7
解析:[解析] p+=3使指针p指向字符'd',strcpy函数的功能是把后面的字符串复制到p指针指向的空间。strlen函数的功能是求字符串的长度,并返回字符个数,不计最后的'/0',结果为4,即字符串“ABCD”的长度。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。