1、二级 C语言笔试-242 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:70.00)1.对如图所示的二叉树进行前序遍历的结果为(分数:2.00)A.B.C.D.2.以下程序运行后的输出结果是#includestdio.hmain( )FILE *fp;int i=20,j=30,k,n;fp=fopen(“d1.dat“,“w“);fprintf(fp,“%d/n“,i);fprintf(fp,“%d/n“,j);fclose(fp);fp=fopen(“d1.dat“,“r“);fscanf(fp,“%d%d“, printf(“%d/n“,+(p-x
2、);(分数:2.00)A.10B.11C.51D.6011.下列叙述中正确的是(分数:1.00)A.算法的效率只与问题的规模有关,而与数据的存储结构无关B.算法的时间复杂度是指执行算法所需要的计算工作量C.数据的逻辑结构与存储结构是一一对应的D.算法的时间复杂度与空间复杂度一定相关12.下列程序运行后的输出结果是main( )char arr24;strepy(arr,“you“);strepy(arr1,“me“);arr03= default:v0+=1;v2+=1;while(c!=/n);printf(“v0=%d,v1=%d,v2=%d/n“,v0,v1,v2);(分数:1.00)A
3、.v0=7,v1=4,v2=7B.v0=8,v1=4,v2=8C.v0=11,v1=4,v2=11D.v0=13,v1=4,v2=1216.若有下面的说明和定义,则 sizeof(struet test)的值是struct testint m1;char m2;float m3;union uuchar u15;int u22; ua;myaa;(分数:1.00)A.12B.16C.14D.917.若在某函数内部有定义:int a34;,则数组 a中各元素(分数:1.00)A.可在程序的运行阶段得到初值 0B.可在程序的编译阶段得到初值 0C.不能得到确定的初值D.可在程序的编译或运行阶段得到
4、初值 018.下列叙述中正确的是(分数:1.00)A.构成 c程序的基本单位是函数B.可以在一个函数中定义另一个函数C.main( )函数必须放在其他函数之前D.所有被调用函数一定要在调用之前进行定义19.下列叙述中正确的是(分数:1.00)A.C语言编译时不检查语法B.C语言的子程序有过程和函数两种C.C语言的函数可以嵌套定义D.C语言的函数可以嵌套调用20.以下函数返回 a所指数组中最大值所在的下标值,在下画线处应填入的内容是fun(int *a,int n)int i,j=0,p;p=j;for(i=j;in;i+)if(aiap)_;return(p);(分数:1.00)A.i=pB.
5、ap=aiC.p=jD.p=i21.在结构化程序设计中,模块划分的原则是(分数:2.00)A.各模块应包括尽量多的功能B.各模块的规模应尽量大C.各模块之间的联系应尽量紧密D.模块内具有高内聚度,模块间具有低耦合度22.以下程序运行后的输出结果是main( )float x=2.0,y;if(x0.0) y=0.0;else if(x10.0) y=1.0/x:else y=1.0;printf(“%f/n“,y);(分数:2.00)A.0.000000B.0.250000C.0.500000D.1.00000023.下面说明不正确的是(分数:2.00)A.char a10=“china“;B
6、.char a10,*p=a;p=“china“C.char *a;a=“china“;D.char a10,*p;p=a=“china“24.在 C语言中,退格符是(分数:2.00)A./nB./tC./fD./h25.以下程序运行后的输出结果是main( )char s=“ABCD“,*p;for(p=s+1;ps+4;p+)printf(“%s/n“,p);(分数:2.00)A.ABCDBCDCDDB.ABCDC.BCDD.BCDCDD26.在下列关系运算中,不改变关系表中的属性个数但能减少元组个数的是(分数:2.00)A.并B.交C.投影D.笛卡儿积27.下列叙述中正确的是(分数:2.
7、00)A.定义函数时,形参的类型说明可以放在函数体内B.return后边的值不能为表达式C.如果函数值的类型与返回值类型不一致,以函数值类型为准D.如果形参与实参类型不一致,以实参类型为准28.以下 4个选项中,不能看作一条语句的是(分数:2.00)A.;B.a=5,b=2.5,c=3.6;C.if(a5);D.if(b!=5)x=2;y=6;29.下列对队列的叙述中,正确的是(分数:2.00)A.队列属于非线性表B.队列按“先进后出”原则组织数据C.队列在队尾删除数据D.队列按“先进先出”原则组织数据30.设有以下程序段,则int x=0,s=0;while(!x!=0)s+=+x;prin
8、tf(“%d“,s);(分数:2.00)A.运行程序段后输出 0B.运行程序段后输出 1C.程序段中的控制表达式是非法的D.程序段执行无限次31.对以下程序段的描述中,正确的是x=-1:dox=x*x;while(!x);(分数:2.00)A.是死循环B.循环执行两次C.循环执行一次D.有语法错误32.在 C语言中,变量的隐含存储类别是(分数:2.00)A.autoB.staticC.externD.无存储类别33.下列叙述中错误的是(分数:2.00)A.在数据库系统中,数据的物理结构必须与逻辑结构一致B.数据库技术的根本目标是要解决数据的共享问题C.数据库设计是指在已有数据库管理系统的基础上
9、建立数据库D.数据库系统需要操作系统的支持34.某二叉树中有 n个度为 2的结点,则该二叉树中的叶子结点数为(分数:2.00)A.n+1B.n-1C.2nD.n/235.下列程序运行后的输出结果是void fune1(int i);void fune2(int i);char st=“hello,friend!“;void fune1(int i)printf(“%e“,sti);if(i3)i+=2;fune2(i);void func2(int i)printf(“%c“,sti);if(i3) i+=2;fune1(i);main( )int i=0;fund(i);printf(“/n
10、“);(分数:2.00)A.helloB.helC.hloD.hlm36.在以下程序中,判断 ij 共执行的次数是main( )int i=0, j=10,k=2,s=0;for(;)i+=k:if(ij)printf(“%d“,s);break;s+=i:(分数:2.00)A.4B.7C.5D.637.以下程序段执行后,X 的值为int a=14,b=15,x;char c=A:x=(a amin=x:while( (7) )if(xamax) amax=X;elseif (8) amin=X;else scanf(“%f“, printf(“%d/n“,+(p-x);(分数:2.00)A.
11、10B.11C.51 D.60解析:解析 由于数组名保存了数组的首地址,即数组中第一个元素的地址,执行 p=aa;后,p 指向aa0,p-x 相当于 aa0.x,也就是 50,经过自增运算后,显示结果为 51。11.下列叙述中正确的是(分数:1.00)A.算法的效率只与问题的规模有关,而与数据的存储结构无关B.算法的时间复杂度是指执行算法所需要的计算工作量 C.数据的逻辑结构与存储结构是一一对应的D.算法的时间复杂度与空间复杂度一定相关解析:解析 根据时间复杂度和空间复杂度的定义可知,算法的时间复杂度与空间复杂度并不相关。数据的逻辑结构就是数据元素之间的逻辑关系,它是从逻辑上描述数据元素之间的
12、关系的,是独立于计算机的;数据的存储结构研究数据元素和数据元素之间的关系如何在计算机中表示,它们并非一一对应的关系。算法的执行效率不仅与问题的规模有关,还与数据的存储结构有关。12.下列程序运行后的输出结果是main( )char arr24;strepy(arr,“you“);strepy(arr1,“me“);arr03= default:v0+=1;v2+=1;while(c!=/n);printf(“v0=%d,v1=%d,v2=%d/n“,v0,v1,v2);(分数:1.00)A.v0=7,v1=4,v2=7B.v0=8,v1=4,v2=8C.v0=11,v1=4,v2=11D.v0
13、=13,v1=4,v2=12 解析:解析 由于只有 4个元音字符,所以 v1=4,v0 和 v2在循环 11次中都要加 1,共循环 12次,由于 v0的初值为 1,所以 v0=13,v2=12。16.若有下面的说明和定义,则 sizeof(struet test)的值是struct testint m1;char m2;float m3;union uuchar u15;int u22; ua;myaa;(分数:1.00)A.12 B.16C.14D.9解析:解析 结构体变量所占内存长度是各成员所占内存长度之和,而共用体变量所占内存长度等于最长成员的长度。本题中,struct test 结构体
14、类型共有 4个成员,其中 int型变量占用 2个字节,char 型变量占用 1个字节,float 型变量占用 4个字节,共用体变量占用 5个字节,共用 2+1+4+5=12个字节。17.若在某函数内部有定义:int a34;,则数组 a中各元素(分数:1.00)A.可在程序的运行阶段得到初值 0B.可在程序的编译阶段得到初值 0C.不能得到确定的初值 D.可在程序的编译或运行阶段得到初值 0解析:解析 在函数内部定义的、存储类型为 auto的变量或数组,如果没有进行初始化,就不能得到确定值。18.下列叙述中正确的是(分数:1.00)A.构成 c程序的基本单位是函数 B.可以在一个函数中定义另一
15、个函数C.main( )函数必须放在其他函数之前D.所有被调用函数一定要在调用之前进行定义解析:解析 C 程序是由函数构成的,选项 A正确;main 函数可以放在其他函数之前,也可以放在其他函数之后,故选项 C错误;函数可以嵌套调用,但不能嵌套定义,故选项 B错误;被调用函数可以在调用之后定义,但需要在调用前声明,故选项 D错误。19.下列叙述中正确的是(分数:1.00)A.C语言编译时不检查语法B.C语言的子程序有过程和函数两种C.C语言的函数可以嵌套定义D.C语言的函数可以嵌套调用 解析:解析 C 语言相对其他高级语言来说,放宽了语法检查,但并不是不检查语法。C 语言的程序是由函数构成的。
16、函数不能嵌套定义,但可以嵌套调用。20.以下函数返回 a所指数组中最大值所在的下标值,在下画线处应填入的内容是fun(int *a,int n)int i,j=0,p;p=j;for(i=j;in;i+)if(aiap)_;return(p);(分数:1.00)A.i=pB.ap=aiC.p=jD.p=i 解析:解析 该题目要求的是最大数的位置(下标)。程序通过对 a所指数组中的元素进行逐个比较,记录最大数的下标 i,并把该下标记录在变量 p中,所以,如果 aiap关系成立,则应该把 i的值赋给p,这样才满足题目的要求。21.在结构化程序设计中,模块划分的原则是(分数:2.00)A.各模块应包
17、括尽量多的功能B.各模块的规模应尽量大C.各模块之间的联系应尽量紧密D.模块内具有高内聚度,模块间具有低耦合度 解析:解析 在结构化程序设计中,软件设计应尽量做到高内聚、低耦合,这样有利于提高软件模块的独立性,这也是模块划分的原则。22.以下程序运行后的输出结果是main( )float x=2.0,y;if(x0.0) y=0.0;else if(x10.0) y=1.0/x:else y=1.0;printf(“%f/n“,y);(分数:2.00)A.0.000000B.0.250000C.0.500000D.1.000000 解析:解析 本题中,x=2.0,因此执行 else y=1.0
18、,并且以“%f”输出。23.下面说明不正确的是(分数:2.00)A.char a10=“china“;B.char a10,*p=a;p=“china“C.char *a;a=“china“;D.char a10,*p;p=a=“china“ 解析:解析 C 语言中操作一个字符串常量的方法有:把字符串常量存放在一个字符数组之中;用字符指针指向字符串,然后通过字符指针来访问字符串存储区域。当字符串常量在表达式中出现时,根据数组的类型转换规则,它被转换成字符指针。本题选项 D中错误的关键是对数组初始化时,可以在变量定义时整体赋初值,但不能在赋值语句中整体赋值。24.在 C语言中,退格符是(分数:2
19、.00)A./nB./tC./fD./h 解析:解析 /n 是回车换行符;/t 横向跳到下一制表位置;/f 是换页符;/b 是退格符。25.以下程序运行后的输出结果是main( )char s=“ABCD“,*p;for(p=s+1;ps+4;p+)printf(“%s/n“,p);(分数:2.00)A.ABCDBCDCDDB.ABCDC.BCDD.BCDCDD 解析:解析 本题考查指向字符串指针的运算方法。执行 p=s+1后,指针变量 p就指向字符串中的第二个字符 B,然后输出字符串“BCD“并换行;继续执行循环语句,指针变量 p指向下一个字符 c,输出字符串“CD“,最后一次循环,p 指向
20、字符“D“,输出字符串“D“。26.在下列关系运算中,不改变关系表中的属性个数但能减少元组个数的是(分数:2.00)A.并B.交 C.投影D.笛卡儿积解析:解析 在关系运算中,交的定义如下:设 R1和 R2为参加运算的两个关系,它们具有相同的度n,且相对应的属性值取自同一个域,则 R1R2 为交运算,结果仍为度等于 n的关系,其中的元组既属于R1又属于 R2。根据定义可知,不改变关系表的属性个数但能减少元组个数的是交运算。27.下列叙述中正确的是(分数:2.00)A.定义函数时,形参的类型说明可以放在函数体内B.return后边的值不能为表达式C.如果函数值的类型与返回值类型不一致,以函数值类
21、型为准 D.如果形参与实参类型不一致,以实参类型为准解析:解析 定义函数时,形参的类型说明放在形参表列内说明,或放在函数定义的第二行,函数体花括号“”之前,所以选项 A错。recurn 后面的值可以是一个表达式,故选项 B错误。实参与形参的类型应相同或赋值兼容。如果实参为整型而形参为实型,或者相反,则按不同类型数值的赋值规则进行转换,以形参类型为准,故选项 D错误。28.以下 4个选项中,不能看作一条语句的是(分数:2.00)A.;B.a=5,b=2.5,c=3.6;C.if(a5);D.if(b!=5)x=2;y=6; 解析:解析 选项 D为两条语句,每条语句以分号结束。29.下列对队列的叙
22、述中,正确的是(分数:2.00)A.队列属于非线性表B.队列按“先进后出”原则组织数据C.队列在队尾删除数据D.队列按“先进先出”原则组织数据 解析:解析 队列是一种操作受限的线性表。它只允许在线性表的一端进行插入操作,在另一端进行删除操作。允许插入的一端称为队尾(rear),允许删除的一端称为队首(front)。队列具有先进先出的特点,它是按“先进先出”的原则组织数据的,故本题答案为 D。30.设有以下程序段,则int x=0,s=0;while(!x!=0)s+=+x;printf(“%d“,s);(分数:2.00)A.运行程序段后输出 0B.运行程序段后输出 1 C.程序段中的控制表达式
23、是非法的D.程序段执行无限次解析:解析 本题中,逻辑非“!”运算符比不等于“!=”运算符优先级低,因此第一次循环时!x!=0 的运算结果为真,s 运算结果为 1;第二次循环时!x!=0 的运算结果为假,循环结束,输出 s结果为 1。31.对以下程序段的描述中,正确的是x=-1:dox=x*x;while(!x);(分数:2.00)A.是死循环B.循环执行两次C.循环执行一次 D.有语法错误解析:解析 do-while 语句的执行过程是:首先执行“循环体语句”,再判断表达式值的真假。在本题中,表达式的值为假,因此循环体只执行一次。32.在 C语言中,变量的隐含存储类别是(分数:2.00)A.au
24、to B.staticC.externD.无存储类别解析:解析 用 auto作存储类别的声明时,auto 可省,变量的隐含存储类别为 auto,是动态存储方式。用 static声明的局部变量是静态局部变量,它在函数调用结束后将继续占据内存单元,下次调用时继续使用该值。用 extern声明的变量是外部变量,即全局变量。33.下列叙述中错误的是(分数:2.00)A.在数据库系统中,数据的物理结构必须与逻辑结构一致 B.数据库技术的根本目标是要解决数据的共享问题C.数据库设计是指在已有数据库管理系统的基础上建立数据库D.数据库系统需要操作系统的支持解析:解析 数据库设计(Database Desig
25、n)是指根据用户的需求,在某一具体的数据库管理系统上设计数据库的结构并建立数据库的过程;数据库技术的根本目标是要解决数据共享的问题;数据库需要操作系统的支持;数据的物理结构又称数据的存储结构,就是数据元素在计算机存储器中的表示及其配置。数据的逻辑结构是指数据元素之间的逻辑关系,它是数据在用户或程序员面前表现的方式。在数据库系统中,数据的物理结构不一定与逻辑结构一致。34.某二叉树中有 n个度为 2的结点,则该二叉树中的叶子结点数为(分数:2.00)A.n+1 B.n-1C.2nD.n/2解析:解析 对于任何一棵二叉树 T,如果其终端结点(叶子结点)数为 n1,度为 2的结点数为 n2,则n1=
26、n2+1。所以该二叉树的叶子结点数等于 n+1。35.下列程序运行后的输出结果是void fune1(int i);void fune2(int i);char st=“hello,friend!“;void fune1(int i)printf(“%e“,sti);if(i3)i+=2;fune2(i);void func2(int i)printf(“%c“,sti);if(i3) i+=2;fune1(i);main( )int i=0;fund(i);printf(“/n“);(分数:2.00)A.helloB.helC.hlo D.hlm解析:解析 本题首先调用函数 func1(0)
27、,输出 st0=h。i 值变为 2,调用函数 func2(2),输出 st2=1,此时 i3,执行 i+=2,i 值变为 4,调用函数 func1(4),输出 st4=0,此时 i值大于 3,函数调用结束。因此输出结果为 hlo。36.在以下程序中,判断 ij 共执行的次数是main( )int i=0, j=10,k=2,s=0;for(;)i+=k:if(ij)printf(“%d“,s);break;s+=i:(分数:2.00)A.4B.7C.5D.6 解析:解析 本题涉及 break语句,重点是循环次数的判定。本题的循环由于无出口,只能借助 break语句终止。题目要求说明判断 ij
28、的执行次数,只需考查经过 i+=k运算如何累计 i的值,i 值分别是i=2,4,6,8,10,12 时,判断 ij 为真,程序输出 s的值并结束,共循环 6次。37.以下程序段执行后,X 的值为int a=14,b=15,x;char c=A:x=(a amin=x:while( (7) )if(xamax) amax=X;elseif (8) amin=X;else scanf(“%f“,&x);printf(“/n amax=%f/n amin=%f/n“,amax,amin);(分数:4.00)填空项 1:_ (正确答案:x0)解析:解析 本题先从键盘接受第一个成绩数值,并分别赋给 am
29、ax(用于保存最高成绩)和 amin(用于保存最低成绩);用循环条件 x0 来控制 while循环是否结束,因此,第7空处应填 x0。在循环中,每输入一个成绩 x,若 xamax,则将 x赋给 amax,以此方法找到最高分。同理,若 xamin,则将 x赋给amin,以此方法找到最低分。因此,第8空处应填 xamin。填空项 1:_ (正确答案:xamin)解析:47.在对文件操作的过程中,若要求文件的位置指针回到文件的开始处,应当调用的函数是 1。(分数:2.00)填空项 1:_ (正确答案:rewind 或 fseek-|_|-)解析:解析 略。48.在计算机中,字符的比较是对它们的 1
30、进行比较。(分数:2.00)填空项 1:_ (正确答案:ASCII 码)解析:解析 在 C语言中,对字符也可以进行比较运算,并且是按照其 ASCII码值进行的。49.在内存中,存储字符x要占用 1个字节,存储字符串“X“要占用 1 个字节。(分数:2.00)填空项 1:_ (正确答案:2)解析:解析 计算机存储一个字符用 1个字节,存储字符串时,每个字符占用 1个字节,字符串结束标记符也要占 1个字节,所以存储字符串“X“时要占用 2个字节。50.设在主函数中有以下定义和函数调用语句,且 fun函数为 void类型。请写出 fun函数的首部_。要求形参名为 b。main( )double s1
31、022;int n;fun(s);(分数:2.00)填空项 1:_ (正确答案:void fun(double b22))解析:解析 程序中为了表示函数调用不带回值,可以用、void 定义函数为“无类型”(或称“空类型”),这样系统就保证使函数不带回任何值。当二维数组作为形参时,二维数组的第一维可以省略。51.下列程序的功能是输入一个整数,判断是否是素数,若为素数则输出 1,否则输出 0。请填空。main( )int i,x,y=1;seanf(“%d“,&x);for(i=2;i=x/2;i+)if _ y=0;break;printf(“%d/n“,y);(分数:2.00)填空项 1:_
32、(正确答案:(x%i=0))解析:解析 判数 x是否是素数,循环用 2x/2 的整数 i测试对 x的整除性。若能被其中的某个整数整除,则 x是非素数,置 y的值为 0(即 x不是素数),结束循环测试。若循环中 i都不能整除 x,则 x为素数。可用求余运算 x%i是否等于 0来判定 i能否整除 x,则在第13空处应填(x%i=0)。下面程序的功能是将一个字符串 str的内容倒序。请填空。#includestring.hmain( )int i,j, (14) ;char str=“1234567“;for(i=0,j=strlen(str) (15) ;ij;i+,j-)k=stri;stri=
33、strj;strj=k;printf(“%s/n“, str):(分数:4.00)填空项 1:_ (正确答案:k)解析:解析 第14空处应该是某个变量的定义。读程序可知,变量 k没有定义,所以此处应填入 k。字符串的倒序,就是将首尾对应的字符(数组元素)两两交换。可用两个游标变量 i和 j分别代表前端元素的下标和后端元素的下标,交换以这两个变量值为下标的元素 stri和 strj。开始时,i 的值为 0,j的值为字符串末元素的下标(字符串长度减 1)。每次交换后,i 增 1,j 减 1。继续交换的条件是 stri仍然位于 strj的前面,即 ij。字符串末元素的下标是它的长度减 1,所以在第15空处应填入-1。填空项 1:_ (正确答案:-1)解析: