1、二级 C 语言笔试-390 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:40.00)1.用链表表示线性表的优点是( )。A) 便于插入和删除操作 B) 数据元素的物理顺序与逻辑顺序相同C) 花费的存储空间较顺序存储少 D) 便于随机存取(分数:1.00)A.B.C.D.2.下列数据结构中,按“先进后出”原则组织数据的是( )。A) 线性链表 B) 栈 C) 循环链表 D) 顺序表(分数:1.00)A.B.C.D.3.假定已建立以下链表结构,且指针 p 和 q 已指向如下图所示的结点:(分数:1.00)A.B.C.D.4.结构化程序设计方法的 3 种基本
2、控制结构中不包括( )。A) 循环结构 B) 递归结构 C) 顺序结构 D) 选择结构(分数:1.00)A.B.C.D.5.下面概念中,不属于面向对象方法的是( )。A) 对象 B) 继承 C) 类 D) 过程调用(分数:1.00)A.B.C.D.6.下列叙述中正确的是( )。A) 软件交付使用后还需要进行维护B) 软件一旦交付使用就不需要再进行维护C) 软件交付使用后其生命周期就结束D) 软件维护是指修复程序中被破坏的指令(分数:1.00)A.B.C.D.7.数据流程图(DFD)是( )。A) 软件概要设计的工具 B) 软件详细设计的工具C) 结构化方法的需求分析工具 D) 面向对象方法的需
3、求分析工具(分数:1.00)A.B.C.D.8.数据独立性是数据库技术的重要特点之一。所谓数据独立性是指( )。A) 数据与程序独立存放B) 不同的数据被存放在不同的文件中C) 不同的数据只能被对应的应用程序所使用D) 以上三种说法都不对(分数:1.00)A.B.C.D.9.设有部门和职员两个实体,每个职员只能属于一个部门,一个部门可以有多名职员,则部门与职员实体之间的联系类型是( )。A) m:n B) 1:m C) m:k D) 1:1(分数:1.00)A.B.C.D.10.在 E-R 图中,用来表示实体的图形是( )。A) 矩形 B) 椭圆形 C) 菱形 D) 三角形(分数:1.00)A
4、.B.C.D.11.算法具有五个特性,以下选项中不属于算法特性的是( )。A) 有穷性 B) 简洁性 C) 可行性 D) 确定性(分数:1.00)A.B.C.D.12.以下叙述中正确的是( )。A) C 程序中的注释只能出现在程序的开始位置和语句的后面B) C 程序书写格式严格,要求一行内只能写一个语句C) C 程序书写格式自由,一个语句可以写在多行上D) 用 C 语言编写的程序只能放在一个程序文件中(分数:1.00)A.B.C.D.13.有以下程序段:int j; float y; char name50; scanf(“%2d%f%s“, j, y, name); 当执行上述程序段,从键盘
5、上输入 55566 7777123 后,y 的值为( )。A) 5 B) 566.0 C) 7777.0 D) 566777.0(分数:1.00)A.B.C.D.14.现有格式化输入语句,scanf(“x=%d, sum y=%d, line z=%dL“, x, y, z); ,已知在输入数据后,x、y、z 的值分别是 12、34、45,则下列选项中是正确的输入格式的是( )。A) 12, 34, 45Enter B) x=12, y=34, z=45EnterC) x=12, sumy=34, z=45Enter D) x=12, sum y=34, line z=45Enter(分数:1
6、.00)A.B.C.D.15.以下程序段中与语句 k=ab?(bc?1:0):0;功能等价的是( )。A) if(ab) (bc)k=1; else k=0; B) if(ab) |(bc) k=1; else k=0; C) if(a=b) k=0; else if(b=c)k=1; D) if(ab) k=1; else if(bc)k=1; else k=0;(分数:1.00)A.B.C.D.16.设变量 a、b、c、d 和 y 都已正确定义并赋值。若有以下 if 语句:if(ab) if(c=d) y=0; else y=1; 该语句所表示的含义是( )。A) y=0 ab 且 c=d
7、1 abB) y=0 ab 且 c=d1 ab 且 cdC) y=0 ab 且 c=d1 ab 且 cdD) y=0 ab 且 c=d1 cd(分数:1.00)A.B.C.D.17.有以下程序:#includestdio.hmain() int k=5; while(-k) printf(“%d“,k-=3); printf(“/n“); 执行后的输出结果是( )。A) 1 B) 2 C) 4 D) 死循环(分数:1.00)A.B.C.D.18.若变量已正确定义,要求程序段完成求 5!的计算,不能完成此操作的程序段是( )。A) for(i=1, p=1; i=5; i+) p*=i; B)
8、for(i=1; i=5; i+) p=1; p*=i; C) i=1; p=1; while(i=5) p*=i; i+; D) i=1; p=1; dop*=i; i+; while(i=5)(分数:1.00)A.B.C.D.19.以下合法的字符型常量是( )。A) /x13 B) /081 C) 65 D) “/n/(分数:1.00)A.B.C.D.20.有以下程序:#includestdio.hmain() char c1, c2, c3, c4, c5, c6; scanf(“%c% c%c%c“, c1, c2, c3, c4); c5=getchar(); c6=getchar(
9、); putchar(c1); putchar(c2); printf(“%c%c/n“, c5, c6); 程序运行后,若从键盘输入(从第 1 列开始) 123回车45678回车则输出结果是( )。A) 1267 B) 1256 C) 1278 D) 1245(分数:1.00)A.B.C.D.21.下列叙述中错误的是( )。A) 一个 C 语言程序只能实现一种算法B) C 程序可以由多个程序文件组成C) C 程序可以由一个或多个函数组成D) 一个 C 函数可以单独作为一个 C 程序文件存在(分数:1.00)A.B.C.D.22.有以下程序:#includestdio.hint f1(int
10、x, int y) return xy?x:y; int f2(int x, int y) return xy?y:x; main() int a=4, b=3, c=5, d=2, e, f, g; e=f2(f1(a, b), f1(c, d) ); f=f1(f2(a, b), f2(c, d) ); g=a+b+c+d-e-f; printf(“%d, %d, %d/n“, e, f, g); 程序运行后的输出结果是( )。A) 4, 3, 7 B) 3, 4, 7 C) 5, 2, 7 D) 2, 5, 7(分数:1.00)A.B.C.D.23.以下程序执行后 x 的值是( )。#i
11、ncludestdio.hmain() int x, y=252, i=386, *m=y, *z=i; x=(z=m); printf(“%d“, x); A) 252 B) 1 C) 0 D) 运行时出错,x 无定值(分数:1.00)A.B.C.D.24.有以下函数:int aaa(char *s) char *t=s; while(*t+); t-; return(t-s); 以下关于 aaa 函数的功能的叙述正确的是( )。A) 求字符串 s 的长度 B) 比较两个串的大小C) 将串 s 复制到串 t D) 求字符串 s 所占字节数(分数:1.00)A.B.C.D.25.有以下程序:#
12、includestdio.hvoid sum(int *a) a0=a1; main() int aa10=(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, i; for(1=2; i=0; i-)sum(aai); printf(“%d/n“, aa0); 执行后的输出结果是( )。A) 4 B) 3 C) 2 D) 1(分数:1.00)A.B.C.D.26.下面程序中有错误的行是(每行程序前面的数字表示行号) ( )。1 main() 2 3 int a3=1; 4 int i; 5 scanf(“%d“,a); 6 for(i=1; i3; i+) a0=a0+ai; 7
13、printf(“a0=%d/n“, a0); 8 A) 3 B) 6 C) 7 D) 5(分数:1.00)A.B.C.D.27.下列选项中错误的说明语句是( )。A) char a=t, o, y, o, u; B) char a=“; toyou/0“; C) char a=“toyou/0“; D) char a=toyou/0;(分数:1.00)A.B.C.D.28.有如下程序:#includestdio.hmain() char ch25= “6937“, “ 8254“), *p2; int i, j, s=0; for(i=0; i2; i+) pi=chi; for(i=0; i
14、2; i+) for(j=0; pij/0; j+=2) s=10*s+pij-0; printf(“%d/n“, s); 该程序的输出结果是( )。A) 69862358 B) 5825 C) 6385 D) 693825(分数:1.00)A.B.C.D.29.有以下程序:#includestdio.hvoid swap1(int c) int t; t=c0; c0=c1; c1=t; void swap2(int c0, int c1) int t; t=c0; c0=c1; c1=t; main() int a2=3, 5, b2=3, 5; swap1(a); swap2(b0, b
15、1); printf(“%d %d %d %d/n“, a0, a1, b0, b1); 程序运行后的输出结果是( )。A) 5353 B) 5335 C) 3535 D) 3553(分数:1.00)A.B.C.D.30.有以下程序:#includestdio.hmain() char s=“aeiou“), *ps; ps=s; printf(“%c/n“, *ps+4); 程序运行后的输出结果是( )。A) a B) e C) u D) 元素 s4的地址(分数:1.00)A.B.C.D.31.有以下程序:#includestdio.hvoid swap(char *x, char *y)
16、char t; t=*x; *x=*y; *y=t; main() char *s1=“abc“, *s2=“123“; swap(s1, s2); printf(“%s, %s/n“, s1, s2); 程序执行后的输出结果是( )。A) abc, 123 B) 123, abc C) 1bc, a23 D) 321, cba(分数:1.00)A.B.C.D.32.下列程序的运行结果为( )。#includestdio.hvoid fun(char *str) int a, b; for(a=b=0; stra!=/0; a+) if(stra!=c) strb+=stra; strb=/0
17、; void main() char str=“abcdef“; fun(str); printf(“str=%s“, str); A) str=abdef B) str=abcdef C) str=a D) str=ab(分数:1.00)A.B.C.D.33.有以下程序:#include stdio.hint f(int x) inty; if(x=0 | x=1) return(3); y=x*x-f(x-2); return y; main() int z; z=f(3); printf(“%d/n“, z); 程序的运行结果是( )。A) 0 B) 9 C) 6 D) 8(分数:1.0
18、0)A.B.C.D.34.以下程序的输出结果是( )。#includestdio.hint 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(分数:1.00)A.B.C.D.35.有以下程序:#include stdio.h#define N 5#define M N+1#define f(x)(x*M) main() int i1, i2; i1=f(2); i2=f(1+
19、1); printf(“%d%d/n“, i1, i2); 程序的运行结果是( )。A) 12 12 B) 11 7 C) 11 11 D) 12 7(分数:1.00)A.B.C.D.36.若有以下的说明,对初值中整数 2 的正确引用方式是( )。static structchar ch; int i; double x:a23=a, 1, 3.45), b, 2, 7.98, c, 31, 93; A) a01.ch B) a01.i C) a00.i D) a02.i(分数:1.00)A.B.C.D.37.有以下程序段:struct stint x; int *y; ) *pt; int
20、a=1, 2), b=3, 4); struct st c2=10, a, 20, b; pt=c; 以下选项中表达式的值为 11 的是( )。A) *pt-y B) pt-x C) +pt-x D) (pt+) -x(分数:1.00)A.B.C.D.38.有以下程序:struct sint x, y; data2=10, 100, 20, 200; main() struct s *p=data; printf(“%d/n“, +(p-x); 程序运行后的输出结果是( )。A) 10 B) 11 C) 20 D) 21(分数:1.00)A.B.C.D.39.在位运算中,操作数每右移一位,其结
21、果相当于( ) A) 操作数乘以 2 B) 操作数除以 2C) 操作数除以 16 D) 操作数乘以 16(分数:1.00)A.B.C.D.40.若 fp 是指向某文件的指针,且已读到文件末尾,则表达式 feof(fp)的返回值是( )。A) EOF B) -1 C) 非零值 D) NULL(分数:1.00)A.B.C.D.二、程序填空题(总题数:1,分数:18.00)下列给定程序中,函数 fun 的功能是:在形参 ss 所指字符串数组中查找与形参 t 所指字符串相同的串,找到后返回该串在字符串数组中的位置(即下标值),若未找到则返回-1。ss 所指字符串数组中共有 N 个内容不同的字符串,且串
22、长小于 M。请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include stdio.h#include string.h#define N 5#define M 8int fun(char (*ss)M, char *t)int i; /*found*/for(i=0; i (1) ; i+)/*found*/if(strcmp(ssi, t)=0)return (2) ; return(-1); main()char chNM(“if“, “while“, “switch“, “int“, “fo
23、r“, tM; int n, i; printf(“/nThe original string/n/n“); for(i=0; iN; i+)puts(chi); printf(“/n“); printf(“/nEnter a string for search:“); gets(t); n=fun(ch, t); /*found*/if(n= (3) )printf(“/nDont found!/n“); elseprintf(“/nThe position is %d./n“, n); (分数:18.00)填空项 1:_填空项 1:_填空项 1:_三、程序改错题(总题数:1,分数:18.0
24、0)41.下列给定程序中函数 fun 的功能是:从整数 155,查找能被 3 整除且有一位上的数值是 5 的数,把这些数放在 b 所指的数组中,这些数的个数作为函数值返回。规定函数中 a1 放个位数,a2 放十位数。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 mam 函数,不得增行或删行,也不得更改程序的结构!试题程序:#include stdio.hint fun(int *b)int k, a1, a2, i=0; for(k=10; k=55; k+)/*found*/a2=k/10; a1=k-a2*10; if(k%3=0 a2=5)|(k%3=0a1=5)bi=k;
25、i+; /*found*/return k; main()int a100, k, m; m=fun(a); printf(“The result is:/n“); for(k=0; km; k+)printf(“%4d“, ak); printf(“/n“); (分数:18.00)_四、程序设计题(总题数:1,分数:24.00)42.规定输入的字符串中只包含字母和*号。请编写函数 fun,其功能是:将字符串尾部的*号全部删除,前面和中间的*号不动。注意:部分源程序给出如下。请勿改动主函数 mam 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。试题程序:#inclu
26、de stdio.h#include conio.hvoid fun (char *a)void main()char s81; printf(“Enter a string:/n“); gets(s); fun(s); printf(“The string after deleted:/n“); puts(s); (分数:24.00)_二级 C 语言笔试-390 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:40.00)1.用链表表示线性表的优点是( )。A) 便于插入和删除操作 B) 数据元素的物理顺序与逻辑顺序相同C) 花费的存储空间较顺序存储少 D
27、) 便于随机存取(分数:1.00)A. B.C.D.解析:解析 链式存储结构克服了顺序存储结构的缺点:它的结点空间可以动态申请和释放;它的数据元素的逻辑次序靠结点的指针来指示,不需要移动数据元素。故链式存储结构下的线性表便于插入和删除操作。本题答案为 A)。2.下列数据结构中,按“先进后出”原则组织数据的是( )。A) 线性链表 B) 栈 C) 循环链表 D) 顺序表(分数:1.00)A.B. C.D.解析:解析 本题主要考查对栈的理解。栈是限定在一端进行插入与删除的线性表。在栈中,允许插入与删除的一端称为栈顶,而不允许插入与删除的另一端称为栈底。栈顶元素总是最后被插入的元素,从而也是最先能被
28、删除的元素;栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素,即栈是按照“先进后出”或“后进先出”的原则组织数据的。3.假定已建立以下链表结构,且指针 p 和 q 已指向如下图所示的结点:(分数:1.00)A.B.C.D. 解析:解析 本题考查的是在链表中删除结点的操作。在本题中,指针 p 指向结点 a,q 指向结点 b。要把结点 b 删除,就应该首先让结点 a 的指针域指向结点 c,即 pnext=qnext,也可以写成(*p).next=(*q).next,然后释放结点 b,即 free(q)。所以,4 个选项中,只有 D)满足题意。4.结构化程序设计方法的 3 种基本控制结构中
29、不包括( )。A) 循环结构 B) 递归结构 C) 顺序结构 D) 选择结构(分数:1.00)A.B. C.D.解析:解析 本题考查了程序的基本结构。程序由一些基本结构组成。任何一个大型的程序都由 3 种基本结构组成,由这些基本结构顺序构成一个结构化的程序。这 3 种基本结构为:顺序结构、选择结构和循环结构。5.下面概念中,不属于面向对象方法的是( )。A) 对象 B) 继承 C) 类 D) 过程调用(分数:1.00)A.B.C.D. 解析:解析 面向对象方法是一种运用对象、类、封装、继承、多态和消息等概念来构造、测试、重构软件的方法。面向对象方法从对象出发,发展出对象、类、消息、继承等概念。
30、6.下列叙述中正确的是( )。A) 软件交付使用后还需要进行维护B) 软件一旦交付使用就不需要再进行维护C) 软件交付使用后其生命周期就结束D) 软件维护是指修复程序中被破坏的指令(分数:1.00)A. B.C.D.解析:解析 本题考核软件维护的概念。维护是软件生命周期的最后一个阶段,也是持续时间最长、付出代价最大的阶段。在软件交付使用后,还需要进行维护。软件维护通常有以下四类:为纠正使用中出现的错误而进行的改正性维护;为适应环境变化而进行的适应性维护;为改进原有软件而进行的完善性维护;为将来的可维护和可靠而进行的预防性维护。软件维护不仅包括程序代码的维护,还包括文档的维护。综上所述,本题的正
31、确答案是选项 A),其余选项的说法错误。7.数据流程图(DFD)是( )。A) 软件概要设计的工具 B) 软件详细设计的工具C) 结构化方法的需求分析工具 D) 面向对象方法的需求分析工具(分数:1.00)A.B.C. D.解析:解析 常见的需求分析方法有:结构化分析方法和面向对象的分析方法。结构化分析就是使用数据流图(DFD)、数据字典(DD)、结构化英语、判定表和判定树等工具,来建立一种新的、称为结构化规格说明的目标文档。8.数据独立性是数据库技术的重要特点之一。所谓数据独立性是指( )。A) 数据与程序独立存放B) 不同的数据被存放在不同的文件中C) 不同的数据只能被对应的应用程序所使用
32、D) 以上三种说法都不对(分数:1.00)A.B.C.D. 解析:解析 数据具有两方面的独立性:一是物理独立性,即由于数据的存储结构与逻辑结构之间由系统提供映象,使得当数据的存储结构改变时,其逻辑结构可以不变,因此,基于逻辑结构的应用程序不必修改;二是逻辑独立性,即由于数据的局部逻辑结构(它是总体逻辑结构的一个子集,由具体的应用程序所确定,并且根据具体的需要可以作一定的修改)与总体逻辑结构之间也由系统提供映象,使得当总体逻辑结构改变时,其局部逻辑结构可以不变,从而根据局部逻辑结构编写的应用程序也可以不必修改。综上所述,本题的正确答案是 D)。9.设有部门和职员两个实体,每个职员只能属于一个部门
33、,一个部门可以有多名职员,则部门与职员实体之间的联系类型是( )。A) m:n B) 1:m C) m:k D) 1:1(分数:1.00)A.B. C.D.解析:解析 实体之间的联系类型主要有一对一、一对多、多对多,由题意可知,部门与职员之间的联系类型是一对多(1:m),所以本题应选 B)。10.在 E-R 图中,用来表示实体的图形是( )。A) 矩形 B) 椭圆形 C) 菱形 D) 三角形(分数:1.00)A. B.C.D.解析:解析 在 E-R 图中,用矩形框表示实体,框内标明实体名;用椭圆状框表示实体的属性,框内标明属性名;用菱形框表示实体间的联系,框内标明联系名。11.算法具有五个特性
34、,以下选项中不属于算法特性的是( )。A) 有穷性 B) 简洁性 C) 可行性 D) 确定性(分数:1.00)A.B. C.D.解析:解析 本题考查的是算法的特性。一个算法应当具有以下 5 个特性:有穷性;确定性;可行性;有零个或多个输入;有一个或多个输出。简洁性不属于这 5 个特性,所以本题应该选择 B)。12.以下叙述中正确的是( )。A) C 程序中的注释只能出现在程序的开始位置和语句的后面B) C 程序书写格式严格,要求一行内只能写一个语句C) C 程序书写格式自由,一个语句可以写在多行上D) 用 C 语言编写的程序只能放在一个程序文件中(分数:1.00)A.B.C. D.解析:解析
35、本题主要考查的是 C 语言程序的书写格式。C 程序中的注释是用/*和*/括起来的部分,可以出现在程序的任何地方,所以选项 A)不正确。C 程序的书写格式很自由,一个语句可以写在多行上,多个语句也可以写在一行上,所以选项 B)不正确。用 C 语言编写的程序可以放在多个程序文件中,它们之间可以通过#include 命令行来进行关联,所以选项 D)也不正确。故本题应该选择 C)。13.有以下程序段:int j; float y; char name50; scanf(“%2d%f%s“, j, y, name); 当执行上述程序段,从键盘上输入 55566 7777123 后,y 的值为( )。A)
36、 5 B) 566.0 C) 7777.0 D) 566777.0(分数:1.00)A.B. C.D.解析:解析 本题考查通过 scanf 函数输入数据时的格式控制问题。变量 i 的格式控制为“%2d”,即只接收输入数据的前两位,从第三位开始直到空格之间的输入都会被保存到变量 y 中,因为 y 为浮点型数据,所以输出结果为选项 B)。14.现有格式化输入语句,scanf(“x=%d, sum y=%d, line z=%dL“, x, y, z); ,已知在输入数据后,x、y、z 的值分别是 12、34、45,则下列选项中是正确的输入格式的是( )。A) 12, 34, 45Enter B)
37、x=12, y=34, z=45EnterC) x=12, sumy=34, z=45Enter D) x=12, sum y=34, line z=45Enter(分数:1.00)A.B.C.D. 解析:解析 若在 scanf 的格式化控制串中插入了其他字符,则在输入时要求按一一对应的位置原样输入这些字符。格式化输入函数必须严格按照双引号里面的格式进行输入。在格式化输出函数中,格式控制串中除了合法的格式说明外,可以包含任意的合法字符。15.以下程序段中与语句 k=ab?(bc?1:0):0;功能等价的是( )。A) if(ab) (bc)k=1; else k=0; B) if(ab) |(
38、bc) k=1; else k=0; C) if(a=b) k=0; else if(b=c)k=1; D) if(ab) k=1; else if(bc)k=1; else k=0;(分数:1.00)A. B.C.D.解析:解析 本题考核的知识点是三目运算符“?:”的运用。三目运算表达式的规则为如果“?”前面的表达式的值为真,则取“:”前的表达式的值,否则,取“:”后面表达式的值。分析题目中给出的表达式可知,如果 ab 和 bc 同时成立,k=1,否则 k=0。所以,4 个选项中选项 A)符合题意。16.设变量 a、b、c、d 和 y 都已正确定义并赋值。若有以下 if 语句:if(ab)
39、if(c=d) y=0; else y=1; 该语句所表示的含义是( )。A) y=0 ab 且 c=d1 abB) y=0 ab 且 c=d1 ab 且 cdC) y=0 ab 且 c=d1 ab 且 cdD) y=0 ab 且 c=d1 cd(分数:1.00)A.B.C. D.解析:解析 考查 if 语句的使用。整个语句都是以 ab 为假设的,在 ab 的情况下,如果 c=d,则y=0;否则 y=1。所以答案为选项 C)。17.有以下程序:#includestdio.hmain() int k=5; while(-k) printf(“%d“,k-=3); printf(“/n“); 执行
40、后的输出结果是( )。A) 1 B) 2 C) 4 D) 死循环(分数:1.00)A. B.C.D.解析:解析 本题考查的是 while 循环和一运算符。因为在 while 循环的循环条件中,一运算符是前缀形式,所以表达式-k 的值是 k 自减之后的值。程序开始时,将 k 的值初始化为 5,然后进入 while 循环,因为-k 的值为 4(非零),所以执行循环体输出 k-=3 的值 1,此时 k 的值也变为 1。第 2 次执行循环条件,-k 的值为 0,所以循环结束。因此最后输出的结果是 1,故应该选择 A)。18.若变量已正确定义,要求程序段完成求 5!的计算,不能完成此操作的程序段是( )
41、。A) for(i=1, p=1; i=5; i+) p*=i; B) for(i=1; i=5; i+) p=1; p*=i; C) i=1; p=1; while(i=5) p*=i; i+; D) i=1; p=1; dop*=i; i+; while(i=5)(分数:1.00)A.B. C.D.解析:解析 本题考核的知识点是 C 语言在生活中的简单应用。选项 B)中 for 循环了 5 次,而每次循环的时候,都将 p 的值重新赋值为 1 后,再乘以当前数字 i,最后的结果为 5,显然不是 5!的值,同样的分析可知,选项 A)、选项 C)和选项 D)计算的都是 5!。所以,4 个选项中选
42、项 B)符合题意。19.以下合法的字符型常量是( )。A) /x13 B) /081 C) 65 D) “/n/(分数:1.00)A. B.C.D.解析:解析 C 语言的字符常量是用单引号(即撇号)括起来的一个字符。除此之外,在 C 语言中还允许用一个“/”开头的字符序列来表示字符常量。其中,形式“/ddd”表示 13 位八进制数所代表的字符;形式“/xhh”表示 12 位十六进制数所代表的字符。在本题中,/x13表示回车符,是一个字符常量;/081用八进制数所代表的字符,但形式不正确,因为八进制数所代表的字符中不会出现数字“8“;65不是一个字符,而是一个十进制数字;“/n“是用双引号括起来
43、的一个字符,表示一个字符串,而不是字符常量。20.有以下程序:#includestdio.hmain() char c1, c2, c3, c4, c5, c6; scanf(“%c% c%c%c“, c1, c2, c3, c4); c5=getchar(); c6=getchar(); putchar(c1); putchar(c2); printf(“%c%c/n“, c5, c6); 程序运行后,若从键盘输入(从第 1 列开始) 123回车45678回车则输出结果是( )。A) 1267 B) 1256 C) 1278 D) 1245(分数:1.00)A.B.C.D. 解析:解析 本题
44、考查的是输入输出函数。scanf()是格式化输入函数;getchar()函数从键盘缓冲区读入下一个字符;putchar()输出一个字符;printf()函数是格式化输出函数。在题目中,程序执行到scanf()函数时,会暂停等待用户输入 4 个字符,按题意输入 123回车后,字符 13 被分别输入到c1c3 中,而 c4 会得到一个换行符/n。然后执行第 1 个 getchar()函数,由于前面的 scanf()函数读完了缓冲区中的所有字符,所以此时程序会又暂停等待用户输入,按题意输入 45678回车后,缓冲区第一个字符 4 输入到 C5,第二个字符 5 输入到 C6,所以本题应该选择 D)。2
45、1.下列叙述中错误的是( )。A) 一个 C 语言程序只能实现一种算法B) C 程序可以由多个程序文件组成C) C 程序可以由一个或多个函数组成D) 一个 C 函数可以单独作为一个 C 程序文件存在(分数:1.00)A. B.C.D.解析:解析 一个 C 程序可以有一个或多个程序文件,也可以有一个或多个函数,所以一个 C 语言程序可以实现多种算法。22.有以下程序:#includestdio.hint f1(int x, int y) return xy?x:y; int f2(int x, int y) return xy?y:x; main() int a=4, b=3, c=5, d=2
46、, e, f, g; e=f2(f1(a, b), f1(c, d) ); f=f1(f2(a, b), f2(c, d) ); g=a+b+c+d-e-f; printf(“%d, %d, %d/n“, e, f, g); 程序运行后的输出结果是( )。A) 4, 3, 7 B) 3, 4, 7 C) 5, 2, 7 D) 2, 5, 7(分数:1.00)A. B.C.D.解析:解析 本题考查的是函数的综合应用。程序开头定义了两个函数 f1()、f2(),每个函数都只有一条语句,在 f1()中是“如果 xy 则返回 x 否则返回 y”,即返回两个参数中较大的那一个,f2()则正好相反,返回较小的。主函数的语句 e=f2(f1(a, b), f1(c, d); 是使用两次调用 f1()函数的返回值作为f2()函数的参数,并将 f2()的返回值赋给变量 e。a、b 中较大的数是 a,为 4;c、d 中较大的数是,c 为5。4 和 5 中较小的数是 4,所以结果 e=4。同理可以推出 f=3,那么 g=a+b+c+d-e-f=4+3+5+2-4-3=7。故本题应该选择 A)。23.以下程序执行后 x 的值是( )。#includestdio.hmain() int x, y=252, i=386, *m=y, *z=i; x=(z=m); printf(“%d“,