1、二级 C 语言笔试-376 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:70.00)1.下列数据结构中,属于非线性结构的是A) 带链队列 B) 循环队列 C) 带链栈 D) 二叉树(分数:2.00)A.B.C.D.2.下列叙述中正确的是A) 数据的逻辑结构与存储结构是一一对应的B) 算法的时间复杂度与空间复杂度一定相关C) 算法的效率只与问题的规模有关,而与数据的存储结构无关D) 算法的时问复杂度是指执行算法所需要的计算工作量(分数:2.00)A.B.C.D.3.在结构化程序设计中,模块划分的原则是A) 各模块应包括尽量多的功能B) 各模块的规模应尽量
2、大C) 各模块之间的联系应尽量紧密D) 模块内具有高内聚度、模块间具有低耦合度(分数:2.00)A.B.C.D.4.软件按功能可以分为应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的是A) 浏览器 B) 操作系统 C) 编译程序 D) 汇编程序(分数:2.00)A.B.C.D.5.在 E-R 图中,用来表示实体集的图形是A) 矩形 B) 椭圆形 C) 菱形 D) 三角形(分数:2.00)A.B.C.D.6.结构化分析可以使用的工具是A) N-S 图 B) DFD 图 C) PAD 图 D) 程序流程图(分数:2.00)A.B.C.D.7.下面不属于软件设计原则的是A) 抽象 B)
3、 模块化 C) 自底向上 D) 信息隐蔽(分数:2.00)A.B.C.D.8.在数据管理技术的发展过程中,经历了人工管理阶段、文件系统阶段和数据库系统阶段。其中,数据独立性最高的阶段是A) 数据库系统 B) 文件系统 C) 人工管理 D) 数据项管理(分数:2.00)A.B.C.D.9.数据库设计包含四个阶段,它们是需求分析、_、逻辑设计和物理设计。A) 编码设计 B) 测试阶段 C) 运行阶段 D) 概念设计(分数:2.00)A.B.C.D.10.有两个关系 R,S 如下:(分数:2.00)A.B.C.D.11.C 语言规定,在一个源程序中,main 函数的位嚣A) 必须在最开始 B) 必须
4、在系统调用的库函数的后面C) 可以任意 D) 必须在最后(分数:1.00)A.B.C.D.12.下列可用于 C 语言用户标识符的一组是A) void, define, WORD B) a3_3, _123, CarC) For,-abc, IF Case D) 2a, DO, sizeof(分数:1.00)A.B.C.D.13.以下符合 C 语言语法的实型常量是A) 8E-2 B) 3.14.159E C) E14 D) 2.2E0.5(分数:1.00)A.B.C.D.14.若函数中有定义语句:int a; , 则A) 系统将自动给 a 赋初值为 0 B) 系统将自动给 a 赋初值-1C) 这
5、时 a 中的值无意义 D) 这时 a 中无任何值(分数:1.00)A.B.C.D.15.以下不能正确表示代数式 4cd/ab 的 C 语言表达式是A) 4 * c * d/a/b B) c * d/a/b* 4 C) c/a/b * d* 4 D) 4* c* d/a, b(分数:1.00)A.B.C.D.16.下列关于单目运算符+,-的叙述中正确的是A) 它们的运算对象可以是任何变量和常量B) 它们的运算对象可以是 char 型变量和 int 型变量,但不能是 float 型变量C) 它们的运算对象可以是 int 型变量,但不能是 double 型变量和 float 型变量D) 它们的运算对
6、象可以是 char 型变量、int 型变量和 float 型变量(分数:1.00)A.B.C.D.17.有以下程序:#includestdio.hmain()int c:while(c=getchar()!/n)switch(c-2)case 0:case 1:putchar(c+4); case 2:putchar(c+4); break; case 3:putchar(c+3); case 4:putchar(c+3); break; printf(“/n“);从第一列开始输入以下数据(CR代表一个回车符):2743CR程序的输出结果是A) 66877 B) 668966 C) 66778
7、77 D) 6688766(分数:1.00)A.B.C.D.18.有以下程序段:int j; float y; char name50; scanf(“ %2d%f% s“ .j, y, name); 当执行上述程序段,从键盘上输入 55566 7777abc 后,y 的值为A) 55566.0 B) 566.0 C) 7777.0 D) 566777.0(分数:1.00)A.B.C.D.19.程序段:int x=12; double y=3.141593; printf(“ % d% 8.6f“, x, y); 的输出结果是A) 123.141593 B) 12 3.141593 C) 12
8、, 3.141593 D) 123.1415930(分数:1.00)A.B.C.D.20.以下叙述中不正确的是A) 在 C 程序中,逗号运算符的优先级最低B) 在 C 程序中,APH 和 aph 是两个不同的变量C) 若 a 和 b 类型相同,在计算赋值表达式 a=b 后 b 中的值将放入 a 中,而 b 巾的值不变D) 当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值(分数:1.00)A.B.C.D.21.有如下程序段:int a=14, h=15, x; char c=A; x=(ab) (c B); 执行该程序段后,x 的值为A) true B) false
9、 C) 0 D) 1(分数: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; prinff(“%f/n“, y); 该程序的输出结果是A) 0.000000 B) 0.250000 C) 0.500000 D) 1. 000000(分数:2.00)A.B.C.D.23.有以下程序:main()char a7=“a0/0a0/0“; int i, j; i=sizeof(a); j=strlen(a); printf(“%d%d/n“, i, j);
10、程序运行后的输出结果是A) 2 2 B) 7 6 C) 7 2 D) 6 2(分数:2.00)A.B.C.D.24.以下描述中正确的是A) 由于 do-while 循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句B) do-while 循环由 do 开始,用 while 结束,在 while(表达式)后面不能写分号C) 在 do-while 循环体中,是先执行一次循环,再进行判断D) do-while 循环中,根据情况可以省略 while(分数:2.00)A.B.C.D.25.以下能正确定义一维数组的选项是A) int a5=0, 1, 2, 3, 4, 5; B) char
11、 a=0, 1, 2, 3, 4, 5, /0; .C) char a=A, B, C; D) int a5=“0123“;(分数:2.00)A.B.C.D.26.下面的程序段运行后,输出结果是int i, j, x=0; static int a88; for(i=0; i3; i+for(j=0; j3; j+aij=2*i+j; for(i=0; i8; i+x+=aij; printf(“ %d“, x); A) 9 B) 不确定值 C) 0 D) 18(分数:2.00)A.B.C.D.27.若有定义:char * st=“how are you “; ,下列程序段中正确的是A) ch
12、ar a11, *p; strcpy(p=a+1, st4); B) char a11; strcpy(+a, st); C) char a 11; strcpy (a, st); D) char a , * p; strcpy (p=a 1, st+2);(分数:2.00)A.B.C.D.28.以下程序的输出结果是void f(int b)int i:for(i=2; i6; i+)bi*=2; main()int a10=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, , i; f(a); for(i=0; i10; i+)printf(“%d, “, ai); A) 1,
13、2, 3, 4, 5, 6, 7, 8, 9, 10, B) 1, 2, 3, 4, 10, 12, 14, 16, 9, 10, C) 1, 2, 6, 8, 10, 12, 7, 8, 9, 10, D) 1, 2, 6, 8, 10, 12, 14, 16, 9, 10,(分数:2.00)A.B.C.D.29.若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是A) 函数的实参和其对应的形参共占同一存储单元 B) 形参只是形式上的存在,不占用具体存储单元C) 同名的实参和形参占同一存储单元 D) 函数的形参和实参分别占用不同的存储单元(分数:2.00)A.B.C.D.30.
14、以下程序运行后的输出结果是#includestdio.hint f(int x); main()int n=1, m; m=f(f(f(n); printf(“%d/n“, m); int f(int x)return x *2; A) 1 B) 2 C) 4 D) 8(分数:2.00)A.B.C.D.31.若变量均已正确定义并赋值,以下属于合法的 C 语言赋值语句的是A) x=y=5; B) x=n%2.5; C) x+n=i; D) x=5=4+1;(分数:2.00)A.B.C.D.32.有以下程序:main()int a33, *p, i; p=a00;for(i=0; i9; i+)p
15、i=i+1; printf(“%d/n“, a12); 程序运行后的输出结果是A) 3 B) 6 C) 9 D) 2(分数:2.00)A.B.C.D.33.有以下程序:#includestdio.h#includestdlib.hint fun(int n)int *p;p=(int *)malloc(sizeof(int); *p=n; return *p; main()int a;a=fun(10); printf(“%d/n“, a+fun(10); 程序的运行结果是A) 0 B) 10 C) 20 D) 出错(分数:2.00)A.B.C.D.34.设有以下定义和语句:char str2
16、5=“Program“, *p; p=str; 则以下叙述中正确的是A) str 数组长度和 p 所指向的字符串长度相等 B) *p 与 str0的值相等C) str 与 p 的类型完全相同 D) 数组 str 中存放的内容和指针变量 p 中存放的内容相同(分数:2.00)A.B.C.D.35.设有如下定义:struct skint n; float x; data, *p; 若要使 p 指向 data 中的 n 域,正确的赋值语句是A) p=tara. n; B) * p=data. n; C) p=(struct sk *) data. n; D) p=(struct sk *) data
17、. n;(分数:2.00)A.B.C.D.36.以下程序的输出结果是#include stdio.hmain()char ch25=“6937“, “8254“, *p2; int i, j, s=0;for(i=0; i2; i+)pi=chi; for (i=0; i2; i+)for(j=0; pij/0; j+=2)s=10*s+pij-0; A) 69825 B) 63825 C) 6385 D) 693825(分数:2.00)A.B.C.D.37.有以下程序:#includestdio.hmain()FILE * fp; int i, a6=1, 2, 3, 4, 5, 6; fp
18、=fopen(“d3. dat“, “w+b“); fwrite(a, sizeof(int), 6, fp); fseek(fp, sizeof(int) *3, SEEK_SEr); /*该语句使渎文件的位置指针从文件头向后移动 3 个 int 型数据*/Fread(a, sizeof(int), 3, fp); fclose(fp); for(i=0; i6; i+)printf(“%d, “, ai); 程序运行后的输出结果是A) 4, 5, 6, 4, 5, 6, B) 1, 2, 3, 4, 5, 6, C) 4, 5, 6, 1, 2, 3, D) 6, 5, 4, 3, 2,
19、1,(分数:2.00)A.B.C.D.38.若有定义语句:int a410, *p, *q4; 且 0i4,则错误的赋值是A) p=a B) qi=ai C) p=ai D) p=a21(分数:2.00)A.B.C.D.39.设 x,y 和 z 都是 int 型变量,且 x=3,y=4,z=5,则下面表达式中,值为 0 的表达式是A) xy B) x=y C) x|+yy-z D) !(xy! z|1)(分数:2.00)A.B.C.D.40.以下程序的功能是进行位运算:main()unsigned char a, b; a=73; b=43; printf(“%d%d/n“, a, b); 程
20、序运行后的输出结果是A) 4 3 B) 7 3 C) 7 0 D) 4 0(分数:2.00)A.B.C.D.二、填空题(总题数:14,分数:30.00)41.一个栈的初始状态为空。首先将元素 1、2、3、4、5 依次入栈,然后退栈一次,再将元素 A、B、C、D依次入找,之后将所有元素全部退栈,则所有元素退栈(包括中间退栈的元素)的顺序为 1。(分数:2.00)填空项 1:_42.已知二叉树后序遍历序列是 dabec,中序遍历序列是 debac,它的前序遍历序列是一 1。(分数:2.00)填空项 1:_43.一个项目具有一个项目主管,一个项目主管可管理多个项目,则实体“项目主管”与实体“项目”的
21、联系属于 1 的联系。(分数:2.00)填空项 1:_44.软件测试可分为白盒测试和黑盒测试。逻辑覆盖测试属于 1 测试。(分数:2.00)填空项 1:_45.在最坏情况下,简单插入排序需要 1 次比较。(分数:2.00)填空项 1:_46.下面程序的功能是:计算 110 之间的奇数之和与偶数之和。请填空。#includestdio.hmain()int a, b, c, i; a=c=0; for(i=0; i=10; i+=2)a+=i; _; c+=b; printf(“偶数之和=%d/n“,a);printf(“奇数之和=%d/n“,c-11);(分数:2.00)填空项 1:_47.以
22、下程序的输出结果是_。fun (int x, int y, int z)z=x*x+y*y; main()int a=31; fun (6, 3, a)printf(“%d“, a)(分数:2.00)填空项 1:_48.以下程序运行后的输出结果是_。fun(int a)int b=0; static int c=3; b+; c+; return(a+b+c); main()int i, a=5;for(i=0; i3; i+)printf(“%d%d“, i, fun(a); printf(“/n“); (分数:2.00)填空项 1:_以下函数用来求出数组的最大元素在数组中的下标并存放在 k
23、 所指的存储单元中。请填空。#includeconio.h#includestdio.hint fun(int%s, int t, int *k)int i; *k=0; (9) if(s*ksi)*k=i; return (10) ; main()int a10=876, 675, 896, 101, 301, 401, 980, 431, 451, 777, k; fun(a, 10, %k); printf(“%d, %d/n“, k, ak);(分数:4.00)填空项 1:_填空项 1:_49.以下定义的结构体类型拟包含两个成员,其中成员变量 info 用来存入整型数据;成员变量 li
24、nk 是指向自身结构体的指针,请将定义补充完整。struct nodeint info; _link; ;(分数:2.00)填空项 1:_50.若变量 a, b 已定义为 int 类型并分别赋值 21 和 55,要求用 printf 函数以 a=21, b=55 的形式输出,请写出完整的输出语句 1。(分数:2.00)填空项 1:_51.以下程序的输出结果是_。main()char c=z; printf(“%c“,c-25);(分数:2.00)填空项 1:_52.有以下程序#define f(x)x*xmain()int i; i=f(6+6)/f(2+2);printf(“%d/n“, i
25、); 执行后的输出结果是_。(分数:2.00)填空项 1:_53.设有定义:FILE*fw; ,请将以下打开文件的语句补充完整,以便可以向文本文件“readme.txt”的最后续写内容。fw=fopen(“readme. txt“, _);(分数:2.00)填空项 1:_二级 C 语言笔试-376 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:70.00)1.下列数据结构中,属于非线性结构的是A) 带链队列 B) 循环队列 C) 带链栈 D) 二叉树(分数:2.00)A.B.C.D. 解析:解析 根据数据结构中各数据元素之间前后关系的复杂程度,一般将数据结
26、构分为两大类型:线性结构与非线性结构。线性结构表示数据元素之间为一对一的关系,非线性结构表示数据元素之间为一对多或者多对一的关系。根据各种结构的定义可知二叉树是一种非线性结构。2.下列叙述中正确的是A) 数据的逻辑结构与存储结构是一一对应的B) 算法的时间复杂度与空间复杂度一定相关C) 算法的效率只与问题的规模有关,而与数据的存储结构无关D) 算法的时问复杂度是指执行算法所需要的计算工作量(分数:2.00)A.B.C.D. 解析:解析 根据时间复杂度和空间复杂度的定义可知,算法的时间复杂度与空间复杂度并不相关。数据的逻辑结构就是数据元素之间的逻辑关系,它是从逻辑上描述数据元素之间的关系,是独立
27、于计算机的;数据的存储结构是研究数据元素和数据元素之间的关系如何在计算机中表示的,它们并非一一对应。算法的执行效率不仅与问题的规模有关,还与数据的存储结构有关。3.在结构化程序设计中,模块划分的原则是A) 各模块应包括尽量多的功能B) 各模块的规模应尽量大C) 各模块之间的联系应尽量紧密D) 模块内具有高内聚度、模块间具有低耦合度(分数:2.00)A.B.C.D. 解析:解析 耦合性和内聚性是模块独立的两个定性标准。一般较优秀的软件设计尽量做到高内聚、低耦合,这样有利于提高软件模块的独立性,也是模块划分的原则。4.软件按功能可以分为应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的
28、是A) 浏览器 B) 操作系统 C) 编译程序 D) 汇编程序(分数:2.00)A. B.C.D.解析:解析 操作系统属于系统软件,编译程序和汇编程序都属于支撑软件,而浏览器属于应用软件。5.在 E-R 图中,用来表示实体集的图形是A) 矩形 B) 椭圆形 C) 菱形 D) 三角形(分数:2.00)A. B.C.D.解析:解析 E-R 图中用矩形表示实体集,用椭圆形表示属性,用菱形表示联系。6.结构化分析可以使用的工具是A) N-S 图 B) DFD 图 C) PAD 图 D) 程序流程图(分数:2.00)A.B. C.D.解析:解析 数据流图(DFD)、数据字典、判定表和判定树是结构化分析常
29、用的工具。程序流程图、N-S图、PAD 图是详细设计过程中常用的图形工具。7.下面不属于软件设计原则的是A) 抽象 B) 模块化 C) 自底向上 D) 信息隐蔽(分数:2.00)A.B.C. D.解析:解析 软件设计遵循软件工程的原则,包括抽象、模块化、局部化、信息隐蔽、确定性、一致性、完备性和可验证性。8.在数据管理技术的发展过程中,经历了人工管理阶段、文件系统阶段和数据库系统阶段。其中,数据独立性最高的阶段是A) 数据库系统 B) 文件系统 C) 人工管理 D) 数据项管理(分数:2.00)A. B.C.D.解析:解析 在数据管理技术的发展过程中,经历了人工管理阶段、文件系统阶段和数据库系
30、统阶段,其中数据独立性最高的阶段是数据库系统。数据库阶段用数据模型表示复杂的数据,有较高的数据独立性。数据库系统为用户提供了方便的用户接口,用户可使用查询语言或终端命令操作数据库,也可以用程序方式操作数据库。数据库管理系统提供了数据控制功能。9.数据库设计包含四个阶段,它们是需求分析、_、逻辑设计和物理设计。A) 编码设计 B) 测试阶段 C) 运行阶段 D) 概念设计(分数:2.00)A.B.C.D. 解析:解析 数据库设计目前一般采用生命周期法,即将整个数据库应用系统的开发分解成目标独立的若干阶段。它们是需求分析阶段、概念设计阶段、逻辑设计阶段和物理设计阶段。10.有两个关系 R,S 如下
31、:(分数:2.00)A.B.C. D.解析:解析 专门的关系运算有 3 种:投影、选择和连接。选择运算是从关系中找出满足给定条件的那些元组,其中的条件是以逻辑表达式给出的,值为真的元组将被选取,这种运算是从水平方向抽取元组。投影运算是从关系模式中挑选若干属性组成新的关系,这是从列的角度进行的运算,相当于对关系进行垂直分解。连接运算是二目运算,需要两个关系作为操作对象。11.C 语言规定,在一个源程序中,main 函数的位嚣A) 必须在最开始 B) 必须在系统调用的库函数的后面C) 可以任意 D) 必须在最后(分数:1.00)A.B.C. D.解析:解析 不论 main()函数在整个过程中的位置
32、如何,一个 C 程序总是从 main()函数开始执行的。12.下列可用于 C 语言用户标识符的一组是A) void, define, WORD B) a3_3, _123, CarC) For,-abc, IF Case D) 2a, DO, sizeof(分数:1.00)A.B. C.D.解析:解析 C 语言规定标识符只能由字母、数字和下划线 3 种字符组成,且第一个字符必须为字母或下划线,排除选项 C)和 D);C 语言中还规定标识符不能为 C 语言的关键字,而选项 A)中 void 为关键字,故排除选项 A)。13.以下符合 C 语言语法的实型常量是A) 8E-2 B) 3.14.159
33、E C) E14 D) 2.2E0.5(分数:1.00)A. B.C.D.解析:解析 实型常量又称为实数或浮点数,在 C 语言中可以表示为小数形式和指数形式。其中用“e或 E+整数”表示以 10 为底的幂,字母 e 或 E 之前必须有数字,后面必须是整数。因此正确答案为选项 A)。14.若函数中有定义语句:int a; , 则A) 系统将自动给 a 赋初值为 0 B) 系统将自动给 a 赋初值-1C) 这时 a 中的值无意义 D) 这时 a 中无任何值(分数:1.00)A.B.C. D.解析:解析 用 int 方法定义变量时,编译器仅为变量开辟存储单元,并没有在存储单元中放任何值,此时变量中的
34、值是不确定的,称变量值“无意义”。因此,本题的正确答案为 C)。15.以下不能正确表示代数式 4cd/ab 的 C 语言表达式是A) 4 * c * d/a/b B) c * d/a/b* 4 C) c/a/b * d* 4 D) 4* c* d/a, b(分数:1.00)A.B.C.D. 解析:解析 C 语言中算术运算符的结合性均为自左向右。选项 D)中表达式的计算结果是 4cdb/a,和题目要求的代数式不一致,因此选项 D)不能正确表示题目所给代数式的内容。16.下列关于单目运算符+,-的叙述中正确的是A) 它们的运算对象可以是任何变量和常量B) 它们的运算对象可以是 char 型变量和
35、int 型变量,但不能是 float 型变量C) 它们的运算对象可以是 int 型变量,但不能是 double 型变量和 float 型变量D) 它们的运算对象可以是 char 型变量、int 型变量和 float 型变量(分数:1.00)A.B.C.D. 解析:解析 +(或-)的运算结果是使运算对象增 1(或减 1);运算对象可以是整型变量、实型变量,也可以是字符型变量,但不能是常量或表达式。+(或-)的结合方向是“自右向左”。17.有以下程序:#includestdio.hmain()int c:while(c=getchar()!/n)switch(c-2)case 0:case 1:p
36、utchar(c+4); case 2:putchar(c+4); break; case 3:putchar(c+3); case 4:putchar(c+3); break; printf(“/n“);从第一列开始输入以下数据(CR代表一个回车符):2743CR程序的输出结果是A) 66877 B) 668966 C) 6677877 D) 6688766(分数:1.00)A. B.C.D.解析:解析 本题主要考查字符输入输出函数 getchar 和 putchar 的使用。getchar 函数用来从标准输入设备上读入一个字符,putchar(c)函数是将字符变量 c 中的字符输出到标准输
37、出设备上,并且字符可以看作整数参与运算。18.有以下程序段:int j; float y; char name50; scanf(“ %2d%f% s“ .j, y, name); 当执行上述程序段,从键盘上输入 55566 7777abc 后,y 的值为A) 55566.0 B) 566.0 C) 7777.0 D) 566777.0(分数:1.00)A.B. C.D.解析:解析 本题考查通过 scanf 函数输入数据时的格式控制问题。变量 j 的格式控制为“%2d”,即只接收输入数据的前两位,从第 3 位开始直到空格之间的输入都会被保存到变量 y 中,因为 y 为浮点型数据,所以输出结果为
38、选项 B)。19.程序段:int x=12; double y=3.141593; printf(“ % d% 8.6f“, x, y); 的输出结果是A) 123.141593 B) 12 3.141593 C) 12, 3.141593 D) 123.1415930(分数:1.00)A. B.C.D.解析:解析 本题考查 printf 函数的输出格式控制符,%m. nf 表示指定输出的实型数据的宽度为 m(包含小数点),并保留 n 位小数。当输出数据的小数位大于 n 时,截去右边多余的小数,并对截去部分的第一位做四舍五入处理;当输出数据小数位小于 n 时,在小数的最右边补 0,输出数据的小
39、数部分宽度为n。若给出的总宽度 m 小于 n 加上整数位数和小数点,则自动突破 m 的限制;反之,数字右对齐,左边补空格。本题中 3.141593 数值长度为 8,小数位数是 6,因此左端没有空格,故正确答案为 A)。20.以下叙述中不正确的是A) 在 C 程序中,逗号运算符的优先级最低B) 在 C 程序中,APH 和 aph 是两个不同的变量C) 若 a 和 b 类型相同,在计算赋值表达式 a=b 后 b 中的值将放入 a 中,而 b 巾的值不变D) 当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值(分数:1.00)A.B.C.D. 解析:解析 在 C 语言所有
40、的运算符中,逗号运算符的优先级最低。C 语言中区分大小写,所以 APH 和aph 是两个不同的变量。赋值表达式 a=b 表示将 b 的赋付给 a,而 b 本身的值保持不变;通过键盘可以向计算机输入允许的任何类型的数据。选项 D)中当从键盘输入数据时,对于整型变量可以输入整型数值和字符,对于实型变量可以输入实型数值和整型数值等。21.有如下程序段:int a=14, h=15, x; char c=A; x=(ab) (c B); 执行该程序段后,x 的值为A) true B) false C) 0 D) 1(分数:2.00)A.B.C.D. 解析:解析 在 C 语言中,逻辑运算符有 4 个,它
41、们分别是:!(逻辑非)、|(逻辑或)、(逻辑与)、(异或)。在位运算里面还有(位与)、|(位或)的运算。本题考查逻辑与运算符的用法,在表达式x=(ab)(cB);中,先判断 ab 条件,逻辑与条件的两边都要保证为 1,即 a 和 b 都成立,当然 cB是成立的,显然,该表达式的值为 1。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; prinff(“%f/n“, y); 该程序的输出结果是A) 0.000000 B) 0.250000 C) 0.500000 D) 1. 0
42、00000(分数:2.00)A.B.C.D. 解析:解析 本题考查 if 语句的嵌套。if 语句中的一种表达方式,即:ifelse if。该表达式的语句是:if(表达式 1)语句 1else if(表达式 2)语句 2else if(表达式 3)语句 3else语句 4本题执行 else y=1.0,并且以“%f”输出。23.有以下程序:main()char a7=“a0/0a0/0“; int i, j; i=sizeof(a); j=strlen(a); printf(“%d%d/n“, i, j); 程序运行后的输出结果是A) 2 2 B) 7 6 C) 7 2 D) 6 2(分数:2.
43、00)A.B.C. D.解析:解析 字符数组的元素数量在定义时已经确定,与其存储的内容无关,本题中语句 char a7定义了由 7 个字符元素组成的字符数组,其 sizeof(a)=7。字符数组常常存储字符串,但其存储的字符串长度与数组长度没有直接关联。C 语言规定,字符串从首字符开始,以第一个值为 ASCII 码 0 的字符结尾,其中的非 0 字符数量就是字符串的长度。在本题中,a0=a,a1=0,a2=0,从首字符位置 a0到第一个 ASCII 值为 0 的字符 a2,其中共有 2 个非 0 字符,因此 strlen(a)=2。24.以下描述中正确的是A) 由于 do-while 循环中循
44、环体语句只能是一条可执行语句,所以循环体内不能使用复合语句B) do-while 循环由 do 开始,用 while 结束,在 while(表达式)后面不能写分号C) 在 do-while 循环体中,是先执行一次循环,再进行判断D) do-while 循环中,根据情况可以省略 while(分数:2.00)A.B.C. D.解析:解析 do while 语句的一般形式为:do 循环体语句 while(表达式);,其中循环体语句可以是复合型语句,但必须用花括号括起来。while 后必须要有分号作为语句的结束,在 do-while 循环中,不可以省略 while。25.以下能正确定义一维数组的选项是
45、A) int a5=0, 1, 2, 3, 4, 5; B) char a=0, 1, 2, 3, 4, 5, /0; .C) char a=A, B, C; D) int a5=“0123“;(分数:2.00)A.B. C.D.解析:解析 选项 A)中,定义的初值个数大于数组的长度;选项 C)中,数组名后少了中括号;选项 D)中,整型数组不能赋予字符串。26.下面的程序段运行后,输出结果是int i, j, x=0; static int a88; for(i=0; i3; i+for(j=0; j3; j+aij=2*i+j; for(i=0; i8; i+x+=aij; printf(“
46、 %d“, x); A) 9 B) 不确定值 C) 0 D) 18(分数:2.00)A.B.C. D.解析:解析 本题主要考查的是用二维数组首地址和下标来引用二维数组元素的方法。通过分析可知,程序中的双重循环定义了一个如下的二维数组:0 1 22 3 44 5 6由于数组的下标是从 0 开始的,所以二维数组元素 aij表示的是二维数组 a 的第 i+1 行、第 j+1 列对应位置的元素。27.若有定义:char * st=“how are you “; ,下列程序段中正确的是A) char a11, *p; strcpy(p=a+1, st4); B) char a11; strcpy(+a,
47、 st); C) char a 11; strcpy (a, st); D) char a , * p; strcpy (p=a 1, st+2);(分数:2.00)A. B.C.D.解析:解析 本题综合考查字符数组的赋值和 strcpy 函数的用法。C 语言不允许用赋值表达式对字符数组赋值,如下面的语句就是非法的:str1=“China“,如果想把“China“这 5 个字符放到数组 str1 中,除了逐个输入外,还能使用 strcpy 函数,该函数的功能是将一个字符串复制到一个字符数组中。例如:strcpy(str1, “China“)或 strcpy(str1, str2);注意,不能企图用以下语句来进行赋值(将 str2 的值传给 str1):str1=str2;不能用赋值语句将一个字符串常量或字符数组直接赋值给一个字符数组。strcpy 函数的结构是:strcpy(字符数组 1,字符串 2),其中,需要注意的是,字符数组 1 的长度不应小于字符串2 的长度,“字符数组 1”必须写成数组名形式,如(s