1、二级 C 语言-22 及答案解析(总分:83.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:49.00)1.有以下语句,则对 a 数组元素的引用不正确的是(0i9) int a10=0,1,2,3,4,5,6,7,8,9,*p=a; A)ap-a B)*(ai) C)pi D)*(*(a+i)(分数:2.00)A.B.C.D.2.下列程序的输出结果是 #include “stdio.h“ #define M(x,y) x%y main( ) int a,m=12,n=100; a=M(n,m); printf(“%d/n“,a-); A)2 B)3 C)4 D)5(分数:2
2、.00)A.B.C.D.3.以下对一维实型数组 a 的正确定义的是_。 A. float a(10); B. int n=10;float an; C. int n;float a n; scanf(“%d“,printf(“%c,“,+a);printf(%c/n“,b=a+);程序运行后的输出结果是( )。 A. b,b B. b,c C. a,b D. a,c(分数:1.00)A.B.C.D.8.现有以下语句:i=1;for (;i=100;i+)sum+=i; A. for(i-1;i+) sum+-i; if(i=100) break; B. for(i=1;i=100;) sum+
3、=i; i+; C. i=1; for(;i=100;) sum+=-i; D. i=1; for(;) sum+=i; if(i=100) break; i+; (分数:2.00)A.B.C.D.9.有以下程序main(int arge,char *argv )int n,i=0;while(argv1 i !=/0) n-fun(); i+;printf ( “%d/n“ , n*argc.;int fun ( ) static int s=0;s+=1;return s;假设程序经编译、连接后生成可执行文件 exam.exe, 若键入以下命令exam 123 回车 A. 6 B. 8 C
4、. 3 D. 4(分数:1.00)A.B.C.D.10.有以下程序#include main( ) int c;while(c=getchar()!=/n) switch(c-2) case0:case 1:putchar(c+4);case 2:putchar(c+4);break;case 3:putchar(c+3);case 4:putchar(c+3);break;printf(“/n“)从第一列开始输入以下数据代表一个回车符。2743程序的输出结果是A)66877 B)668966 C)6677877 D)6688766(分数:2.00)A.B.C.D.11.若运行时给变量 x 输
5、入 12,则以下程序的运行结果是U /U。 main() int x,y; scanf(“%d“,,则 strlen(s)的值是U /U。 A. 7 B. 8 C. 9 D. 10(分数:2.00)A.B.C.D.15.下面是对宏定义的描述,不正确的是_。 A. 宏不存在类型问题,宏名无类型,它的参数也无类型 B. 宏替换不占用运行时间 C. 宏替换时先求出实参表达式的值,然后代入形参运算求值 D. 宏替换只不过是字符替代而已(分数:1.00)A.B.C.D.16.利用 fseek 函数可实现的操作是U /U。 A. 实现文件的顺序读写 B. 改变文件的位置指针 C. 实现文件的随机读写 D.
6、 以上答案均正确(分数:1.00)A.B.C.D.17.有下列程序:#includestdio.hstructst int(x,y)date2=1,10,2,20;main() structst*p=date;printf(“%d,“,p-y);printf(“%d/n“,(+p)-x);程序的运行结果是U /U。 A.10,1 B.20,1 C.10,2 D.20,2(分数:1.00)A.B.C.D.18.有以下程序#includestdio.hvoid fun(char*c,int d) *c=*c+1;d=d+1;printf(“%c,%c,“*c,d);main() char b=a,
7、a=A;fun(b,a);printf(“%c,%c/n“,b,a);程序运行后的输出结果是_。 A.b,B,b,A B.b,B,B,A C.a,B,B,a D.a,B,a,B(分数:2.00)A.B.C.D.19.在 DOS 环境下,为了得到 TYPE 命令的帮助信息,正确的 DOS 命令为 A. TYPE B. TYPE/H C. TYPE/* D. TYPE/? (分数:1.00)A.B.C.D.20.以下叙述中正确的是_。 A.函数名允许用数字开头 B.函数调用时,不必区分函数名称的大小写 C.调用函数时,函数名必须与被调用的函数名完全一致 D.在函数体中只能出现一次 return 语
8、句(分数:1.00)A.B.C.D.21.有以下程序struct Sint n;int a20;void f(int *a,int n ) int i;for(i=0;iN-1;i+)NBSP;AI+=I;main() int i;struct S s10,2,3,1,6,8,7,5,4,10,9;f(s.a,s.n);for(i=0;iS.N;i+)NBSP;PRINTF(“%D“,S.AI);程序运行后的输出结果是_。 A. 2,4,3,9,12,12,11,11,18,9, B. 3,4,2,7,9,8,6,5,11,10, C. 2,3,1,6,8,7,5,4,10,9, D. 1,2
9、,3,6,8,7,5,4,10,9,(分数:2.00)A.B.C.D.22. (分数:1.00)A.B.C.D.23.下面叙述正确的是( )。 A. 算法的执行效率与数据的存储结构无关 B. 算法的空间复杂度是指算法程序中指令(或语句)的条数 C. 算法的有穷性是指算法必须能在执行有限个步骤之后终止 D. 以上三种描述都不对(分数:1.00)A.B.C.D.24.对长度为 n 的线性表进行顺序查找,在最坏情况下需要比较的次数为U /U。 A. 125 B. n/2 C. n D. n+1(分数:2.00)A.B.C.D.25.已知一棵二叉树前序遍历和中序遍历分别为 ABDEGCFH 和 DBG
10、EACHF,则该二叉树的后序遍历为_。 A. GEDHFBCA B. DGEBHFCA C. ABCDEFGH D. ACBFEDHG(分数:1.00)A.B.C.D.26.有以下程序:#includevoid fun(int*s) static int j=0;do sj=sj+sj+1; while(+j2);main() int k,a10=1,2,3,4,5;for(k=1;k3;k+) fun(a) ;for(k=0;k5;k+) printf(“%d“,ak);printf(“/n“);程序运行后的输山结果是U /U。 A. 12345 B. 23445 C. 34756 D. 3
11、5745(分数:2.00)A.B.C.D.27.函数 rewind 的作用是U /U。 A. 使文件位置指针重新返回文件的开始位置 B. 将文件位置指针指向文件中所要求的特定位置 C. 使文件位置指针指向文件的末尾 D. 使文件位置指针自动移至下一个字符位置(分数:2.00)A.B.C.D.28.若已定义 x 和 y 为 double 类型,则表达式 x=1,y=x+3/2 的值是_。 A. 1 B. 2 C. 2.0 D. 2.5 (分数:1.00)A.B.C.D.29.下列叙述中正确的是 _。 A. C 程序中注释部分可以出现在程序中任何合适的地方 B. 花括号“和“只能作为函数体的定界符
12、 C. 构成 C 程序的基本单位是函数,所有函数名都可以由用户命名 D. 分号是 C 语句之间的分隔符,不是语句的一部分 (分数:1.00)A.B.C.D.30.若运行以下程序时,从键盘输入 ADescriptor (CR表示回车) ,则下面程序的运行结果是( )。#include stdio.hmain() char c; int v0=1, v1=0, v2=0; do(switch(c=getchar() (casea:caseA:case e:case E:case i:case T:case o:case 0:case u:caseU:v1+=1; default:v0+=1; v2
13、+=1; ) while(e!=/n); printf(“v0=%d, v1=%d, v2=%d/n“, v0, v1, v2); ) A. v0=7, v1=4, v2=7 B. v0=8, v1=4, v2=8 C. v0=11, v1=4, v2=11 D. v0=13, v1=4, v2=12(分数:1.00)A.B.C.D.31.对于下列定义,不正确的叙述是U /U。union data int a;char b;double c;x=y; A. 变量 x 所占内存的长度等于成员 c 的长度 B. 变量 x 的地址和它的各成员地址都是相同的 C. 可以在定义时对 x 初始化 D. 不
14、能对变量 x 赋值,故 x=y 非法(分数:1.00)A.B.C.D.32.以下程序运行后的输出结果是mainU /U float x=2.0,y;if(x0.0) y=0.0;else if(x10.0) y=1.0/x:else y=1.0;printf(“%f/n“,y); A. 0.000000 B. 0.250000 C. 0.500000 D. 1.000000(分数:1.00)A.B.C.D.33.下列程序的输出结果是_。main() int n=4;while(n-)printf(“%d“,-n); A.2 0 B.3 1 C.3 2 1 D.2 1 0(分数:2.00)A.B
15、.C.D.34.下面程序的输出结果是main() int a10=1,2,3,4,5,6,7,8,9,10,*p=a;printf(“%d/n“,*(p+2); A. 3 B. 4 C. 1 D. 2(分数:2.00)A.B.C.D.35.在 C 语言中,要求运算数必须是整型的运算符是_。 A. / B. + C. != D. %(分数:1.00)A.B.C.D.二、B填空题/B(总题数:15,分数:34.00)36.以下程序中给指针 P 分配三个 double 型动态内存单元,请填空: #includestdioh main() double*p; p=(double*)mallocU U
16、/U /U; p0=1.5;p1=2.5;p2=3.5; printf(“%f%f%f/n“,p0,p1,p2); (分数:1.00)填空项 1:_37.以下程序运行后的输出结果是_。 int a=5; fun(int b) static int a=10; a+=b+; printf(“%d“,a); main() int c=20; fun(c); a+=c+; printf(“%d/n“,a); (分数:2.00)填空项 1:_38.数据库设计分为 6 个设计阶段:需求分析阶段、 1、逻辑设计阶段、物理设计阶段、实施阶段、运行和维护阶段。(分数:4.00)填空项 1:_39.以下程序的输
17、出结果是_。 main() char s=“abcdef“; s3=/0; printf(“%s/n“,s); (分数:1.00)填空项 1:_40.若 a 的值为 1,则表达式!a+a 的值是 1。(分数:2.00)填空项 1:_41.若有定义:int k;,以下程序段的输出结果是_。 for(k=2;k6;k+,k+)printf(“#%d“,k);(分数:4.00)填空项 1:_42.由 25 人围坐成圆圈,先由任意一人开始顺时针沿用 125 依次编号,然后从 1 号开始顺时针报数(1、2、3),凡报 5 的倍数者出圈,剩下者继续报数,求出最后出圈者的编号。#include main (
18、 ) int a26, j,n, count;for (j=1; j=25; j+) aj=j;j=1;count=0;n=U U /U /U;do if(aj !=0) n+;if (n%5=0) U U /U /U;if(count=24) printf(“%d/n“,j);count+;j+;if (j25) j=1;while(U U /U /U);(分数:4.00)填空项 1:_43.以下函数 sstrcat()的功能是实现字符串的连接,即将 t 所指字符串复制到 s 所指字符串的尾部。例如:s 所指字符串为 abed,t 所指字符串为 efgh,函数调用后 s 所指字符串为 abo
19、defgh。请填空。 #include string.h void sstrcat(char *s,char *t) int n; n=strlen(s); while(*(s+n)=U U /U /U)s+;t+; (分数:2.00)填空项 1:_44.下列程序运行后的输出的结果是_。 #includestdio.h main() char s20; scanf(“%s“,s); printf(“%s“,s); 运行程序,输入 HOW ARE YOU。(分数:2.00)填空项 1:_45.数据的逻辑结构有线性结构和 1 两大类。(分数:2.00)填空项 1:_46.设变量已正确定义为整型,则
20、表达式 n=i=2,+i,i+的值为 1。(分数:4.00)填空项 1:_47.对软件是否能达到用户所期望的要求的测试称为 1。(分数:1.00)填空项 1:_48.以下程序中,fun 函数的功能是求 3 行 4 列二维数组每行元素中的最大值,请填空 void fun(int,int,int(*)4,int *); main() int a34=12,41,36,28,19,33,15,27,3,27,19,1,b3,i; fun(3,4,a,b); for(i=0;i3;i+)printf(“%4d“,bi); printf(“/n“); void fun(int m,int n,int a
21、r4,int *bar) int i,j,x; for(i=0;iM;i+) x=ari0; for(j=0;jN;j+)NBSP;IF(X _=x; (分数:2.00)填空项 1:_49.一个模块直接调用的其他模块的模块个数称为 1。(分数:2.00)填空项 1:_50.在面向对象方法中,类之间共享属性和操作的机制称为U U /U /U。(分数:1.00)填空项 1:_二级 C 语言-22 答案解析(总分:83.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:49.00)1.有以下语句,则对 a 数组元素的引用不正确的是(0i9) int a10=0,1,2,3,4,5,6
22、,7,8,9,*p=a; A)ap-a B)*(ai) C)pi D)*(*(a+i)(分数:2.00)A.B.C.D. 解析:解析 本题考查数组指针的应用。选项 D)第一层括号中为数组 a 中第 i 项元素的值,外面再加指针运算符没有意义。2.下列程序的输出结果是 #include “stdio.h“ #define M(x,y) x%y main( ) int a,m=12,n=100; a=M(n,m); printf(“%d/n“,a-); A)2 B)3 C)4 D)5(分数:2.00)A.B.C. D.解析:解析 带参数的宏定义命令行形式如下: #define 宏名(形参表)替换文
23、本 在编译的时候编译预处理程序用“替换文本”来替换宏,即 M(n,m)被替换为 n%m,之后计算,将计算的结果赋给 a。注意,宏替换是在编译时由预处理程序完成的,宏替换不占用运行的时间,而函数调用是在程序运行时进行的,在函数的调用过程中需要占用一些处理时间。3.以下对一维实型数组 a 的正确定义的是_。 A. float a(10); B. int n=10;float an; C. int n;float a n; scanf(“%d“,printf(“%c,“,+a);printf(%c/n“,b=a+);程序运行后的输出结果是( )。 A. b,b B. b,c C. a,b D. a,
24、c(分数:1.00)A. B.C.D.解析:解析 程序中的第一条输出语句输出表达式+a 的值,即输出 a+1 的值,而此时 a 的值为a,所以第一条输出语句输出的值为b;第二条输出语句中输出表达式 b=a+的值,即输出 a 的值,而此时 a的值为b,所以第二条输出语句输出的值也为b。故选项 A 符合题意。8.现有以下语句:i=1;for (;i=100;i+)sum+=i; A. for(i-1;i+) sum+-i; if(i=100) break; B. for(i=1;i=100;) sum+=i; i+; C. i=1; for(;i=100;) sum+=-i; D. i=1; fo
25、r(;) sum+=i; if(i=100) break; i+; (分数:2.00)A.B.C.D. 解析:9.有以下程序main(int arge,char *argv )int n,i=0;while(argv1 i !=/0) n-fun(); i+;printf ( “%d/n“ , n*argc.;int fun ( ) static int s=0;s+=1;return s;假设程序经编译、连接后生成可执行文件 exam.exe, 若键入以下命令exam 123 回车 A. 6 B. 8 C. 3 D. 4(分数:1.00)A. B.C.D.解析:解析 主函数的第一个参数 al
26、zc 为整形参数,记下从命令行输入的参数的个数;笫二个参数argv 是一个字符型的指针数组,它的每一个元素指向命令行输入的参数字符数。在本例中 argc 的值为2,argv0指向字符串“exam”,argv1指向参数字符串“123”。在 main()函数中,while 循环执行了3 次,调用了 3 次 fun()函数;第一次调用了 fun()函数时,定义了一个静态变量 s 并赋初值 0,加 1 后作为函数值返回,n 的值为 1;第二次调用 ram()函数时,静态变量 s 的值将保留上一次退出时的值 1,再加 1 为 2,作为函数值返回,n 的值为 2;同理第三次调用返回后,n 的值为 3。输出
27、 n*argc 的值为 6 所以,A 选项为所选。10.有以下程序#include main( ) int c;while(c=getchar()!=/n) switch(c-2) case0:case 1:putchar(c+4);case 2:putchar(c+4);break;case 3:putchar(c+3);case 4:putchar(c+3);break;printf(“/n“)从第一列开始输入以下数据代表一个回车符。2743程序的输出结果是A)66877 B)668966 C)6677877 D)6688766(分数:2.00)A. B.C.D.解析:解析 本题主要考查了
28、字符输入输出函数 getchar 和 putchar 的使用。getchar 函数用来从标准输入设备上读入一个字符,putchar(c)函数是将字符变量 c 中的字符输出到标准输出设备上,并且字符可以看作整数参与运算。11.若运行时给变量 x 输入 12,则以下程序的运行结果是U /U。 main() int x,y; scanf(“%d“,,则 strlen(s)的值是U /U。 A. 7 B. 8 C. 9 D. 10(分数:2.00)A. B.C.D.解析:解析 本题考查的是字符串的长度。字符数组中可以存放字符串,但字符数组的长度并不是字符串的长度,字符串的长度是指字符数组中存放的有效字
29、符个数,即/0之前的字符数。字符数组 s 中依次存放的字符是:1234567 和 2 个字符串结束标记/O,故字符串的长度是 7,所以应该选择 A) 。15.下面是对宏定义的描述,不正确的是_。 A. 宏不存在类型问题,宏名无类型,它的参数也无类型 B. 宏替换不占用运行时间 C. 宏替换时先求出实参表达式的值,然后代入形参运算求值 D. 宏替换只不过是字符替代而已(分数:1.00)A.B.C. D.解析:解析 宏替换实质上就是字符替代,它不可能进行计算,故 C 错误。带参数的宏与函数相比,宏在程序编译之前已经将代码替换到程序内,执行时不会产生类似于函数调用的问题,可以说不占用运行时间。16.
30、利用 fseek 函数可实现的操作是U /U。 A. 实现文件的顺序读写 B. 改变文件的位置指针 C. 实现文件的随机读写 D. 以上答案均正确(分数:1.00)A.B.C.D. 解析:解析 改变文件位置指针函数 fseek()的功能是:改变文件的位置指针;辅助实现文件的顺序读写;辅助实现文件的随机读写。17.有下列程序:#includestdio.hstructst int(x,y)date2=1,10,2,20;main() structst*p=date;printf(“%d,“,p-y);printf(“%d/n“,(+p)-x);程序的运行结果是U /U。 A.10,1 B.20,
31、1 C.10,2 D.20,2(分数:1.00)A.B.C. D.解析:解析 data2是两个结构体组成的数组,p 指向结构体数组的首地址,p-y 访问第一个结构体的第二个元素;(+p)x 访问第二个结构体的第一个元素。所以输出为 10.2。18.有以下程序#includestdio.hvoid fun(char*c,int d) *c=*c+1;d=d+1;printf(“%c,%c,“*c,d);main() char b=a,a=A;fun(b,a);printf(“%c,%c/n“,b,a);程序运行后的输出结果是_。 A.b,B,b,A B.b,B,B,A C.a,B,B,a D.a
32、,B,a,B(分数:2.00)A. B.C.D.解析:解析 调用 fun 函数输出为加 1 之后的值,fun 函数功能将 main 函数中的 b 自增 1,a 没有变化,所以输出为 A。19.在 DOS 环境下,为了得到 TYPE 命令的帮助信息,正确的 DOS 命令为 A. TYPE B. TYPE/H C. TYPE/* D. TYPE/? (分数:1.00)A.B.C.D. 解析:20.以下叙述中正确的是_。 A.函数名允许用数字开头 B.函数调用时,不必区分函数名称的大小写 C.调用函数时,函数名必须与被调用的函数名完全一致 D.在函数体中只能出现一次 return 语句(分数:1.0
33、0)A.B.C. D.解析:解析 A 选项中,函数名不允许以数字开头;B 选项中,函数调用时,函数名称是需要区分大小写的;D 选项中,在函数中允许有多个 return 语句,但每次调用只能有一个 return 语句被执行。因此 C 选项正确。21.有以下程序struct Sint n;int a20;void f(int *a,int n ) int i;for(i=0;iN-1;i+)NBSP;AI+=I;main() int i;struct S s10,2,3,1,6,8,7,5,4,10,9;f(s.a,s.n);for(i=0;iS.N;i+)NBSP;PRINTF(“%D“,S.A
34、I);程序运行后的输出结果是_。 A. 2,4,3,9,12,12,11,11,18,9, B. 3,4,2,7,9,8,6,5,11,10, C. 2,3,1,6,8,7,5,4,10,9, D. 1,2,3,6,8,7,5,4,10,9,(分数:2.00)A. B.C.D.解析:22. (分数:1.00)A.B. C.D.解析:解析 由于 1 和 2 都是整型,选项 B 中 1/2 的运算结果为 0,故整个表达式的值为 0,所以它的结果和题目中要求的代数式的计算结果不相符。23.下面叙述正确的是( )。 A. 算法的执行效率与数据的存储结构无关 B. 算法的空间复杂度是指算法程序中指令(或
35、语句)的条数 C. 算法的有穷性是指算法必须能在执行有限个步骤之后终止 D. 以上三种描述都不对(分数:1.00)A.B.C. D.解析:解析 算法的执行效率与算法执行过程中所需基本运算的执行次数有关,选项 A 错误;算法的空间复杂度是指执行这个算法所需要的内存空间规模,选项 B 错误;选项 C 正确,故选项 D 不正确。24.对长度为 n 的线性表进行顺序查找,在最坏情况下需要比较的次数为U /U。 A. 125 B. n/2 C. n D. n+1(分数:2.00)A.B.C. D.解析:解析 对线性表进行顺序查找时,从表中的第一个元素开始,将给定的值与表中逐个元素的关键字进行比较,直到两
36、者相符,查找到所要找的元素为止。在最坏情况下,要查找的元素是表的最后一个元素或查找失败,这两种情况都需要将这个元素与表中的所有元素进行比较,因此比较次数为 n。25.已知一棵二叉树前序遍历和中序遍历分别为 ABDEGCFH 和 DBGEACHF,则该二叉树的后序遍历为_。 A. GEDHFBCA B. DGEBHFCA C. ABCDEFGH D. ACBFEDHG(分数:1.00)A.B. C.D.解析:26.有以下程序:#includevoid fun(int*s) static int j=0;do sj=sj+sj+1; while(+j2);main() int k,a10=1,2,
37、3,4,5;for(k=1;k3;k+) fun(a) ;for(k=0;k5;k+) printf(“%d“,ak);printf(“/n“);程序运行后的输山结果是U /U。 A. 12345 B. 23445 C. 34756 D. 35745(分数:2.00)A.B.C.D. 解析:解析 从 main 函数开始,第一个 for 循环:k=1,k3,运行 fun(a) ,s 是指向数组 a 的指针,得 s0=s0+s1=3,s1=s1+s2=5,j=2,退出 fun();接着,执行第二个 for 循环:k=2,k3,运行 fun(A) ,得 s2=s2+s3=7,j=3,退出 fun()
38、;此时,k=3,不再满足循环条件,退出第一个循环,执行第二个循环输出五个数,即 35745。27.函数 rewind 的作用是U /U。 A. 使文件位置指针重新返回文件的开始位置 B. 将文件位置指针指向文件中所要求的特定位置 C. 使文件位置指针指向文件的末尾 D. 使文件位置指针自动移至下一个字符位置(分数:2.00)A. B.C.D.解析:解析 函数 rewind 的功能是将文件指针重新指向一个流的开头。用法如下: void rewind(FILE * stream);28.若已定义 x 和 y 为 double 类型,则表达式 x=1,y=x+3/2 的值是_。 A. 1 B. 2
39、C. 2.0 D. 2.5 (分数:1.00)A.B.C. D.解析:解析 这是一个逗号表达式,它的值应为表达式式 y=3/2 的值,而前一个表达式已给 x 赋值 1,在没有进行类型转换的情况下,3/2 的值为 1,所以 x+3/2 的值应为 2.0。29.下列叙述中正确的是 _。 A. C 程序中注释部分可以出现在程序中任何合适的地方 B. 花括号“和“只能作为函数体的定界符 C. 构成 C 程序的基本单位是函数,所有函数名都可以由用户命名 D. 分号是 C 语句之间的分隔符,不是语句的一部分 (分数:1.00)A. B.C.D.解析:解析 C 程序中注释部分用“/*”和“*/”括起来,可以
40、出现在程序中任何合适的地方;花括号“”和“”不仅可作为函数体的定界符,也可作为复合语句的定界符;构成 C 程序的基本单位是函数;一个语句必须在最后出现分号,分号是 C 语句中不可缺少的部分。30.若运行以下程序时,从键盘输入 ADescriptor (CR表示回车) ,则下面程序的运行结果是( )。#include stdio.hmain() char c; int v0=1, v1=0, v2=0; do(switch(c=getchar() (casea:caseA:case e:case E:case i:case T:case o:case 0:case u:caseU:v1+=1;
41、default:v0+=1; v2+=1; ) while(e!=/n); printf(“v0=%d, v1=%d, v2=%d/n“, v0, v1, v2); ) A. v0=7, v1=4, v2=7 B. v0=8, v1=4, v2=8 C. v0=11, v1=4, v2=11 D. v0=13, v1=4, v2=12(分数:1.00)A.B.C.D. 解析:解析 本题考查 switch 语句的掌握。必须掌握以下内容:首先应该明白 switch 语句的语法格式:switch 语句的语法格式为: switch(表达式) case 常量表达式 1:语句组 1; case 常量表达式
42、 2:语句组 2; case 常量表达式 n:语句组 n; default:语句组 n+1; 另外,以下几点是关于 switch 语句的重点:系统在执行时计算开关表达式的值;根据所得的值在各个 case 标号表达式中寻找匹配,直到发现与表达式匹配的标号(本例中匹配的是 caseA);找到匹配后执行后面相应的语句表,顺序往下执行;如果无相匹配的标号,若存在 default 标号,则执行该语句标号后面的语句表 n+1;当不存在 default标号时,不执行 switch 中的任何一个语句表。 一般而言,在多分支结构中总会出现“意外”的情况,这时均可归入 default 程序段,作统一处理。defa
43、ult 标号是可选性的,不必每次都有,视需要而定。switch 语句中还可以包含 switch 语句,形成 switch 的嵌套。31.对于下列定义,不正确的叙述是U /U。union data int a;char b;double c;x=y; A. 变量 x 所占内存的长度等于成员 c 的长度 B. 变量 x 的地址和它的各成员地址都是相同的 C. 可以在定义时对 x 初始化 D. 不能对变量 x 赋值,故 x=y 非法(分数:1.00)A.B.C. D.解析:解析 本题主要考查的知识点是联合体的内存使用。联合体所占用的内存空间为最长的成员所占用的空间,各个成员分量全部是从低地址方向开始
44、使用内存单元。不能在定义共用体变量时对它初始化。32.以下程序运行后的输出结果是mainU /U float x=2.0,y;if(x0.0) y=0.0;else if(x10.0) y=1.0/x:else y=1.0;printf(“%f/n“,y); A. 0.000000 B. 0.250000 C. 0.500000 D. 1.000000(分数:1.00)A.B.C.D. 解析:解析 本题中,x=2.0,因此执行 else y=1.0,并且以“%f”输出。33.下列程序的输出结果是_。main() int n=4;while(n-)printf(“%d“,-n); A.2 0 B.3 1 C.3 2 1 D.2 1 0(分数:2.00)A. B.C.D.解析:34.下面程序的输出结果是main() int a10=1,2,3,4,5,6,7,8,9,10,*p=a;printf(“%d/n“,*(p+2);