1、二级 C 语言-2-2 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:40.00)1.下列叙述中正确的是_。(分数:1.00)A.栈是“先进先出”的线性表B.队列是“先进后出”的线性表C.循环队列是非线性结构的线性表D.有序线性表既可以采用顺序存储结构,也可以采用链式存储结构2.支持子程序调用的数据结构是_。(分数:1.00)A栈B树C.队列D.二叉树3.某二叉树有 5 个度为 2 的结点,则该二叉树中的叶子结点数是_。(分数:1.00)A.10B.8C.6D.44.下列排序方法中,最坏情况下比较次数最少的是_。(分数:1.00)A.冒泡排序B.简单选择
2、排序C.直接插入排序D.堆排序5.软件按功能可以分为应用软件、系统软件和支撑软件(工具软件),下面属于应用软件的是_。(分数:1.00)A.编译程序B.操作系统C.教务管理系统D.汇编程序6.下面叙述中错误的是_。(分数:1.00)A.软件测试的目的是发现错误并改正错误B.对被调试的程序进行“错误定位”是程序调试的必要步骤C.程序调试通常也称为 DebugD.软件测试应严格执行测试计划,排除测试的随意性7.耦合性和内聚性是对模块独立性度量的两个标准,下列叙述中正确的是_。(分数:1.00)A.提高耦合性降低内聚性有利于提高模块的独立性B.降低耦合性提高内聚性有利于提高模块的独立性C.耦合性是指
3、一个模块内部各个元素间彼此结合的紧密程度D.内聚性是指模块间互相连接的紧密程度8.下列叙述中错误的是_。(分数:1.00)A.在数据库系统中,数据的物理结构必须与逻辑结构一致B.数据库技术的根本目标是要解决数据的共享问题C.数据库设计是指在已有数据库管理系统的基础上建立数据库D.数据库系统需要操作系统的支持9.有两个关系 R,S 如下: R A B C a 3 2 b 0 1 c 2 1 S A B a 3 b 0 c 2 由关系 R 通过运算得到关系 S,则所使用的运算为_。(分数:1.00)A.选择B.投影C.插入D.连接10.将 E-R 图转换为关系模式时,实体和联系都可以表示为_。(分
4、数:1.00)A.属性B键C.关系D域11.以下叙述中错误的是_。(分数:1.00)A.C 语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令B.C 程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件C.用 C 语言编写的程序称为源程序,它以 ASCII 代码形式存放在一个文本文件中D.C 语言源程序经编译后生成后缀为.obj 的目标程序12.以下选项中,合法的一组 C 语言数值常量是_。(分数:1.00)A.12. 0Xa23 4.5e0B.028 .5e-3 -0xfC177 4e1.5 0abcD.0x8A 10,000 3.e513.以下选项中不合法的
5、标识符是_。(分数:1.00)A.printB.FORC.int i=0,k=18;”,则不符合 C 语言规定的赋值语句是_。(分数:1.00)A.i=a%11;B.i=(a+k)=(i+k);C.a=a+,i+;D.i=!a;16.有以下程序 #include stdio.h main() int s,t,A=10;double B=6; s=sizeof(A;t=sizeof(B); printf(“%d,%d/n“,s,t); 在 VC+6.0 平台上编译运行,程序运行后的输出结果是_。(分数:1.00)A.4,8B.4,4C.2,4D.10,617.有以下程序 #include std
6、io.h main() char a,b,c,d; scanf(“%c%c“, c=getchar(); d=getchar(); printf(“%c%c%c%c/n“,a,b,c,d); 当执行程序时,按下列方式输入数据(从第 1 列开始,CR代表回车,注意:回车也是一个字符) 12CR 34CR 则输出结果是_。(分数:1.00)A.12 34B.12C.1234D.12 318.以下关于逻辑运算符两侧运算对象的叙述中正确的是_。(分数:1.00)A.可以是任意合法的表达式B.只能是整数 0 或非 0 整数C.可以是结构体类型的数据D.只能是整数 0 或 119.有以下程序 #inclu
7、de stdio.h main() int a=0,b=0,c=0,d=0; if(a=1) b=1;c=2; else d=3; printf(“%d,%d,%d,%d/n“,a,b,c,d); 程序输出_。(分数:1.00)A.编译有错B.0,0,0,3C.1,1,2,0D.0,1,2,020.有以下程序 #include stdio.h main() int x=1,y=0,a=0,b=0; switch(x) case 1: switch(y) case 0: a+; break; case 1: b+; break; case 2: a+; b+; break; case 3: a+
8、; b+; printf(“a=%d,b=%d/n“,a,b); 程序的运行结果是_。(分数:1.00)A.a=2,b=1B.a=2,b=2C.a=1,b=1D.a=1,b=021.以下程序段中的变量已正确定义 for(i=0;i4;i+,i+) for(k=1;k3;k+); printf(“*“); 程序段的输出结果是_。(分数:1.00)A.*B.*C.*D.*22.有以下程序段 #include stdio.h main() int i,n; for(i=0;i8;i+) n=rand()%5; switch(n) case 1: case 3: printf(“%d/n“,n); b
9、reak; case 2: case 4: printf(“%d/n“,n); continue; case 0: exit(0); printf(“%d/n“,n); 以下关于程序段执行情况的叙述,正确的是_。(分数:1.00)A.当产生的随机数 n 为 0 时,结束程序运行B.当产生的随机数 n 为 4 时,结束循环操作C.当产生的随机数 n 为 1 和 2 时,不做任何操作D.for 循环语句固定执行 8 次23.有以下程序 #include stdio.h int f(int x); main() int n=1,m; m=f(f(f(n); printf(“%d/n“,m); int
10、 f(int x) return x*2; 程序运行后的输出结果是_。(分数:1.00)A.2B.8C.4D.124.以下叙述中错误的是_。(分数:1.00)A.当在程序的开头包含头文件 stdio.h 时,可以给指针变量赋 NULLB.函数可以返回地址值C.改变函数形参的值,不会改变对应实参的值D.可以给指针变量赋一个整数作为地址值25.设已有定义“float x;”,则以下对指针变量 p 进行定义且赋初值的语句中正确的是_。(分数:1.00)A.float *p=B.int *p=(float)x;C.float p=D.float *p=1024;26.以下数组定义中错误的是_。(分数:
11、1.00)A.int x3=1,2,3,4,5,6;B.int x3=0;C.int x23=1,2,3,4,5,6;D.int x23=1,2,3,4,5,6;27.有以下程序 #include stdio.h void fun(int a,int n) int i,t; for(i=0;in/2;i+) t=ai;ai=an-1-i;an-1-i=t; main() int k10=1,2,3,4,5,6,7,8,9,10,i; fun(k,5); for(i=2;i8;i+) printf(“%d“,ki); printf(“/n“); 程序的运行结果是_。(分数:1.00)A.3216
12、78B.876543C.1098765D.34567828.有以下程序 #include stdio.h #define N 4 void fun(int aN,int b) int i; for(i=0;iN;i+) bi=aii-aiN-1-i; main() int xNN=“1,2,3,4,(5,6,7,8,9,10,11,12,13,14,15,16,yN,i; fun(x,y); for(i=0;iN;i+) printf(“%d,“,yi); printf(“/n“); 程序运行后的输出结果是_。(分数:1.00)A.-3,-1,1-3,B.-12,-3,0,0,C.0,1,2,
13、3,D.-3,-3,-3,-3,29.设有定义“char s81; int i=0;”,以下不能将一行(不超过 80 个字符)带有空格的字符串正确读入的语句或语句组是_。(分数:1.00)A.while(si+=getchar()!=“/n“);si=“/0“;B.scanf(“%s“,s);C.gets(s);D.doscanf(“%c“,while(si+!=“/n“);si=“/0“;30.设有定义“char p=“1“,“2“,“3“,*q=p;”,以下不能计算出一个 char 型数据所占字节数的表达式是_。(分数:1.00)A.sizeof(p)B.sizeof(char)C.siz
14、eof(*q)D.sizeof(p0)31.有以下程序 #include stdio.h #include string.h main() char str20=“One*World“,“One*Dream!“,*p=str1; printf(“%d,“,strlen(p); printf(“%s/n“,p); 程序运行后的输出结果是_。(分数:1.00)A.10,One*WorldB.9,One*Dream!C.9,One*WorldD.10,One*Dream!32.有以下程序 #include stdio.h main() char s=“012xy/08s34f4w2“; int i,
15、n=0; for(i=0;si!=0;i+) if(si=“0“ printf(“%d/n“,n); 程序运行后的输出结果是_。(分数:1.00)A.7B.0C.3D.833.有以下程序 #include stdio.h fun(int x,int y) static int m=0,i=2; i+=m+1; m=i+x+y; return m; main() int j=1,m=1,k; k=fun(j,m); printf(“%d,“,k); k=fun(j,m); printf(“%d/n“,k); 执行后的输出结果是_。(分数:1.00)A.5,11B.5,5C.11,11D.11,5
16、34.在 C 语言中,只有在使用时才占用内存单元的变量,其存储类型是_。(分数:1.00)A.auto 和 registerB.extern 和 registerC.auto 和 staticD.static 和 register35.下面结构体的定义语句中,错误的是_。(分数:1.00)A.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;3
17、6.有以下程序 #include stdio.h typedef struct int b,p;A; void f(A c) /* 注意:c 是结构变量名 */ int j; c.b+=1;c.p+=2; main() int i; A a=1,2; f(A); printf(“%d,%d/n“,a.b,a.p); 程序运行后的输出结果是_。(分数:1.00)A.2,4B.1,2C.1,4D.2,337.以下叙述中正确的是_。(分数:1.00)A.在 C 语言中,预处理命令行都以“#”开头B.预处理命令行必须位于 C 源程序的起始位置C.#include stdio.h必须放在 C 程序的开头
18、D.C 语言的预处理不能实现宏定义和条件编译的功能38.有以下程序 #include stdio.h #include stdlib.h int fun(int n) int *p; P=(int*)malloe(sizeof(int); *p=n; return *p; main() int a; a=fun(10); printf(“%d/n“,a+fun(10); 程序的运行结果是_。(分数:1.00)A.20B.10C.0D.出错39.有以下程序 #include stdio.h main() unsigned char a=8, c; c=a3; printf(“%d/n“,c);
19、程序运行后的输出结果是_。(分数:1.00)A.32B.16C.1D.040.读取二进制文件的函数调用形式为“fread(buffer,size,count,fp);”,其中 buffer 代表的是_。(分数:1.00)A.一个内存块的首地址,代表读入数据存放的地址B.一个整型变量,代表待读取的数据的字节数C.一个文件指针,指向待读取的文件D.一个内存块的字节数二、程序填空题(总题数:1,分数:20.00)41.给定程序中,函数 fun 的功能是:将形参 n 中,各位上为偶数的数取出,并按原来从高位到低位的顺序组成一个新的数,并作为函数值返回。 例如,从主函数输入一个整数 27638496,函
20、数返回值为 26846。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在 下的 BLANK1.C 中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include stdio.h unsigned long fun(unsigned long n) unsigned long x=0,s,i; int t; s=n; /*found*/ i= _ 1_ ; /*found*/ while _ 2_ t=s%10; if(t%2=0) /*found*/ x=x+t*i; i= _ 3_ ; s=s/10; return x; main()
21、 unsigned long n=-1; while(n99999999n0) printf(“Please input(0n100000000):“); scanf(“%ld“,) printf(“/nThe result is:%ld/n“,fun(n); (分数:20.00)三、程序改错题(总题数:1,分数:20.00)42.给定程序 MODI1.C 中函数 fun 的功能是:输出 M 行 M 列整数方阵,然后求两条对角线上元素之和,返回此和数。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #inclu
22、de stdio.h #define M 5 /*found*/ int fun(int n,int xx) int i,j,sum=0; printf(“/nThe%d x %d matrix:/n“,M,M); for(i=0;iM;i+) for(j=0;jM;j+) /*found*/ printf(“%f“,xxij); printf(“/n“); for(i=0;in;i+) sum+=xxii+xxin-i-1; return(sum); main() int aaMM=1,2,3,4,5,4,3,2,1,0, 6,7,8,9,0,9,8,7,6,5,3,4,5,6,7; pri
23、ntf(“/nThe sum of all elements on 2 diagnals is%d.“,mn(M,aa); (分数:20.00)_四、程序设计题(总题数:1,分数:20.00)43.函数 fun 的功能是:将 a、b 中的两个两位正整数合并形成一个新的整数放在 c 中。合并的方式是:将a 中的十位和个位数依次放在变量 c 的千位和十位上,b 中的十位和个位数依次放在变量 c 的个位和百位上。 例如,当 a=45,b=12,调用该函数后,c=4251。 注意:部分源程序存在文件 PROG1.C 中。数据文件 IN.DAT 中的数据不得修改。 请勿改动主函数 main 和其他函数中
24、的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 给定源程序: #include stdio.h void fun(int a,int b,long *c) main() int a,b;long c; printf(“Input a b:“); scanf(“%d%d“, fun(a,b, printf(“The result is:%ld/n“,c); (分数:20.00)_二级 C 语言-2-2 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:40.00)1.下列叙述中正确的是_。(分数:1.00)A.栈是“先进先出”的线性表B.队列是“
25、先进后出”的线性表C.循环队列是非线性结构的线性表D.有序线性表既可以采用顺序存储结构,也可以采用链式存储结构 解析:解析 栈是先进后出的线性表,因此 A 错误;队列是先进先出的线性表,因此 B 错误;循环队列是线性结构的线性表,因此 C 错误,故本题答案为 D。2.支持子程序调用的数据结构是_。(分数:1.00)A栈 B树C.队列D.二叉树解析:解析 栈支持子程序调用。栈是一种只能在一端进行插入或删除的线性表,在主程序调用子程序时要首先保存主程序当前的状态,然后转去执行子程序,最终把子程序的执行结果返回到主程序中调用子程序的位置,然后继续向下执行,这种调用方式符合栈的特点,因此本题的答案为
26、A。3.某二叉树有 5 个度为 2 的结点,则该二叉树中的叶子结点数是_。(分数:1.00)A.10B.8C.6 D.4解析:解析 根据二叉树的基本性质 3:在任意一棵二叉树中,度为 0 的叶子结点总是比度为 2 的结点多一个,因此本题答案是 5+1=6,故选择 C。4.下列排序方法中,最坏情况下比较次数最少的是_。(分数:1.00)A.冒泡排序B.简单选择排序C.直接插入排序D.堆排序 解析:解析 冒泡排序、直接插入排序与简单选择排序法在最坏情况下均需要比较 n(n-1)/2 次,而堆排序在最坏情况下需要比较的次数是 nlog 2 n,因此本题答案为 D。5.软件按功能可以分为应用软件、系统
27、软件和支撑软件(工具软件),下面属于应用软件的是_。(分数:1.00)A.编译程序B.操作系统C.教务管理系统 D.汇编程序解析:解析 编译程序、操作系统、汇编程序都属于系统软件,只有教务管理系统才是应用软件,因此本题答案为 C。6.下面叙述中错误的是_。(分数:1.00)A.软件测试的目的是发现错误并改正错误 B.对被调试的程序进行“错误定位”是程序调试的必要步骤C.程序调试通常也称为 DebugD.软件测试应严格执行测试计划,排除测试的随意性解析:解析 软件测试的目的是为了发现错误而执行程序的过程,并不涉及改正错误,因此选项 A 错误。程序调试的基本步骤有:错误定位、修改设计和代码以排除错
28、误、进行回归测试以防止引进新的错误。程序调试通常称为 Debug,即排错。软件测试的基本准则包括:所有测试都应追溯到需求、严格执行测试计划,排除测试的随意性、充分注意测试中的群集现象、程序员应避免检查自己的程序、不可能实现穷举测试、妥善保存测试计划等文件。7.耦合性和内聚性是对模块独立性度量的两个标准,下列叙述中正确的是_。(分数:1.00)A.提高耦合性降低内聚性有利于提高模块的独立性B.降低耦合性提高内聚性有利于提高模块的独立性 C.耦合性是指一个模块内部各个元素间彼此结合的紧密程度D.内聚性是指模块间互相连接的紧密程度解析:解析 模块独立性是指每个模块只完成系统要求的独立的子功能,并且与
29、其他模块的联系最少且接口简单。一般较优秀的软件设计应尽量做到高内聚、低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性,因此 A 错误,B 正确。耦合性是模块间互相连接的紧密程度的度量,内聚性是指一个模块内部各个元素间彼此结合的紧密程度,因此 C 与 D 错误。8.下列叙述中错误的是_。(分数:1.00)A.在数据库系统中,数据的物理结构必须与逻辑结构一致 B.数据库技术的根本目标是要解决数据的共享问题C.数据库设计是指在已有数据库管理系统的基础上建立数据库D.数据库系统需要操作系统的支持解析:解析 数据库应用系统中的核心问题是设计一个能满足用户需求、性能良好的数据库,
30、这就是数据库设计,因此本题答案为 A。9.有两个关系 R,S 如下: R A B C a 3 2 b 0 1 c 2 1 S A B a 3 b 0 c 2 由关系 R 通过运算得到关系 S,则所使用的运算为_。(分数:1.00)A.选择B.投影 C.插入D.连接解析:解析 投影运算是从关系模式中挑选若干属性组成新的关系,这是从列的角度进行的运算,相当于对关系进行垂直分解。本题中,S 是在原有关系 R 的内部进行的,是由 R 中原有的那些域的列所组成的关系,因此选择 B。10.将 E-R 图转换为关系模式时,实体和联系都可以表示为_。(分数:1.00)A.属性B键C.关系 D域解析:解析 从
31、E-R 图到关系模式的转换是比较直接的,实体与联系都可以表示成关系,E-R 图中属性也可以转换成关系的属性,因此本题答案为 C。11.以下叙述中错误的是_。(分数:1.00)A.C 语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令 B.C 程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件C.用 C 语言编写的程序称为源程序,它以 ASCII 代码形式存放在一个文本文件中D.C 语言源程序经编译后生成后缀为.obj 的目标程序解析:解析 C 语言中的非执行语句不会被编译,不会生成二进制的机器指令,因此 A 选项错误。由 C语言构成的指令序列称为 C 源程序,
32、C 源程序经过 C 语言编译程序编译之后生成一个后缀为.obj 的二进制文件(称为目标文件);最后要由“连接程序”把此“.obj”文件与 C 语言提供的各种库函数连接起来生成一个后缀为“.exe”的可执行文件。根据上述分析可知,A 选项叙述错误。12.以下选项中,合法的一组 C 语言数值常量是_。(分数:1.00)A.12. 0Xa23 4.5e0 B.028 .5e-3 -0xfC177 4e1.5 0abcD.0x8A 10,000 3.e5解析:解析 C 语言中八进制整型常量的开头是数字 0,十六进制整型常量的开头是数字 0x。C 语言中的实型常量有两种表示形式:小数形式,小数形式表示的
33、实型常量必须要有小数点;指数形式,以“e”或“E”后跟一个整数来表示以 10 为底数的幂数,且规定字母 e 或 E 之前必须要有数字,且 e 或 E 后面的指数必须为整数。B 选项中 028 错误,八进制中没有数字 8。C 选项中“4e1.5”中 e 后面的指数不是整数。D 选项中“3.e5”小数点后面缺少数字。因此本题答案为 A。13.以下选项中不合法的标识符是_。(分数:1.00)A.printB.FORC.int i=0,k=18;”,则不符合 C 语言规定的赋值语句是_。(分数:1.00)A.i=a%11;B.i=(a+k)=(i+k); C.a=a+,i+;D.i=!a;解析:解析
34、取模运算符“%”为二元运算符,具有左结合性,参与运算的量应均为整型,选项 B 中的变量 a 是 double 型,所以选项 B 不符合规定。16.有以下程序 #include stdio.h main() int s,t,A=10;double B=6; s=sizeof(A;t=sizeof(B); printf(“%d,%d/n“,s,t); 在 VC+6.0 平台上编译运行,程序运行后的输出结果是_。(分数:1.00)A.4,8 B.4,4C.2,4D.10,6解析:解析 C 语言中利用“sizeof()”函数判断数据类型长度,在 VC 6 平台中,整型数据 int 占 4 个字节,do
35、uble 型数据占 8 个字节。因此本题答案为 A。17.有以下程序 #include stdio.h main() char a,b,c,d; scanf(“%c%c“, c=getchar(); d=getchar(); printf(“%c%c%c%c/n“,a,b,c,d); 当执行程序时,按下列方式输入数据(从第 1 列开始,CR代表回车,注意:回车也是一个字符) 12CR 34CR 则输出结果是_。(分数:1.00)A.12 34B.12C.1234D.12 3 解析:解析 按照从键盘输入的数据可以判断字符 1 赋给了变量 a,字符 2 赋给了变量 b,字符CR即回车赋给了变量 c
36、,字符 3 赋给了变量 d。因此打印输出的结果为选项 D。18.以下关于逻辑运算符两侧运算对象的叙述中正确的是_。(分数:1.00)A.可以是任意合法的表达式 B.只能是整数 0 或非 0 整数C.可以是结构体类型的数据D.只能是整数 0 或 1解析:解析 C 语言的逻辑运算符比较特别,它的操作数没有明确的数据类型,可以是任意合法的表达式,因此选择 A。19.有以下程序 #include stdio.h main() int a=0,b=0,c=0,d=0; if(a=1) b=1;c=2; else d=3; printf(“%d,%d,%d,%d/n“,a,b,c,d); 程序输出_。(分
37、数:1.00)A.编译有错 B.0,0,0,3C.1,1,2,0D.0,1,2,0解析:解析 本题中“if(a=1)b=1;”与“else d=3;”之间多了语句“c=2”;因此会出现 else 语句的位置错误的编译失败提示。20.有以下程序 #include stdio.h main() int x=1,y=0,a=0,b=0; switch(x) case 1: switch(y) case 0: a+; break; case 1: b+; break; case 2: a+; b+; break; case 3: a+; b+; printf(“a=%d,b=%d/n“,a,b); 程
38、序的运行结果是_。(分数:1.00)A.a=2,b=1 B.a=2,b=2C.a=1,b=1D.a=1,b=0解析:解析 case 常量表达式只是起语句标号作用,并不是该处进行条件判断。在执行 switch 语句时,根据 switch 的表达式,找到与之匹配的 case 语句,就从该 case 子句执行下去,不再进行判断,直到碰到 break 或语句结束为止。因此执行内层“switch(y)”时只执行了 a+,此时 a 的值为 1,然后执行外层case 2 语句的“a+;b+;”,a 为 2,b 为 1。所以结果为 A。21.以下程序段中的变量已正确定义 for(i=0;i4;i+,i+) f
39、or(k=1;k3;k+); printf(“*“); 程序段的输出结果是_。(分数:1.00)A.*B.*C.* D.*解析:解析 由于内层循环“for(k=1;k3;k+)”后面直接跟了空语句“;”,因此在循环内部什么操作也不做,执行完内层循环后执行打印语句,所以打印了一个“*”,故本题答案 C。22.有以下程序段 #include stdio.h main() int i,n; for(i=0;i8;i+) n=rand()%5; switch(n) case 1: case 3: printf(“%d/n“,n); break; case 2: case 4: printf(“%d/n
40、“,n); continue; case 0: exit(0); printf(“%d/n“,n); 以下关于程序段执行情况的叙述,正确的是_。(分数:1.00)A.当产生的随机数 n 为 0 时,结束程序运行 B.当产生的随机数 n 为 4 时,结束循环操作C.当产生的随机数 n 为 1 和 2 时,不做任何操作D.for 循环语句固定执行 8 次解析:解析 case 常量表达式只是起语句标号作用,并不是在该处进行条件判断。在执行 switch 语句时,根据 switch 的表达式,找到与之匹配的 case 语句,就从该 case 子句执行下去,不再进行判断,直到碰到 break 或函数结束
41、为止。简单地说,break 是结束整个循环体,而 continue 是结束单次循环。B 选项中当产生的随机数 n 为 4 时要执行打印操作。C 选项中当产生的随机数为 1 和 2 时分别执行 case 3 与case 4 后面语句的内容。由于存在 break 语句,因此 for 循环不是固定执行 8 次,执行次数与产生的随机数 n 有关系。故本题答案为 A。23.有以下程序 #include stdio.h int f(int x); main() int n=1,m; m=f(f(f(n); printf(“%d/n“,m); int f(int x) return x*2; 程序运行后的输
42、出结果是_。(分数:1.00)A.2B.8 C.4D.1解析:解析 第一次调用“m=f(f(f1)”,第二次为“m=f(f2)”,第三次为“m=f(4)”,即返回值为8,选项 B 正确。24.以下叙述中错误的是_。(分数:1.00)A.当在程序的开头包含头文件 stdio.h 时,可以给指针变量赋 NULLB.函数可以返回地址值C.改变函数形参的值,不会改变对应实参的值D.可以给指针变量赋一个整数作为地址值 解析:解析 不能将一个整数直接赋给指针变量作为地址,因此 D 是错误的。函数的返回值可以是地址,即指针。函数调用中形参值的变化不会传递给实参。故本题答案为 D。25.设已有定义“float
43、 x;”,则以下对指针变量 p 进行定义且赋初值的语句中正确的是_。(分数:1.00)A.float *p= B.int *p=(float)x;C.float p=D.float *p=1024;解析:解析 指针是用来存放地址的变量,用“类型名*指针变量名”的形式定义。赋值时应将某个变量地址即B.int x3=0;C.int x23=1,2,3,4,5,6; D.int x23=1,2,3,4,5,6;解析:解析 C 选项中 x23定义的是一个 2 行 3 列的二维数组,而在给数组元素赋值时却赋成了 3 行,因此错误。27.有以下程序 #include stdio.h void fun(in
44、t a,int n) int i,t; for(i=0;in/2;i+) t=ai;ai=an-1-i;an-1-i=t; main() int k10=1,2,3,4,5,6,7,8,9,10,i; fun(k,5); for(i=2;i8;i+) printf(“%d“,ki); printf(“/n“); 程序的运行结果是_。(分数:1.00)A.321678 B.876543C.1098765D.345678解析:解析 本题中,函数 fun()的功能是将数组 k 中前 5 个元素倒序,因此返回后数组 k 中的元素排列是“5,4,3,2,1,6,7,8,9,10”。程序打印输出 k2到
45、k7元素的值,即 321678,所以选择 A。28.有以下程序 #include stdio.h #define N 4 void fun(int aN,int b) int i; for(i=0;iN;i+) bi=aii-aiN-1-i; main() int xNN=“1,2,3,4,(5,6,7,8,9,10,11,12,13,14,15,16,yN,i; fun(x,y); for(i=0;iN;i+) printf(“%d,“,yi); printf(“/n“); 程序运行后的输出结果是_。(分数:1.00)A.-3,-1,1-3, B.-12,-3,0,0,C.0,1,2,3,D.-3,-3,-3,-3,解析:解析 本题中由 fun 函数可知,b0=a00-a03=1-4=-3,b1=a11-a12=6-7=-1,b2=a22-a21=11-10=1,b3=a33-a31=16-13=3。因此主函数中打印 y 数组元素的值为 A 选项。29.设有定义“char s81; int i=0;”,以