1、二级 C 语言笔试-391 及答案解析(总分: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.栈和队列的共同特点是( )。A) 都是先进先出 B) 都是先进后出C) 只允许在端点处插入和删除元素 D) 没有共
2、同点(分数:1.00)A.B.C.D.4.以下叙述中,不属于面向对象方法的优点的是( ) A) 可重用性好 B) 与人类习惯的思维方法一致C) 可维护性好 D) 有助于实现自顶向下、逐步求精(分数:1.00)A.B.C.D.5.下列叙述中正确的是( )。A) 在面向对象的程序设计中,各个对象之间具有密切的联系B) 在面向对象的程序设计中,各个对象都是公用的C) 在面向对象的程序设计中,各个对象之间相对独立,相互依赖性小D) 上述三种说法都不对(分数:1.00)A.B.C.D.6.下列不属于软件工程的 3 个要素的是( )。A) 工具 B) 过程 C) 方法 D) 环境(分数:1.00)A.B.
3、C.D.7.软件调试的目的是( )。A) 发现错误 B) 改正错误C) 改善软件的性能 D) 验证软件的正确性(分数:1.00)A.B.C.D.8.在数据管理技术的发展过程中,可实现数据共享的是( )。A) 人工管理阶段 B) 文件系统阶段C) 数据库系统阶段 D) 系统管理阶段(分数:1.00)A.B.C.D.9.对于现实世界中事物的特征,在实体联系模型中使用( )。A) 属性描述 B) 关键字描述 C) 二维表格描述 D) 实体描述(分数:1.00)A.B.C.D.10.使用视图之前,应首先( )。A) 新建一个数据库 B) 新建一个数据库表C) 打开相关的数据库 D) 打开相关的数据表(
4、分数:1.00)A.B.C.D.11.以下叙述中错误的是( )。A) 计算机不能直接执行用 C 语言编写的源程序B) C 程序经 C 编译程序编译后,生成后缀为.obj 的文件是一个二进制文件C) 后缀为.obj 的文件,经连接程序生成后缀为.exe 的文件是一个二进制文件D) 后缀为.obj 和.exe 的二进制文件都可以直接运行(分数:1.00)A.B.C.D.12.以下叙述中正确的是( )。A) 用 C 程序实现的算法必须要有输入和输出操作B) 用 C 程序实现的算法可以没有输出但必须要有输入C) 用 C 程序实现的算法可以没有输入但必须要有输出D) 用 C 程序实现的算法可以既没有输入
5、也没有输出(分数:1.00)A.B.C.D.13.有以下程序:main() int a=666, b=888; printf(“%d/n“, a, b); 程序运行后的输出结果是( )。A) 错误信息 B) 666 C) 888 D) 666, 888(分数:1.00)A.B.C.D.14.若在定义语句:int a, b, c, *p=c;之后,接着执行以下选项中的语句,则能正确执行的语句是( )。A) scanf(“%d“, a, b, c); B) scanf(“%d%d%d“, a, b, c); C) scanf(“%d“, p); D) scarff(“%d“, p);(分数:1.0
6、0)A.B.C.D.15.以下关于逻辑运算符两侧运算对象的叙述中正确的是( )。A) 只能是整数 0 或 1 B) 只能是整数 0 或非 0 整数C) 可以是结构体类型的数据 D) 可以是任意合法的表达式(分数:1.00)A.B.C.D.16.若有定义 float x=1.5; int a=1, b=3, c=2; ,则正确的 switch 语句是( )。A) switch(x) case 1.0: printf(“*/n“); case 2.0:printf(“*/n“); B) switch(int) x); case 1:printf(“*/n“); case 2:printf(“*/n
7、“); C) switch(a+b) case 1:printf(“*/n“); case 2+1:printf(“*/n “); D) switch(a+b) case 1:printf(“*/n“); case 2:printf(“*/n“);(分数:1.00)A.B.C.D.17.下列叙述中正确的是( )。A) break 语句只能用于 switch 语句B) 在 switch 语句中必须使用 defaultC) break 语句必须与 switch 语句中的 case 配对使用D) 在 switch 语句中,不一定使用 break 语句(分数:1.00)A.B.C.D.18.请阅读以下
8、程序:#includestdio.hmain() int x=1, y=0, a=0, b=0; switch(x) case 1; switch(y) case 0:a+; break; case 2:a+, b+; break; printf(“a=%d, b=%d/n“, a, b); 上面程序的输出结果是( )。A) a=2, b=1 B) a=1, b=1 C) a=1, b=0 D) a=2, b=2(分数:1.00)A.B.C.D.19.以下选项中不能作为 C 语言合法常量的是( )。A) cd B) 0.1e+6 C) “/a“ D) /011(分数:1.00)A.B.C.D.
9、20.运行下面程序时,从键盘输入字母 H,则输出结果是( )。#includestdio.h main() char ch; ch=getchar(); switch(ch) case H:printf(“Hello!/n“); case G:printf(“Good morning!/n“); default:printf(“Bye_Bye!/n“); A) Hello!B) Hello!Cood Moring!C) Hello!Good morning!Bye_Bye!D) Hello!Bye_Bye!(分数:1.00)A.B.C.D.21.设函数 fun 的定义形式为:void fun(
10、char ch, float x) 则以下对函数 fun 的调用语句中,正确的是( )。A) fun(“123“, 3.0); B) t=fun(D16.5); C) fun(65, 2.8); D) fun(32, 32);(分数:1.00)A.B.C.D.22.有以下程序:#includestdio.hchar fun(char x, char y) if(xy) return x; return y; main() int a=9, b=8, c=7; printf(“%c/n“, fun(fun(a, b), fun(b, c) ) ); 程序的执行结果是( )。A) 函数调用出错 B
11、) 8 C) 9 D) 7(分数:1.00)A.B.C.D.23.以下叙述中错误的是( )。A) 改变函数形参的值,不会改变对应实参的值B) 函数可以返回地址值C) 可以给指针变量赋一个整数作为地址值D) 当在程序的开头包含头文件 stdio.h 时,可以给指针变量赋 NULL(分数:1.00)A.B.C.D.24.有以下程序:#includestdio.hmain() int a=7, b=8, *p, *q, *r; p=a; q=b; r=p; p=q; q=r; printf(“%d, %d, %d, %d/n, *p, *q, a, b); 程序运行后的输出结果是( )。A) 8,
12、7, 8, 7 B) 7, 8, 7, 8 C) 8, 7, 7, 8 D) 7, 8, 8, 7(分数:1.00)A.B.C.D.25.有以下程序:#include stdio.hmain() int s12=1, 2, 3, 4, 4, 3, 2, 1, 1, 1, 2, 3, c5=(0), i; for(i=0; i12; i+) csi+; for(i=1; i5; i+) printf(“%d“, ci); printf(“/n“); 程序的运行结果是( )。A) 1232 B) 4344 C) 4332 D) 1123(分数:1.00)A.B.C.D.26.以下能正确定义一维数组
13、的选项是( )。A) int a5=0, 1, 2, 3, 4, 5; B) int a=0, 1, 2, 3, 4, 5; C) char a=A, B, C; D) int a5=“0123“;(分数:1.00)A.B.C.D.27.有定义语句:int b; char c10; ,则正确的输入语句是( )。A) scanf(“%d%s“, b, c); B) scanf(“%d%s“, b, c); C) scanf(“%d%s“, b, c); D) scanf(“%d%s“, b, c);(分数:1.00)A.B.C.D.28.有以下程序:#include stdio.hvoid fu
14、n(int *a, int n) /*fun 函数的功能是将 a 所指数组元素从大到小排序*/int t, i, j; for(i=0; in-1; i+) for(j=i+1; jn; j+) if(aiaj) (t=aj; ai=aj; aj=t; main() int c10=1, 2, 3, 4, 5, 6, 7, 8, 9, 0, i; fun(c+4, 6); for(i=0; i10; i+) printf(“%d, “, ci); printf(“/n“); 程序的运行结果是()。A) 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, B) 0, 9, 8, 7, 6
15、, 5, 1, 2, 3, 4, C) 0, 9, 8, 7, 6, 5, 4, 3, 2, 1, D) 1, 2, 3, 4, 9, 8, 7, 6, 5, 0,(分数:1.00)A.B.C.D.29.若有定义语句:double x5=1.0, 2.0, 3.0, 4.0, 5.0, *p=x; ,则错误引用 x 数组元素的是( )。A) *p B) x5 C) *(p+1) D) *x(分数:1.00)A.B.C.D.30.若有定义:char *st=“how are you“; ,下列程序段中正确的是( )。A) char a11, *p; strcpy(p=a+1, st4); B)
16、char a11; strcpy(+a, st); C) char a11; strcpy(a, st); D) char a, *p; strcpy(p=a1, st+2);(分数:1.00)A.B.C.D.31.s1 和 s2 已正确定义并分别指向两个字符串。若要求:当 s1 所指串大于 s2 所指串时,执行语句 S,则以下选项中正确的是( )。A) if(s1s2) S; B) if(strcmp(s1, s2) ) S; C) if(strcmp(s2, s1) 0) S; D) if(strcmp(s1, s2) 0) S;(分数:1.00)A.B.C.D.32.有以下程序:#inc
17、ludestdio.h#includestring.hmain() char p=a, b, c, q10=a, b, c; printf(“%d%d/n “, strlen(p), strlen(q) ); 以下叙述中正确的是( )。A) 在给 p 和 q 数组置初值时,系统会自动添加字符串结束符,故输出的长度都为 3B) 由于 p 数组中没有字符串结束符,长度不能确定,但 q 数组中字符串长度为 3C) 由于 q 数组中没有字符串结束符,长度不能确定,但 p 数组中字符串长度为 3D) 由于 p 和 q 数组中都没有字符串结束符,故长度都不能确定(分数:1.00)A.B.C.D.33.有以
18、下程序:#include stdio.hint f(int x) int y; 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.00)A.B.C.D.34.有以下程序:#includestdio.hint fun(int x, int n) static int sum=0, i; for(i=0; in; i+) sum+=xi; return sum; main() int a=1, 2,
19、 3, 4, 5, b=6, 7, 8, 9, s=0; s=fun(a, 5)+fun(b, 4); printf(“%d/n“, s); 程序执行后的输出结果是( )。A) 45 B) 50 C) 60 D) 55(分数:1.00)A.B.C.D.35.有以下程序:#includestdio.h#define f(x) (x*x) main() int i1, i2; i1=f(8) /f(4); i2=f(4+4) /f(2+2); printf(“%d, %d/n“, i1, i2); 程序运行后的输出结果是( )。A) 64, 28 B) 4, 4 C) 4, 3 D) 64, 64
20、(分数:1.00)A.B.C.D.36.有以下程序:#include stdio.h#include string.htypedef struct char name9; char sex; float score2; STU; void f(STU A) STU b=“Zhao“, m, 85.0, 90.0; int i; strcpy(a.name, b.name); a.sex=b.sex; for (i=0; i2; i+) a.scorei=b.scorei; main() STU c=“Qian“, f, 95, 92; f(C); printf(“%s, %c, %f, %f“
21、, c.name, c.sex, c.score0, c.score1); 程序运行后的输出结果是( )。A) Qian, f, 95.000000, 92.000000 B) Qian, m, 85.000000, 90.000000C) Zhao, f, 95.000000, 92.000000 D) Zhao, m, 85.000000, 90.000000(分数:1.00)A.B.C.D.37.现有以下结构体说明和变量定义,如下图所示,指针 p、q、r 分别指向一个链表中连续的三个结点。struct nodechar data; struct node *next, *p, *q, *
22、r; (分数:1.00)A.B.C.D.38.下列程序的输出结果为( )。#include stdio.hmain() union uchar *name; int age; int income; s; s.name=“WANGLIONG“:s.age=28; s.income=1000; printf(“% d/n“, s.age); A) 28 B) 1000 C) 0 D) 不确定(分数:1.00)A.B.C.D.39.设有以下语句:int a=1, b=2, c; c=a(b2); 执行后,c 的值为( )。A) 6 B) 7 C) 8 D) 9(分数:1.00)A.B.C.D.40
23、.对于下述程序,在方式串分别采用“wt”和“wb”运行时,两次生成的文件 TEST 的长度分别是( )。#includestdio.hvoid main() FILE *fp=fopen(“TEST“, ); fputc(A, fp); fputc(/n, fp); fpute(b, fp); fputc(/n, fp); fpute(C, fp); fclose(fp); A) 7 字节、7 字节 B) 7 字节、5 字节 C) 5 字节、7 字节 D) 5 字节、5 字节(分数:1.00)A.B.C.D.二、程序填空题(总题数:1,分数:18.00)下列给定程序中,函数 fun 的功能是:
24、把形参 a 所指数组中的奇数按原顺序依次存放到 a0、a1、a2中,把偶数从数组中删除,奇数个数通过函数值返回。请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#includestdio.h#define N 9int fun(int a, int n)int i, j; j=0; for(i=0; in; i+)/*found*/if(ai%2= (1) )/*found*/aj=ai; (2) ; /*found*/return (3) ; main()int bN=9, 1, 4, 2, 3, 6,
25、 5, 8, 7, i, n; printf(“/nThe original data:/n“); for(i=0; iN; i+)printf(“%4d“, bi); printf(“/n“); n=fun(b, N); printf(“/nThe number of odd: %d/n“, n); printf(“/nThe odd number:/n“); for(i=0; in; i+)printf(“%4d“,bi); printf(“/n“); (分数:18.00)填空项 1:_填空项 1:_填空项 1:_三、程序改错题(总题数:1,分数:18.00)41.下列给定程序中,函数 f
26、un 的功能是:求两个非零正整数的最大公约数,并作为函数值返回。请改正程序中的错误,使它能得出正确结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!试题程序:#includestdio.hint fun(int a, int b)int r, t; if(ab)t=a; b=a; a=t; /*found*/r=a%b; while(r!=0)a=b; b=r; r=a%b; /*found*/return(a); void main()int num1, num2, a; printf(“Input num1 num2:“); scanf(“%d%d“, num1,
27、 num2); printf(“num1=%d num2=%d/n/n“, num1, num2); a=fun(num1, num2); printf(“The maximun common divisor is%d/n/n“,a); (分数:18.00)_四、程序设计题(总题数:1,分数:24.00)42.规定输入的字符串中只包含字母和*号。编写函数 fun,其功能是:删除字符串中所有的*号。编写函数时,不得使用 C 语言提供的字符串函数。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。试题程序:#include
28、stdio.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 语言笔试-391 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:40.00)1.数据结构作为计算机的一门学科,主要研究数据的逻辑结构、对各种数据结构进行的运算,以及( )。A) 数据的存储结构 B) 计算方法 C) 数据映象 D) 逻辑存储(分数:1.
29、00)A. B.C.D.解析:解析 数据结构作为计算机的一门学科,主要研究和讨论以下三个方面的问题:数据集合中各数据元素之间所固有的逻辑关系,即数据的逻辑结构;在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构;对各种数据结构进行的运算。2.线性表是一个( )。A) 有限序列,可以为空 B) 有限序列,不能为空C) 无限序列,可以为空 D) 无限序列,不能为空(分数:1.00)A. B.C.D.解析:解析 如果一个非空的数据结构满足下列两个条件:第一,有且只有一个根结点;第二,每一个结点最多有一个前件,也最多有一个后件,则称该数据结构为线性结构。线性结构又称线性表。3.栈和队
30、列的共同特点是( )。A) 都是先进先出 B) 都是先进后出C) 只允许在端点处插入和删除元素 D) 没有共同点(分数:1.00)A.B.C. D.解析:解析 考查栈和队列概念的掌握。栈和队列都是一种特殊的操作受限的线性表,只允许在端点处进行插入和删除。二者的区别是:栈只允许在表的一端进行插入或删除操作,是一种“后进先出”的线性表;而队列只允许在表的一端进行插入操作,在另一端进行删除操作,是一种“先进先出”的线性表。4.以下叙述中,不属于面向对象方法的优点的是( ) A) 可重用性好 B) 与人类习惯的思维方法一致C) 可维护性好 D) 有助于实现自顶向下、逐步求精(分数:1.00)A.B.C
31、.D. 解析:解析 面向对象程序设计方法并不强调自顶向下的构造程序,而常常是自底向上的,而自顶向下、逐步求精是结构化程序设计的特点。5.下列叙述中正确的是( )。A) 在面向对象的程序设计中,各个对象之间具有密切的联系B) 在面向对象的程序设计中,各个对象都是公用的C) 在面向对象的程序设计中,各个对象之间相对独立,相互依赖性小D) 上述三种说法都不对(分数:1.00)A.B.C. D.解析:解析 在面向对象程序设计中所使用的对象,其数据和操作是作为平等伙伴出现的。因此,对象具有很强的自含性,此外,对象所固有的封装性,使得对象之间不相互影响。6.下列不属于软件工程的 3 个要素的是( )。A)
32、 工具 B) 过程 C) 方法 D) 环境(分数:1.00)A.B.C.D. 解析:解析 软件工程包括 3 个要素,即方法、工具和过程。方法是完成软件工程项目的技术手段;工具支持软件的开发、管理和文档生成;过程支持软件开发的各个环节的控制和管理。7.软件调试的目的是( )。A) 发现错误 B) 改正错误C) 改善软件的性能 D) 验证软件的正确性(分数:1.00)A.B. C.D.解析:解析 本题考查软件工程调试。调试与测试是两个不同的过程,有着根本的区别:调试是一个随机的、不可重复的过程,它用于隔离和确认问题发生的原因,然后修改软件来纠正问题;测试是一个有计划的、可以重复的过程,它的目的是为
33、了发现软件中的问题。因此,软件调试的目的是为了改正软件中的错误。本题的正确答案是选项 B)。8.在数据管理技术的发展过程中,可实现数据共享的是( )。A) 人工管理阶段 B) 文件系统阶段C) 数据库系统阶段 D) 系统管理阶段(分数:1.00)A.B.C. D.解析:解析 数据库技术的主要目的是有效地管理和存取数据资源,包括提供数据的共享性,使多个用户能够同时访问数据库中的数据;减少数据的冗余度,以提交数据的一致性和完整性;提供数据与应用程序的独立性,从而减少应用程序的开发和维护代价。9.对于现实世界中事物的特征,在实体联系模型中使用( )。A) 属性描述 B) 关键字描述 C) 二维表格描
34、述 D) 实体描述(分数:1.00)A. B.C.D.解析:解析 属性(Attribute):实体所具有的某一特性称为属性。一个实体可以由若干个属性来刻画。10.使用视图之前,应首先( )。A) 新建一个数据库 B) 新建一个数据库表C) 打开相关的数据库 D) 打开相关的数据表(分数:1.00)A.B.C. D.解析:解析 使用视图之前需要先打开存有视图的相应数据库。11.以下叙述中错误的是( )。A) 计算机不能直接执行用 C 语言编写的源程序B) C 程序经 C 编译程序编译后,生成后缀为.obj 的文件是一个二进制文件C) 后缀为.obj 的文件,经连接程序生成后缀为.exe 的文件是
35、一个二进制文件D) 后缀为.obj 和.exe 的二进制文件都可以直接运行(分数:1.00)A.B.C.D. 解析:解析 一个 C 语言的源程序(后缀名为.c)在经过编译器编译后,先生成一个汇编语言程序,然后由编译程序再将汇编语言程序翻译成机器指令程序,即目标程序(后缀为.obj),目标程序不可以直接运行,它要和库函数或其他目标程序连接成可执行文件(后缀名为.exe)后方可运行。12.以下叙述中正确的是( )。A) 用 C 程序实现的算法必须要有输入和输出操作B) 用 C 程序实现的算法可以没有输出但必须要有输入C) 用 C 程序实现的算法可以没有输入但必须要有输出D) 用 C 程序实现的算法
36、可以既没有输入也没有输出(分数:1.00)A.B.C. D.解析:解析 算法具有的 5 个特性是:有穷性;确定性;可行性;有 0 个或多个输入;有一个或多个输出。所以说,用 C 程序实现的算法可以没有输入但必须要有输出。13.有以下程序:main() int a=666, b=888; printf(“%d/n“, a, b); 程序运行后的输出结果是( )。A) 错误信息 B) 666 C) 888 D) 666, 888(分数:1.00)A.B. C.D.解析:解析 本题考核的知识点是 printf()函数的简单应用。程序中的 printf()函数的输出格式部分只说明了一个%d,而输出成员
37、列表却有 a 和 b 两个成员,在这里将只输出第一个成员 a 值为 666,所以,4个选项中选项 B)符合题意。14.若在定义语句:int a, b, c, *p=c;之后,接着执行以下选项中的语句,则能正确执行的语句是( )。A) scanf(“%d“, a, b, c); B) scanf(“%d%d%d“, a, b, c); C) scanf(“%d“, p); D) scarff(“%d“, p);(分数:1.00)A.B.C. D.解析:解析 本题考查的知识点是:标准输入函数 scanf()。scanf()函数要求,除了第 1 个参数为格式化字符串以外,其余参数均为相应变量的地址值
38、。本题中,只有 p 是地址值,故应该选择 C)。15.以下关于逻辑运算符两侧运算对象的叙述中正确的是( )。A) 只能是整数 0 或 1 B) 只能是整数 0 或非 0 整数C) 可以是结构体类型的数据 D) 可以是任意合法的表达式(分数:1.00)A.B.C.D. 解析:解析 本题考查的是逻辑运算符。C 语言中,逻辑运算符的两个运算分量可以是任意合法的表达式。故本题应该选择 D)。16.若有定义 float x=1.5; int a=1, b=3, c=2; ,则正确的 switch 语句是( )。A) switch(x) case 1.0: printf(“*/n“); case 2.0:
39、printf(“*/n“); B) switch(int) x); case 1:printf(“*/n“); case 2:printf(“*/n“); C) switch(a+b) case 1:printf(“*/n“); case 2+1:printf(“*/n “); D) switch(a+b) case 1:printf(“*/n“); case 2:printf(“*/n“);(分数:1.00)A.B.C. D.解析:解析 C 语言中,switch 语句专用于实现多分支结构程序,其特点是各分支清晰且直观。switch后面括号中可以是任何表达式,取其整数部分与各常量表达式进行比较
40、。常量表达式中不能出现变量,且类型必须是整型、字符型或枚举型,各常量表达式各不相同。17.下列叙述中正确的是( )。A) break 语句只能用于 switch 语句B) 在 switch 语句中必须使用 defaultC) break 语句必须与 switch 语句中的 case 配对使用D) 在 switch 语句中,不一定使用 break 语句(分数:1.00)A.B.C.D. 解析:解析 本题主要考查 switch 语句的概念。break 语句除了能用于 switch 语句外,还可以用于循环语句中,因此选项 A)不正确。在 switch 语句中,可以使用 default 来执行所有 c
41、ase 均失配时的分支,也可以不使用 default,此时若所有 case 均失配则跳出 switch,因此选项 B)不正确。在 switch 语句中,每个 case 的作用就是标出一个执行的起点,当符合某个 case 时,程序就从该 case 所标出的起点处开始执行,若没有 break 语句中断执行的话,程序会一直执行到 switch 的最后一条语句,而不是碰到下一个case 中断执行。18.请阅读以下程序:#includestdio.hmain() int x=1, y=0, a=0, b=0; switch(x) case 1; switch(y) case 0:a+; break; c
42、ase 2:a+, b+; break; printf(“a=%d, b=%d/n“, a, b); 上面程序的输出结果是( )。A) a=2, b=1 B) a=1, b=1 C) a=1, b=0 D) a=2, b=2(分数:1.00)A. B.C.D.解析:解析 考查 switch 语句的使用。switch 语句的执行过程为:进入 switch 结构后,对条件表达式进行运算,然后从上至下去找与条件表达式值相匹配的 case,以此作为入口,执行 switch 结构中后面的各语句,直到遇到 break 语句,则跳出 switch 语句,如果各 case 都不匹配时,则执行 default
43、后面的语句。19.以下选项中不能作为 C 语言合法常量的是( )。A) cd B) 0.1e+6 C) “/a“ D) /011(分数:1.00)A. B.C.D.解析:解析 本题考查的是 C 语言的常量。0.1e+6 是实型常量的指数形式,代表 0.1106的,所以选项B)是合法的;“/a“是合法的字符串常量,/a 是一个非打印的转义字符表示响铃,所以选项 C)是合法的;/011是一个字符常量,/011 是一个用 3 位八进制表示的转义字符,所以选项 D)也是合法的。在 C 语言中,字符常量是用单引号括起来的一个字符,选项 A)中的cd包含了 2 个字符,所以是不正确的。20.运行下面程序时
44、,从键盘输入字母 H,则输出结果是( )。#includestdio.h main() char ch; ch=getchar(); switch(ch) case H:printf(“Hello!/n“); case G:printf(“Good morning!/n“); default:printf(“Bye_Bye!/n“); A) Hello!B) Hello!Cood Moring!C) Hello!Good morning!Bye_Bye!D) Hello!Bye_Bye!(分数:1.00)A.B.C. D.解析:解析 本题主要对 switch 语句进行了考查。switch 语句
45、的执行过程为:进入 switch 结构后,对条件表达式进行运算,然后从上至下去找与条件表达式值相匹配的 case,以此作为人口,执行 switch 结构中后面的各语句,直到遇到 break 语句,则跳出 switch 语句,如果各 case 都不匹配时,则执行default 后面的语句。本题中 ch 为字符H,所以 caseH条件中的语句将被执行,由于没有 break 语句,所以 caseG后的语句也被执行,由于同样的缺少 break 语句,所以 default 后的语句也被执行了。21.设函数 fun 的定义形式为:void fun(char ch, float x) 则以下对函数 fun
46、的调用语句中,正确的是( )。A) fun(“123“, 3.0); B) t=fun(D16.5); C) fun(65, 2.8); D) fun(32, 32);(分数:1.00)A.B.C.D. 解析:解析 本题考查了函数的定义。题目中定义的函数 fun()有两个参数,一个是字符型变量 ch,另一个是浮点型变量 x,函数类型是 void,即无返回值。选项 A)调用 fun 的第 1 个参数是字符串常量与字符变量不匹配,所以不正确。选项 B)是有返回值函数的调用形式,不正确。选项 C)的第 1 个参数是错误的字符常量,字符常量是用单引号括起来的一个字符(是转义字符可能有多个字符),故 C
47、)也不正确。选项 D)使用两个整型常量调用 fun,这在 C 语言中是允许的。因为整型到字符型可以自动转换,整型到浮点型也可以自动转换。故应该选择 D)。22.有以下程序:#includestdio.hchar fun(char x, char y) if(xy) return x; return y; main() int a=9, b=8, c=7; printf(“%c/n“, fun(fun(a, b), fun(b, c) ) ); 程序的执行结果是( )。A) 函数调用出错 B) 8 C) 9 D) 7(分数:1.00)A.B.C.D. 解析:解析 本题考核的知识点是函数的返回值以及返回值作为函数的参数。经过分析得出函数 fun()的功能是比较形参 x 和形参 y 的大小,返回较小的一个。函数 fun()有两个参数。本题中,首先定义了三个整型变量 a、b 和 c,分别赋初值为 9、8 和 7。然后执行函数 fun(fun(a, b),fun(b,