1、二级 C语言笔试-446 及答案解析(总分:97.00,做题时间:90 分钟)一、选择题(总题数:40,分数:67.00)1.下列选项中,不符合良好程序设计风格的是A) 源程序要文档化 B) 数据说明的次序要规范化C) 避免滥用 goto语句 D) 模块没计要保证高耦合、高内聚(分数:2.00)A.B.C.D.2.个栈的初始状态为空。现将元素 1、2、3、4、5、A、B、C、D、E 依次入栈,然后再依次出栈则元素出栈的顺序_。A) 12345ABCDE B) EDCBA54321C) ABCDE12345 D) 54321EDCBA(分数:2.00)A.B.C.D.3.软件是指A) 程序 B)
2、 程序和文档C) 算法加数据结构 D) 程序、数据与相关文档的完整集合(分数:2.00)A.B.C.D.4.下列叙述中正确的是A) 软件测试应该由程序开发者来完成 B) 程序经调试后一般不需要再测试C) 软件维护只包括对程序代码的维护 D) 以上 3种说法都不对(分数:2.00)A.B.C.D.5.在设计程序时,应采纳的原则之一是A) 不限制 goto语句的使用 B) 减少或取消注解行C) 程序越短越好 D) 程序结构应有助于读者理解(分数:2.00)A.B.C.D.6.下列叙述中正确的是 _。A) 程序设计就是编制程序 B) 程序测试必须由程序员自己去做C) 程序经调试改错后还应进行再测试
3、D) 程序经调度改错后不必进行再测试(分数:2.00)A.B.C.D.7.下列叙述中正确的是( )。A) 在模块化程序设计中,一个模块应该尽量多的包括与其他模块联系的信息B) 在自顶向下、逐步细化的设计过程中,首先应设计解决问题的第一个细节C) 在模块化程序设计中,一个模块内部的控制结构也要符合结构化原则D) 在程序设计过程中,不能同时采用结构化程序设计方法与模块化程序设计方法(分数:2.00)A.B.C.D.8.栈底至栈顶依次存放元素 A、B、C、D,在第五个元素 E入栈前,栈中元素可以出栈,则出栈序列可能是A) ABCED B) DCBEA C) DBCEA D) CDABE(分数:2.0
4、0)A.B.C.D.9.在面向对象方法中, ( )描述的是具有相似属性与操作的一组对象。A) 属性 B) 事件 C) 方法 D) 类(分数:2.00)A.B.C.D.10.在数据库设计中,将 E-R图转换成关系数据模型的过程属于( )。A需求分析阶段 B概念没计阶段C逻辑设计阶段 D物理设计阶段(分数:1.00)A.B.C.D.11.下列叙述中,正确的是A) 用 E-R图能够表示实体集间一对一的联系、一对多的联系和多对多的联系B) 用 E-R图只能表示实体集之间一对一的联系C) 用 E-R图只能表示实体集之间一对多的联系D) 用 E-R图表示的概念数据模型只能转换为关系数据模型(分数:2.00
5、)A.B.C.D.12.有三个关系 R、S 和 T如下:(分数:2.00)A.B.C.D.13.用树形结构表示实体之间联系的模型是_。A) 关系模型 B) 网状模型 C) 层次模型 D) 以上三个都是(分数:1.00)A.B.C.D.14.C语言的基本单位是( )。A) 函数 B) 过程 C) 子程序 D) 子函数(分数:1.00)A.B.C.D.15.以下选项中不属于字符常量的是_。A) C B) “C“ C) /xCC D) /072(分数:2.00)A.B.C.D.16.若有运算符:、=、%、sizeof,则它们按优先级(由高至低)的正确排列顺序为( )。A) %、sizeof、= B)
6、 sizeof、%、=、C) sizeof、%、= D) sizeof、%、=(分数:1.00)A.B.C.D.17.下列程序的输出结果是main()double d=3.2;int x,y;x=1.2;y=(x+3.8)/5.0;printf(“%d/n“,d*y);A) 3 B) 3.2 C) 0 D) 3.07(分数:1.00)A.B.C.D.18.若有说明:int *p,m=5,n;,则以下程序段中正确的是A) p=printf(“ % d/n“, (x, y);则以下叙述中正确的是_。A) 输出语句中格式说明符的个数少于输出项的个数,不能正确输出B) 运行时产生出错信息C) 输出值为
7、 2002D) 输出值为 2003(分数:1.00)A.B.C.D.20.当把以下 4个表达式用作 if语句的控制表达式时,有一个选项与其他 3个选项含义不同,这个选项是 _。A) k%2 B) k%2=1 C) (k%2)!=0 D) !k2=1(分数:2.00)A.B.C.D.21.下列程序的运行结果是#include“stdio.h“main()intx=-9,y=5,z=8;if(xy)if(y0)z=0;else z+=1;printf(“%d/n“,z);A) 6 B) 7 C) 8 D) 9(分数:1.00)A.B.C.D.22.下列 4个关于 C语言的结论中错误的是( )。A)
8、 可以用 dowhile语句实现的循环一定可以用 while语句实现B) 可以用 for语句实现的循环一定可以用 while语句实现C) 可以用 while语句实现的循环一定可以用 for语句实现D) dowhile语句与 while语句的区别仅是关键字“while”出现的位置不同(分数:1.00)A.B.C.D.23.在 C语言中,while 和 dowhile循环的主要区别是( )。A)dowhile的循环体不能是复合语句 B)dowhile 允许从循环体外转到循环体内C)whil8的循环体至少被执行一次 D)dowhile 的循环体至少被执行一次(分数:2.00)A.B.C.D.24.判
9、断 char型变量 c1是否为小写字母的正确表达式为( )A) a=c 1=zB) (c1=a)|(c1=z)C) (a=c1|(z=c1)D) (c1=a) main()int a10=1,2,3,4,5,6,7,8,9,10;sum(a2);printf(“%d/n“, a2);程序运行后的输出结果是_。(A) 6(B) 7(C) 5(D) 8(分数:2.00)A.B.C.D.28.以下程序的输出结果是_。int f()static int i=0;int s=1;s+=i; i+;return s;main()int i, a=0;for(i=0; i5; i+)a+=f();print
10、f(“% d/n“, a);A) 20 B) 24 C) 25 D) 15(分数:2.00)A.B.C.D.29.以下叙述正确的是( )。 A) 只能在循环体内和 switch语句体内使用 break语句 B) contiune语句的作用是结束整个循环的执行 C) 在循环体内使用 break语句或 continue语句的作用相同 D) 从多层循环嵌套中退出时,只能使用 goto语句(分数:2.00)A.B.C.D.30.以下程序调用 scanf函数给变量 a输入数值的方法是错误的,其错误原因是( )。#include stdio.hmain()int *p,*q,a,b;p=printf(“i
11、nput a:“);scanf(“%d“,*p);A) *p表示的是指针变量 p的地址B) *p表示的是变量 a的值,而不是变量 a的地址C) *p表示的是指针变量 p的值D) *p只能用来说明 p是一个指针变量(分数:1.00)A.B.C.D.31.有下列程序:#includestdio.hmain()char*a=“abcd“,“ef“,“gh“,“ijk“;int i;for(i=0;i4;i+)printf(“%c“,*ai);程序运行后的输出结果是( )。Aaegi Bdfhk Cabcd Dabcdefghijk(分数:1.00)A.B.C.D.32.以下合法的字符型常量是A) /
12、x13 B) /081 C) 65 D) “/n/(分数:2.00)A.B.C.D.33.以下程序运行后的输出结果是#include stdio.hint fun(int(*s)4,int n,int k)int m,i;m=s0k;for(i=1;in;i+) if(sikm)m=sik;return m;main( )int a44=1,2,3,4,11,12,13,14,21,22,23,24,31,32,33,34 ;prinff(“%d/n“,fun(a,4,0);A) 4 B) 34 C) 31 D) 32(分数:2.00)A.B.C.D.34.下面结构体的定义语句中,错误的是A)
13、 struct ord int x;int y;int z;struct ord a;B) struct ord int x;int y;int z;struct ord a;C) struct ord int x;int y;int z;a;D) struct int x;int y;int z;)a;(分数:2.00)A.B.C.D.35.定义结构体数组:struct stuint num;char name20;x5=1,“LI“,2,“ZHAO“,3,“WANG“,4,“ZHANG“,5,“LIU“;for(i=1;i5;i+)printf(“%d%c“,xi.num,xi.name2
14、;以上程序段的输出结果为( )。A) 2A3N4A5U B) 112A3H41 C) 1A2N3A4U D) 2H3A4H51(分数:1.00)A.B.C.D.36.若有以下程序段int r=8;printf(“%d/n“,r1);输出结果是A) 16 B) 8 C) 4 D) 2(分数:2.00)A.B.C.D.37.有以下程序int fun(int x,int n)static int sum=0,i;for(i=0;in;i+)sum+=xi;return sum;main()int a=1,2,3,4,5,b=6,7,8,9,s=0;s=fun(a,5)+fun(b,4);printf
15、(“%d/n“,s);程序执行后的输出结果是A) 45 B) 50 C) 60 D) 55(分数:2.00)A.B.C.D.38.以下程序的运行结果是( )。#include stdiohmain()st,uct dateint year,month,day;today;printf(“%d/n“,sizeof(struct date);A) 6 B) 8 C) 10 D) 12(分数:1.00)A.B.C.D.39.有如下程序:#include stdiohlong fib(int n)if(n2)return(fib(n-1)+fib(n-2);else return(2);main()p
16、rintf(“%d/n“,fib(3);该程序的输出结果是( )。A) 2 B) 4 C) 6 D) 8(分数:2.00)A.B.C.D.二、填空题(总题数:15,分数:30.00)40.对下列二叉树进行中序遍历的结果为 1。(分数:2.00)填空项 1:_41.二叉树的遍历可以分为三种:前序遍历、_遍历和后序遍历。(分数:2.00)填空项 1:_42.在面向对象方法中,类的实例称为 1。(分数:2.00)填空项 1:_43.某二叉树中度为 2的结点有 18个,则该二叉树中有 1 个叶子结点。(分数:2.00)填空项 1:_44.在链表的运算过程中,能够使空表与非空表的运算统一的结构是 1。(
17、分数:2.00)填空项 1:_45.在链表的运算过程中,能够使空表与非空表的运算统一的结构是 1。(分数:2.00)填空项 1:_46.设变量 a和 b已正确定义并赋初值,请写出与 a-=a+b等价的赋值表达式 1。(分数:2.00)填空项 1:_47.已定义 char ch=“$“;int i=1,j;执行 j=! chi+以后,i 的值为 1。(分数:2.00)填空项 1:_48.以下程序的输出结果是U /U。#includestdio.hmain()int i,j,sum;for(i=3;i=-1;i-)(sum=0;for(j=1;j=i;j+) sum+=i*j;printf(“%d
18、/n,sum);(分数:2.00)填空项 1:_49.以下程序运行后的输出结果是 1。main2int a=1,b=2,c=3;if(c=a) printf(“%d/n“,c);else printf(“%d/n“,b);(分数:2.00)填空项 1:_50.以下程序的输出结果为_。#define JFT(x) x*xmain( )int a,k=3;a=+JFT(k+1);printf(“%d“,a);(分数:2.00)填空项 1:_51.下面程序的功能是输出数组 s中最大元素的下标,请填空。main( )int k,p,s =1,-9,7,2,-10,3;for(p=0,k=p;p6;p+
19、)if(spsk)_printf(“%d/n“,k);(分数:2.00)填空项 1:_52.以下 fun函数的功能是在 N行 M列的整型二维数组中,选出一个最大值作为函数值返回,请填空。(设 M,N 已定义) int fun(int aNM) int i,j,row=0,co1=0; for(i=0;iN;i+) for(i=0;jM;j+) if(aijarowco1)row=i;co1=j; returnU /U; (分数:2.00)填空项 1:_53.以下程序中函数 fun的功能是:构成一个如图所示的带头节点的单向链表,在节点的数据域中放入了具有两个字符的字符串。函数 disp的功能是显
20、示输出该单链表中所有节点中的字符串。请填空完成函数disp。(分数:2.00)填空项 1:_54.以下程序运行后的输出结果是U /U。#include stdio.hfun(int x)if(x/20) fun(x/2);printf(“%d“,x);main()fun(6); (分数:2.00)填空项 1:_二级 C语言笔试-446 答案解析(总分:97.00,做题时间:90 分钟)一、选择题(总题数:40,分数:67.00)1.下列选项中,不符合良好程序设计风格的是A) 源程序要文档化 B) 数据说明的次序要规范化C) 避免滥用 goto语句 D) 模块没计要保证高耦合、高内聚(分数:2.
21、00)A.B.C.D. 解析:解析 编程风格是在不影响性能的前提下,有效地编排和组织程序,以提高可读性和可维护性。更直接地说,风格意味着要按照规则进行编程。这些规则包括:程序文档化。就是程序文档包含恰当的标识符、适当的注解和程序的视觉组织等。数据说明。出于阅读理解和维护的需要,最好使模块前的说明语句次序规范化。此外,为方便查找,在每个说明语句的说明符后,数据名应按照字典顺序排列。功能模块化。即把源程序代码按照功能划分为低耦合、高内聚的模块。注意 goto语句的使用。合理使用goto语句可以提高代码的运行效率,但 goto语句的使用会破坏程序的结构特性。因此,除非确实需要,否则最好不使用 got
22、o语句。2.个栈的初始状态为空。现将元素 1、2、3、4、5、A、B、C、D、E 依次入栈,然后再依次出栈则元素出栈的顺序_。A) 12345ABCDE B) EDCBA54321C) ABCDE12345 D) 54321EDCBA(分数:2.00)A.B. C.D.解析:知识点 栈结构的存储方式评析 栈是一种特殊的线性表,这种线性表只能在固定的一端进行插入和删除操作,允许插入和删除的一端称为栈顶,另一端称为栈底。一个新元素只能从栈顶一端进入,删除时,只能删除栈顶的元素,即刚刚被插入的元素。这表明栈的运算规则是“先进后出”(或称“后进先出”)。在栈顶进行插入运算,称为进栈(或入栈),在栈顶进
23、行删除运算,称为退栈(或出栈)。本题中,依次进栈,即依次插入元素1、2,3、4、5、A、B、C、D、E,依次出栈,即依次删除元素,根据栈“先进后出”的规则,应该以倒序出栈。即元素出栈顺序为 EDCBA54321。3.软件是指A) 程序 B) 程序和文档C) 算法加数据结构 D) 程序、数据与相关文档的完整集合(分数:2.00)A.B.C.D. 解析:解析 软件是程序、数据与相关文档的集合,相对于计算机硬件而言,软件是逻辑产品而不是物理产品,是计算机的无形部分。4.下列叙述中正确的是A) 软件测试应该由程序开发者来完成 B) 程序经调试后一般不需要再测试C) 软件维护只包括对程序代码的维护 D)
24、 以上 3种说法都不对(分数:2.00)A.B.C.D. 解析:解析 本题考核软件测试、软件调试和软件维护的概念。软件测试的目标是在精心控制的环境下执行程序,以发现程序中的错误,给出程序可靠性的鉴定。软件测试具有挑剔性,测试不是为了证明程序是正确的,而是在设想程序有错误的前提下进行的,其目的是设法暴露程序中的错误和缺陷,也就是说,测试是程序执行的过程,目的在于发现错误;一个好的测试在于能发现至今未发现的错误;一个成功的测试是发现了至今未发现的错误。由于测试的这一特征,一般应当避免由开发者测试自己的程序。所以,选项 A的说法错误。调试也称排错,目的是发现错误的位置,并改正错误,经测试发现错误后,
25、可以立即进行调试并改正错误;经过调试后的程序还需进行回归测试,以检查调试的效果,同时也可防止在调试过程中引进新的错误。所以,选项 B的说法错误。软件维护通常有 4类:为纠正使用中出现的错误而进行的改正性维护:为适应环境变化而进行的适应性维护;为改进原有软件而进行的完善性维护;为将来的可维护和可靠而进行的预防性维护。软件维护不仅包括程序代码的维护,还包括文档的维护。文档可以分为用户文档和系统文档两类。但无论是哪类文档,都必须与程序代码同时维护。只有与程序代码完全一致的文档才有意义和价值。所以,选项 C的说法错误。5.在设计程序时,应采纳的原则之一是A) 不限制 goto语句的使用 B) 减少或取
26、消注解行C) 程序越短越好 D) 程序结构应有助于读者理解(分数:2.00)A.B.C.D. 解析:解析 滥用 goto语句将使程序流程无规律,可读性差,因此 A)不选;注解行有利于对程序的理解,不应减少或取消,B)也不选;程序的长短要依照实际情况而论,而不是越短越好,C)也不选。6.下列叙述中正确的是 _。A) 程序设计就是编制程序 B) 程序测试必须由程序员自己去做C) 程序经调试改错后还应进行再测试 D) 程序经调度改错后不必进行再测试(分数:2.00)A.B.C. D.解析:解析 软件测试包括需求分析、结构功能模块设计、编制程序等阶段。程序的测试可以由专门的测试人员来完成。程序经调试改
27、错后还应进行再测试。7.下列叙述中正确的是( )。A) 在模块化程序设计中,一个模块应该尽量多的包括与其他模块联系的信息B) 在自顶向下、逐步细化的设计过程中,首先应设计解决问题的第一个细节C) 在模块化程序设计中,一个模块内部的控制结构也要符合结构化原则D) 在程序设计过程中,不能同时采用结构化程序设计方法与模块化程序设计方法(分数:2.00)A.B.C. D.解析:解析 在模块化程序设计中,模块之间的联系可以通过程序的控制结构来实现,在自顶向下、逐步细化的设计过程中,首先要考虑全局目标,而不是细节。在程序设计中模块化和结构化可以同时使用,一个模块的内部结构也要符合结构化设计原则。8.栈底至
28、栈顶依次存放元素 A、B、C、D,在第五个元素 E入栈前,栈中元素可以出栈,则出栈序列可能是A) ABCED B) DCBEA C) DBCEA D) CDABE(分数:2.00)A.B. C.D.解析:解析 栈操作原则上“后进先出”,栈底至栈顶依次存放元素 A、B、C、D,则表明这 4个元素中D是最后进栈, B、C 处于中间,A 最早进栈,所以出栈时一定是先出 D,再出 C,最后出 A。9.在面向对象方法中, ( )描述的是具有相似属性与操作的一组对象。A) 属性 B) 事件 C) 方法 D) 类(分数:2.00)A.B.C.D. 解析:解析 类(class)描述的是具有相似属性与操作的一组
29、对象,而一个具体对象则是其对应类的一个实例。10.在数据库设计中,将 E-R图转换成关系数据模型的过程属于( )。A需求分析阶段 B概念没计阶段C逻辑设计阶段 D物理设计阶段(分数:1.00)A.B.C. D.解析:解析 数据库的设计阶段包括需求分析、概念设计、逻辑设计和物理设计,其中将 E-R图转换成关系数据模型的过程属于逻辑设计阶段。11.下列叙述中,正确的是A) 用 E-R图能够表示实体集间一对一的联系、一对多的联系和多对多的联系B) 用 E-R图只能表示实体集之间一对一的联系C) 用 E-R图只能表示实体集之间一对多的联系D) 用 E-R图表示的概念数据模型只能转换为关系数据模型(分数
30、:2.00)A. B.C.D.解析:解析 两个实体之间的联系实际上是实体集间的函数关系,这种函数关系可以有下面几种,即一对一的联系、一对多(或多对一)的联系和多对多的联系;概念模型便于向各种模型转换。由于概念模型不依赖于具体的数据库管理系统,因此,容易向关系模型、网状模型和层次模型等各种模型转换。12.有三个关系 R、S 和 T如下:(分数:2.00)A.B.C.D. 解析:解析 在关系运算中,交的定义如下:设 R1和 R2为参加运算的两个关系,它们具有相同的度/1,且相对应的属性值取自同一个域,则 R1R2 为交运算,结果仍为度等于 n的关系,其中,交运算的结果既属于 R1,又属于 R2。1
31、3.用树形结构表示实体之间联系的模型是_。A) 关系模型 B) 网状模型 C) 层次模型 D) 以上三个都是(分数:1.00)A.B.C. D.解析:解析 用树形结构表示实体之间联系的模型是层次模型。14.C语言的基本单位是( )。A) 函数 B) 过程 C) 子程序 D) 子函数(分数:1.00)A. B.C.D.解析:解析 C 语言是函数式的语言,它的基本组成单位是函数,在 C语言中任何程序都是由一个或者多个函数组成的。15.以下选项中不属于字符常量的是_。A) C B) “C“ C) /xCC D) /072(分数:2.00)A.B. C.D.解析:解析 C 语言中字符常量是用单引号括起
32、来的单个字符,因此,选项 B是错误,用双引号括起来的字符属于字符串。选项 C、选项 D分别表示十六进制、八进制格式 ASC代码值对应的字符常量。16.若有运算符:、=、%、sizeof,则它们按优先级(由高至低)的正确排列顺序为( )。A) %、sizeof、= B) sizeof、%、=、C) sizeof、%、= D) sizeof、%、=(分数:1.00)A.B.C.D. 解析:解析 主要考查运算符的优先级。sizeof 的优先级最高。后面的顺序是:%、,优先级最低的是“=”。17.下列程序的输出结果是main()double d=3.2;int x,y;x=1.2;y=(x+3.8)/
33、5.0;printf(“%d/n“,d*y);A) 3 B) 3.2 C) 0 D) 3.07(分数:1.00)A.B.C. D.解析:命题目的 考查复合的赋值表达式。解题要点 本题中,程序先执行语句 x=1.2;,根据赋值运算的类型转换规则,先将 double型的常量1.2转换为 int型,即取整为 1,然后将 1赋值给变量 x。接下来执行语句 y=(x+3.8)/5.0;根据运算符的优先级,先计算小括号内,再计算除法,最后执行赋值运算。小括号内的运算过程:先将整型变量 x 的值 1转换为 double型 1.0,然后与 3.8进行加法运算,得到中间结果 4.8。接着进行除法运算 4.8/5
34、.0,其结果小于 1.0,这里没有必要计算出精确值,因为接着进行赋值运算,赋值号左边变量 y的类型为整型,于是对这个小于 1.0的中间结果进行取整,结果为 0,于是变量 y的值为 0,d*y 的值也为 0。考点链接 格式输出语句 printf的使用。18.若有说明:int *p,m=5,n;,则以下程序段中正确的是A) p=printf(“ % d/n“, (x, y);则以下叙述中正确的是_。A) 输出语句中格式说明符的个数少于输出项的个数,不能正确输出B) 运行时产生出错信息C) 输出值为 2002D) 输出值为 2003(分数:1.00)A.B.C.D. 解析:解析 printf 函数的
35、输出项(x,y)是逗号表达式,因此 y的值是整个表达式的值,故输出值为2003。20.当把以下 4个表达式用作 if语句的控制表达式时,有一个选项与其他 3个选项含义不同,这个选项是 _。A) k%2 B) k%2=1 C) (k%2)!=0 D) !k2=1(分数:2.00)A.B.C.D. 解析:解析 A、B、C 作为 if语句的条件时均表示 k不能被 2整除的情况时为真,但是 D表示 k为 0时为真。21.下列程序的运行结果是#include“stdio.h“main()intx=-9,y=5,z=8;if(xy)if(y0)z=0;else z+=1;printf(“%d/n“,z);
36、A) 6 B) 7 C) 8 D) 9(分数:1.00)A.B.C.D. 解析:解析 ifelse 语句的执行过程如下,首先计算 if后面一对圆括号内表达式的值,若表达式的值为非 0,执行 if子句,然后跳过 else子句,去执行 if语句后的下一条语句;若表达式的值为 0,跳过if子句,去执行 else子句,接着去执行 if语句后的下一条语句。C 语言的语法规定,else 子句总是与前面最近的不带 else的 if匹配,与书写格式无关,本题目的后一个 if-else相当于嵌套在第一个 if子句里,相当于 xy main()int a10=1,2,3,4,5,6,7,8,9,10;sum(a2
37、);printf(“%d/n“, a2);程序运行后的输出结果是_。(A) 6(B) 7(C) 5(D) 8(分数:2.00)A. B.C.D.解析:28.以下程序的输出结果是_。int f()static int i=0;int s=1;s+=i; i+;return s;main()int i, a=0;for(i=0; i5; i+)a+=f();printf(“% d/n“, a);A) 20 B) 24 C) 25 D) 15(分数:2.00)A.B.C.D. 解析:解析 函数 f中变量 i为静态变量,函数 f调用结束后变量 i所占据的存储单元不会释放,而在主函数中 f被调用 5次,
38、具体过程如下:第 1次调用 f:s=s+i=1+0=1,i=i+1=1,主函数中 a=a+f()=0+1=1第 2次调用 f:s=s+i=1+1=2,i=i+1=2,主函数中 a=a+f()=1+2=3第 3次调用 f:s=s+i=1+2=3,i=i+1=3,主函数中 a=a+f()=3+3=6第 4次调用 f:s=s+i=1+3=4,i=i+1=4,主函数中 a=a+f()=6+4=10第 5次调用 f:s=s+i=1+4=5,i=i+4=5,主函数中 a=a+f()=10+5=15所以 printf语句的输出结果为 15。29.以下叙述正确的是( )。 A) 只能在循环体内和 switch
39、语句体内使用 break语句 B) contiune语句的作用是结束整个循环的执行 C) 在循环体内使用 break语句或 continue语句的作用相同 D) 从多层循环嵌套中退出时,只能使用 goto语句(分数:2.00)A. B.C.D.解析:解析 本题考查循环的 4个知识点:break 语句可以出现在循环体内及 switch语句体内,不能用于其他的语句;continue 语句的作用是结束本次循环,即跳过循环体中下面尚未执行的语句,而接着转去判定循环条件是否成立,从而确定下一次循环是否继续执行,也就是说执行 contitme语句不会使整个循环终止;在循环体内使用 break语句会使循环提
40、前终止;从多层循环嵌套中退出时,可以使用goto语句或者 break语句。30.以下程序调用 scanf函数给变量 a输入数值的方法是错误的,其错误原因是( )。#include stdio.hmain()int *p,*q,a,b;p=printf(“input a:“);scanf(“%d“,*p);A) *p表示的是指针变量 p的地址B) *p表示的是变量 a的值,而不是变量 a的地址C) *p表示的是指针变量 p的值D) *p只能用来说明 p是一个指针变量(分数:1.00)A.B. C.D.解析:解析 本题经过定义语句和赋值后,p 表示的是变量 a的地址,*p 表示的是变量 a的值。3
41、1.有下列程序:#includestdio.hmain()char*a=“abcd“,“ef“,“gh“,“ijk“;int i;for(i=0;i4;i+)printf(“%c“,*ai);程序运行后的输出结果是( )。Aaegi Bdfhk Cabcd Dabcdefghijk(分数:1.00)A. B.C.D.解析:解析 *a表示一个字符串数组,for 循环的作用是输出字符串数组中每一个字符串的第一个字符。所以正确答案为选项 A。32.以下合法的字符型常量是A) /x13 B) /081 C) 65 D) “/n/(分数:2.00)A. B.C.D.解析:解析 C 语言的字符常量是用单引
42、号(即撇号)括起来的一个字符。除此之外,在 C语言中还允许用一个“/”开头的字符序列来表示字符常量。其中,形式“/ddd“表示 1 到 3位 8进制数所代表的字符;形式“/xhh“表示 1到 2位 16进制数所代表的字符。在本题中,/x13表示回车符,是一个字符常量;/081用 8进制数所代表的字符,但形式不正确,因为 8进制数所代表的字符中不会出现数字“8”;5不是一个字符,而是一个十进制数字;/n是用双引号括起来的一个字符,表示一个字符串,而不是字符常量。33.以下程序运行后的输出结果是#include stdio.hint fun(int(*s)4,int n,int k)int m,i
43、;m=s0k;for(i=1;in;i+) if(sikm)m=sik;return m;main( )int a44=1,2,3,4,11,12,13,14,21,22,23,24,31,32,33,34 ;prinff(“%d/n“,fun(a,4,0);A) 4 B) 34 C) 31 D) 32(分数:2.00)A.B.C. D.解析:解析 首先要求正确地给二维数组 x赋值;fun 函数功能是求出二维数组下标为 k列(k=0)的最大值。因此,输出结果为 31。34.下面结构体的定义语句中,错误的是A) struct ord int x;int y;int z;struct ord a;
44、B) struct ord int x;int y;int z;struct ord a;C) struct ord int x;int y;int z;a;D) struct int x;int y;int z;)a;(分数:2.00)A.B. C.D.解析:解析 定义结构体变量有三种方式:先声明结构体类型,再定义变量名,如选项 A)所示;在声明类型的同时定义变量,如选项 C)所示;直接定义结构体类型变量,如选项 D)所示。35.定义结构体数组:struct stuint num;char name20;x5=1,“LI“,2,“ZHAO“,3,“WANG“,4,“ZHANG“,5,“LIU
45、“;for(i=1;i5;i+)printf(“%d%c“,xi.num,xi.name2;以上程序段的输出结果为( )。A) 2A3N4A5U B) 112A3H41 C) 1A2N3A4U D) 2H3A4H51(分数:1.00)A. B.C.D.解析:解析 本题主要考查结构体数组的使用。xi.num 为结构体 xi中的 num成员,xi.name2是结构体 xi中 name成员的第 3个元素。程序执行循环过程时:第 1次循环,i=1,输出 x1.num,x1.name2的值,即 2A;第 2次循环,i=2,输出 x2.num,x2.name2的值,即 3N;第 3次循环,i=3,输出 x
46、3.num,x3.name2的值,即 4A;第 4次循环,i=4,输出 x4.num,x4.name2的值,即5U。36.若有以下程序段int r=8;printf(“%d/n“,r1);输出结果是A) 16 B) 8 C) 4 D) 2(分数:2.00)A.B.C. D.解析:解析 8 用二进制表示为 1000,右移 1位后为 0100,即十进制 4。37.有以下程序int fun(int x,int n)static int sum=0,i;for(i=0;in;i+)sum+=xi;return sum;main()int a=1,2,3,4,5,b=6,7,8,9,s=0;s=fun(
47、a,5)+fun(b,4);printf(“%d/n“,s);程序执行后的输出结果是A) 45 B) 50 C) 60 D) 55(分数:2.00)A.B.C. D.解析:解析 内部静态变量是始终存在的,当函数被调用退出后,内部静态变量会保存数据,再次调用该函数时,以前调用时的数值仍然保留着。fun(a,5)的值是 15,再次调用后 sum=15,所以 Fun(b,4)=45,s=45+15=60。38.以下程序的运行结果是( )。#include stdiohmain()st,uct dateint year,month,day;today;printf(“%d/n“,sizeof(struct date);A) 6 B) 8 C) 10 D) 12(分数:1.00)A. B.C.D.解