1、二级 C语言笔试-225 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:40.00)1.以下程序的输出结果是( )。main()char w10=“ABCD“,“EFGH“,“IJKL“,“MNOP“),K;for(k=1;k3;k+) printf(“%s/n“,wk);(分数:1.00)A.ABCDFGHKLB.ABCDEFGIJC.EFGJKOD.EFGHIJKL2.下列程序的输出结果是( )。#includestdio.hf(nt a)int b=0;static int c=4; a=c+;b+;return(a);main()int a=2,
2、i,C;for(i=0;i2;i+)c=f(a+1);printf(“%d/n“,c);(分数:1.00)A.4B.7C.6D.53.语句:printf(“%d“,(a=2) x=y;y=t;)main()int a=4,b=3,c=5;f(a,b);f(a,c);f(b,c);printf(“%d,%d,%d/n“,a,b,c);执行后输出结果是( )。(分数:1.00)A.3,4,5B.5,3,4C.5,4,3D.4,3,57.下面程序的功能是输出以下形式的金字塔图案:*main()int i,j;for(i=1;i=4;i+)for(j=1;j=4-i;j+) printf(“);for
3、(j=1;j=;j+) printf(“*“);printf(“/n“);在下画线处应填入的是( )。(分数:1.00)A.iB.2*i-1C.2*i+1D.i+28.在面向对象方法中,( )描述的是具有相似属性与操作的一组对象。(分数:1.00)A.属性B.事件C.方法D.类9.算法分析的目的是( )。(分数:1.00)A.找出数据结构的合理性B.找出算法中输入和输出之间的关系C.分析算法的易懂性和可靠性D.分析算法的效率以求改进10.以下程序的输出结果是( )。main()char*s=“12134211“;int v4=0,0,0,0),k,i;for(k=0;sk;k+)switch(
4、sk)case1:i=0;case2:i=1;case3:i=2;case4:i=3;vi+:for(k=0;k4;k+)printf(“%d“,vk);(分数:1.00)A.4 2 1 1B.0 0 0 8C.4 6 7 8D.8 8 8 811.对两个数组 a和 b进行下列初始化:char m=“1234567“;char n=1,2,3,4,5,6,7; 则下列叙述正确的是( )。(分数:1.00)A.数组 m与数组 n完全相同B.数组 m与数组 n长度相同C.数组 m比数组 n长 1D.数组 m与数组 n中都存放字符串12.当 c的值不为 0时,在下列选项中能正确将 c的值赋给变量 a
5、、b 的是( )。(分数:1.00)A.c=b=a;B.(a=c)|(b=c);C.(a=c) i5; i+)printf(“%d%c“,xi.num,xpi.name2);以上程序段的输出结果为( )。(分数:1.00)A.2A3N4A5UB.112A3H4IC.1A2N3A4UD.2H3A4H5I18.有以下程序:void fun(char*a,char*b)a=b;(*a)+; main()char c1=A,c2=a,*p1,*p2;p1= printf(“%d“,j=40);(分数:1.00)A.i=1;i4;+iB.i=1;i3;+iC.i=4;i2;i-D.i=2;i4;+i22
6、.下列选项中非法的字符常量是( )。(分数:1.00)A./tB./039C.,D./n23.用链表表示线性表的优点是( )。(分数:1.00)A.便于随机存取B.花费的存储空间较顺序存储少C.便于插入和删除操作D.数据元素的物理顺序与逻辑顺序相同24.有以下程序:main()char a=a,b;printf(“%c,“,+a);printf(“%c/n“,b=a+);程序运行后的输出结果是( )。(分数:1.00)A.b,bB.b,CC.a,bD.a,c25.下列程序的输出结果是( )。void fun(int*x,int y)printf(“%d%d“,*x,*y);*x=3;*y=4;
7、main()int x=1,y=2;fun((分数:1.00)A.11B.4C.12D.329.若二维数组 a有 m列,则在 aij前的元素个数为( )。(分数:1.00)A.i*m+j-1B.i*m+jC.j*m+1D.i*m+j+130.以下能正确定义一维数组的选项是( )。(分数:1.00)A.int a5=0,1,2,3,4,5);B.char a=0,12,3,4,5);C.char a=A,B,C);D.int a5=“0123“;31.常采用的两种存储结构是( )。(分数:1.00)A.顺序存储结构和链式存储结构B.散列方法和索引方式C.链表存储结构和数组D.线性存储结构和非线性
8、存储结构32.有以下程序main()int i,n=0;for(i=2;i5;i+)doif(i%3) continue;n+; while(!i);n+; printf(“n=%d/n“,n);程序执行后输出结果是( )。(分数:1.00)A.n=5B.n=2C.n=3D.n=433.以下程序的输出结果是( )。main()char ch34=“123“,“456“,“78“,*p3;int i;for(i=0;i3;i+)pi=chi;for(i=0;i3;i+) printf(“%s“,pi);(分数:1.00)A.123456780B.123 456 780C.12345678D.14
9、734.结构化程序设计主要强调的是( )。(分数:1.00)A.程序的规模B.程序的效率C.程序设计语言的先进性D.程序的易读性35.有以下程序:main()int x=102,y=012;printf(“%2d,%2d/n“,x,y);执行后输出结果是( )。(分数:1.00)A.10,01B.02,12C.102,10D.02,1036.以下程序的输出结果是( )。union myunstruciint x,y,z;u;int k;a;main()a.u.x=4;a.u.y=5;a.u.z=6;a.k=0;printf(“%d/n“,a.u.x);(分数:1.00)A.4B.5C.6D.0
10、37.在下列给出的表达式中,与 while(E)中的(E)不等价的表达式是( )。(分数:1.00)A.(!E=O)B.(E0|E0)C.(E=0)D.(E!=0)38.设 int x=7,则X 的值是( )。(分数:1.00)A.-8B.7C.-1D.139.有以下程序段:int x=3:doprintf(“%d“,x-=2);while(!(-x);其输出结果是( )。(分数:1.00)A.1B.3 0C.1-2D.死循环40.有下列程序:main()char s=“abcde“;s+=2:printf(“%d/n“,s0);执行后的结果是( )。(分数:1.00)A.输出字符 a的 AS
11、CII码B.输出字符 c的 ASCII码C.输出字符 cD.程序出错二、填空题(总题数:14,分数:60.00)41.在结构化设计方法中,数据流图表达了问题中的数据流与加工间的关系,并且每一个 1 实际上对应一个处理模块。(分数:4.00)填空项 1:_42.二分法查找仅限于这样的表:表中的数据元素必须有序,其存储结构必须是 1。(分数:4.00)填空项 1:_43.数据库系统中实现各种数据管理功能的核心软件是 1。(分数:4.00)填空项 1:_44.语句“x+;+x;x=1+x;”执行后都使变量 x中的值增 1,请写出一条同一功能的赋值语句 1。(分数:4.00)填空项 1:_45.数据模
12、型按不同应用层次分成 3种类型,它们是概念数据模型、 1 和物理数据模型。(分数:4.00)填空项 1:_46.在关系运算中, 1 运算是在指定的关系中选取所有满足给定条件的元组,构成一个新的关系,而这个新的关系是原关系的一个子集。(分数:4.00)填空项 1:_47.在以下程序运行时若从键盘输入:10 20 30回车。输出结果是_。#includestdio.hmain()int i=0,j=0,k=0;scanf(“%d%*d%d“, _;while(n!=0);printf(“/n“);(分数:4.00)填空项 1:_二级 C语言笔试-225 答案解析(总分:100.00,做题时间:90
13、 分钟)一、选择题(总题数:40,分数:40.00)1.以下程序的输出结果是( )。main()char w10=“ABCD“,“EFGH“,“IJKL“,“MNOP“),K;for(k=1;k3;k+) printf(“%s/n“,wk);(分数:1.00)A.ABCDFGHKLB.ABCDEFGIJC.EFGJKOD.EFGHIJKL 解析:解析 当 k=1时,循环成立,输出 w1的数组即 EFGH,接着执行 k+后 k为 2;当 k=2时,循环成立,输出 w2的数组即 IJKL,接着执行 k+后,k 为 3;当 k=3时,循环不成立,退出。2.下列程序的输出结果是( )。#include
14、stdio.hf(nt a)int b=0;static int c=4; a=c+;b+;return(a);main()int a=2,i,C;for(i=0;i2;i+)c=f(a+1);printf(“%d/n“,c);(分数:1.00)A.4B.7C.6D.5 解析:解析 static 变量在函数调用结束后的所有变化均不保持,所以当 i=1时,第 2次进入 f函数时c=5,所以最终 main函数中 c的值为 5。3.语句:printf(“%d“,(a=2) x=y;y=t;)main()int a=4,b=3,c=5;f(a,b);f(a,c);f(b,c);printf(“%d,%
15、d,%d/n“,a,b,c);执行后输出结果是( )。(分数:1.00)A.3,4,5B.5,3,4C.5,4,3D.4,3,5 解析:解析 a、b、c 都是按值传递给函数 f,函数 f不能改变它们的值。所以,a、b、c 的值仍然是4、3、5。7.下面程序的功能是输出以下形式的金字塔图案:*main()int i,j;for(i=1;i=4;i+)for(j=1;j=4-i;j+) printf(“);for(j=1;j=;j+) printf(“*“);printf(“/n“);在下画线处应填入的是( )。(分数:1.00)A.iB.2*i-1 C.2*i+1D.i+2解析:解析 对于第 i
16、行,程序先输出 4-i个空格。然后输出 2i-1个”*”,所以,答案是 B。8.在面向对象方法中,( )描述的是具有相似属性与操作的一组对象。(分数:1.00)A.属性B.事件C.方法D.类 解析:解析 类(chass)描述的是具有相似属性与操作的一组对象,具体对象是类的实例。9.算法分析的目的是( )。(分数:1.00)A.找出数据结构的合理性B.找出算法中输入和输出之间的关系C.分析算法的易懂性和可靠性D.分析算法的效率以求改进 解析:解析 算法分析是指对一个算法的运行时间和占用空间做定量的分析,计算相应的数量级,并用时间复杂和空间复杂度表示。分析算法的目的就是要降低算法的时间复杂度和空间
17、复杂度,提高算法的执行效率。10.以下程序的输出结果是( )。main()char*s=“12134211“;int v4=0,0,0,0),k,i;for(k=0;sk;k+)switch(sk)case1:i=0;case2:i=1;case3:i=2;case4:i=3;vi+:for(k=0;k4;k+)printf(“%d“,vk);(分数:1.00)A.4 2 1 1B.0 0 0 8 C.4 6 7 8D.8 8 8 8解析:解析 本题考查 switch,case 语句,当 k=0时,循环体成立,执行 switch后表达式的值为1,执行 case1,i 的值为 0,因为没有 br
18、eak语句,继续执行其后的语句,到最后一个语句时 i的值为 3,此时 vi+,v3=1,接着执行 k+后,k 的值为 1,当 k=1时,循环成立,执行 switch后的表达式的值为2,执行 case2,i 的值为 1,因为没有 break语句,继续执行其后的语句,到最后一个语句时,i的值为 3,此时 vi+,v3=2,接着执行 k+后,k 的值为 2,依次下去,csse4也会执行,最后 i的值一定为 3,到 v3=8时循环结束,而 v0v2的值一直没有变化,故选择 B选项。11.对两个数组 a和 b进行下列初始化:char m=“1234567“;char n=1,2,3,4,5,6,7; 则
19、下列叙述正确的是( )。(分数:1.00)A.数组 m与数组 n完全相同B.数组 m与数组 n长度相同C.数组 m比数组 n长 1 D.数组 m与数组 n中都存放字符串解析:解析 在 m数组中赋值的是字符串,其长度为 7,末尾有结束符“/0”,故字节数为 8,而 n数组中赋的是字符,其长度为 7,故 C选项正确。12.当 c的值不为 0时,在下列选项中能正确将 c的值赋给变量 a、b 的是( )。(分数:1.00)A.c=b=a;B.(a=c)|(b=c);C.(a=c) i5; i+)printf(“%d%c“,xi.num,xpi.name2);以上程序段的输出结果为( )。(分数:1.0
20、0)A.2A3N4A5U B.112A3H4IC.1A2N3A4UD.2H3A4H5I解析:解析 本题主要考查结构体数组的使用。xinum 为结构体 xi中的 num成员,xinum2是结构体 xi中 name成员的第 3个元素。程序执行循环过程时:第 1次循环,i=1,输出 xinum,x1.name2的值;第 2次循环,i=2,输出 x2.num,x2name2的值,即 3N;第 3次循环,i=3,输出x3.num,x3.name2的值,即 4A;第 4次循环,i=4,输出 x4.num,x4name2的值,即 5U。18.有以下程序:void fun(char*a,char*b)a=b;
21、(*a)+; main()char c1=A,c2=a,*p1,*p2;p1= printf(“%d“,j=40);(分数:1.00)A.i=1;i4;+iB.i=1;i3;+iC.i=4;i2;i-D.i=2;i4;+i 解析:解析 要想使程序输出 25,则 j-40=25,j=65,而 j初值是 50,所以填入 for循环的语句,使引用的数组元素累加 65-50=15即可,D 选项中,i 下标从 0开始,i=2 指向第 3个数 50+a2=50+10=60,继续循环 60+a3=65+5=65,此时 i=4跳出,循环结束。22.下列选项中非法的字符常量是( )。(分数:1.00)A./tB
22、./039 C.,D./n解析:解析 水平制表符中,/t表示的是横向跳若干格;选项 B中,/039错误,/039是八进制形式表的字符,最大数为 7,但其中出现9;选项 C中,是字符逗号;选项 D中,/n表示的是换行。23.用链表表示线性表的优点是( )。(分数:1.00)A.便于随机存取B.花费的存储空间较顺序存储少C.便于插入和删除操作 D.数据元素的物理顺序与逻辑顺序相同解析:解析 数据的存储结构有顺序存储结构和链式存储结构两种。不同存储结构的数据处理效率不同。由于链表采用链式存储结构,元素的物理顺序并不连续,对于插入和删除无需移动元素,很方便,当查找元素时就需要逐个元素查找,因此查找的时
23、间相对更长。24.有以下程序:main()char a=a,b;printf(“%c,“,+a);printf(“%c/n“,b=a+);程序运行后的输出结果是( )。(分数:1.00)A.b,b B.b,CC.a,bD.a,c解析:解析 +a 与 a+的区别是前者先自加再运算,后者是先运算后自加。25.下列程序的输出结果是( )。void fun(int*x,int y)printf(“%d%d“,*x,*y);*x=3;*y=4;main()int x=1,y=2;fun((分数:1.00)A.11B.4 C.12D.3解析:解析 本题考查 if else语句。if 条件为真则执行后面表达
24、式,如果 if为假则执行 else语句。29.若二维数组 a有 m列,则在 aij前的元素个数为( )。(分数:1.00)A.i*m+j-1B.i*m+j C.j*m+1D.i*m+j+1解析:解析 二维数组的元素可以看成是按矩阵形式存放的,数组第一维的下标是 i,说明它前面还有i行,有 i*m个元素,数组第二维的下标是 j,说明它前面还有 j列,有 j个元素,所以共有 i*m+j个元素。30.以下能正确定义一维数组的选项是( )。(分数:1.00)A.int a5=0,1,2,3,4,5);B.char a=0,12,3,4,5); C.char a=A,B,C);D.int a5=“012
25、3“;解析:解析 数组下标从 0开始,A 选项中所赋值的个数超过了数组的长度,C 选项中定义 a为字符型变量,而不是数组,赋值错误,D 选项中,整型数组不能赋字符串。31.常采用的两种存储结构是( )。(分数:1.00)A.顺序存储结构和链式存储结构 B.散列方法和索引方式C.链表存储结构和数组D.线性存储结构和非线性存储结构解析:解析 线性表的存储通常要用两种存储结构:顺序存储结构和链式存储结构。32.有以下程序main()int i,n=0;for(i=2;i5;i+)doif(i%3) continue;n+; while(!i);n+; printf(“n=%d/n“,n);程序执行后
26、输出结果是( )。(分数:1.00)A.n=5B.n=2C.n=3D.n=4 解析:解析 continue 语句的作用是结束本次循环,即跳过本次循环体中余下尚未执行的语句,接着再一次进行循环的条件判定。33.以下程序的输出结果是( )。main()char ch34=“123“,“456“,“78“,*p3;int i;for(i=0;i3;i+)pi=chi;for(i=0;i3;i+) printf(“%s“,pi);(分数:1.00)A.123456780B.123 456 780 C.12345678D.147解析:解析 第一个 for循环的作用是让 p指向每行的首地址,第二个 for
27、循环的作用是把它指向的字符串输出,故选择 B选项。34.结构化程序设计主要强调的是( )。(分数:1.00)A.程序的规模B.程序的效率C.程序设计语言的先进性D.程序的易读性 解析:解析 程序不光是编写完就结束了,为了测试和维护程序,往往还有其他人阅读和跟踪程序,因此程序设计的风格应该强调简单和清晰,即程序的易读性,“清晰第一,效率第二”。35.有以下程序:main()int x=102,y=012;printf(“%2d,%2d/n“,x,y);执行后输出结果是( )。(分数:1.00)A.10,01B.02,12C.102,10 D.02,10解析:解析 x 的值为十进制数 102,而
28、y的值为八进制数 012,根据题意将 y用十进制表示为10%md,m 为指定输出数据的宽度,若位数小于 m则左端补以空格,若位数大于 m则按实际输出。所以答案是 C。36.以下程序的输出结果是( )。union myunstruciint x,y,z;u;int k;a;main()a.u.x=4;a.u.y=5;a.u.z=6;a.k=0;printf(“%d/n“,a.u.x);(分数:1.00)A.4B.5C.6D.0 解析:解析 因为 a是结构体变量,最后一次输入的值为结构体中的值,即 a中的任何一个值都为 0。37.在下列给出的表达式中,与 while(E)中的(E)不等价的表达式是
29、( )。(分数:1.00)A.(!E=O)B.(E0|E0) C.(E=0)D.(E!=0)解析:解析 在 while(E)中,表达式 E可以是 C语言中任意合法的条件表达式,但不能为空,由它来控制循环体是否执行。在选项 B中表达武 E0|E0 是一个逻辑表达式。38.设 int x=7,则X 的值是( )。(分数:1.00)A.-8 B.7C.-1D.1解析:解析 本题主要考查按位求反运算和 C语言正负数的表示,“0”代表正数,“1”代表负数;x=7的二进制为 00111,第一个 0代表正数,x 为 11000,第一个 1代表负数,值为 8。39.有以下程序段:int x=3:doprint
30、f(“%d“,x-=2);while(!(-x);其输出结果是( )。(分数:1.00)A.1B.3 0C.1-2 D.死循环解析:解析 本题考查 do-while循环,先执行 do输出的 x的值为 1,接着执行while 后语句,此时-x的值为 0,x 也为 0,而非 0为 1,循环成立,接着执行 do输出 x值为-2,执行-x 后,表达式为-2,而!(-x)为 0,退出循环。40.有下列程序:main()char s=“abcde“;s+=2:printf(“%d/n“,s0);执行后的结果是( )。(分数:1.00)A.输出字符 a的 ASCII码B.输出字符 c的 ASCII码C.输出
31、字符 cD.程序出错 解析:解析 因为字符数组 s中的数组名 s表示的是一个地址常量,所以语句“s+=2;”不能将指针在当前位置的基础上再向后移动两位。因而程序编译时出错。二、填空题(总题数:14,分数:60.00)41.在结构化设计方法中,数据流图表达了问题中的数据流与加工间的关系,并且每一个 1 实际上对应一个处理模块。(分数:4.00)填空项 1:_ (正确答案:加工)解析:解析 数据流图是从数据传递和加工的角度,其中的每一个加工对应一个处理模块。42.二分法查找仅限于这样的表:表中的数据元素必须有序,其存储结构必须是 1。(分数:4.00)填空项 1:_ (正确答案:顺序存储(顺序方式
32、存储))解析:解析 二分法查找要求表是有序顺序列表,即第一要求是数据元素有序,第二要求是按顺序方式存储。43.数据库系统中实现各种数据管理功能的核心软件是 1。(分数:4.00)填空项 1:_ (正确答案:数据库管理系统)解析:解析 数据库管理系统(DBMS)是数据库的管理机构,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务等。44.语句“x+;+x;x=1+x;”执行后都使变量 x中的值增 1,请写出一条同一功能的赋值语句 1。(分数:4.00)填空项 1:_ (正确答案:x+=1)解析:解析 x+=1 相当于 x=x+1,也就是本身加 1,+前缀形式是在使用变量之前先将其
33、值增 1或减 1,后缀形式是先使用变量原来的值,使用完成后再使值增 1或减 1。45.数据模型按不同应用层次分成 3种类型,它们是概念数据模型、 1 和物理数据模型。(分数:4.00)填空项 1:_ (正确答案:逻辑数据模型)解析:解析 数据模型按不同层次分成概念数据模型、逻辑数据模型和物理数据模型 3类。46.在关系运算中, 1 运算是在指定的关系中选取所有满足给定条件的元组,构成一个新的关系,而这个新的关系是原关系的一个子集。(分数:4.00)填空项 1:_ (正确答案:选择)解析:解析 根据定义在关系运算中,选择运算是在指定的关系中选取所有满足给定条件的元组,构成一个新的关系,而这个新的关系是原关系的一个子集。47.在以下程序运行时若从键盘输入:10 20 30回车。输出结果是_。#includestdio.hmain()int i=0,j=0,k=0;scanf(“%d%*d%d“, _;while(n!=0);printf(“/n“);(分数:4.00)填空项 1:_ (正确答案:n/=10 或 n=n/10)解析:解析 在主函数的每次循环中变量 s=n%10,所以变量 s的值是 n的个位上的数字,每次将其输出。在空白处填写 n/10或 n=n/10,就是每次循环时,将 n的值缩小 10倍,这样直到 n的值等于 0时,就完成数字 n的逆序输出。