1、国家二级(C 语言)机试模拟试卷 139及答案解析(总分:86.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.软件的需求分析主要产生的文档是( )。(分数:2.00)A.可行性分析报告B.软件需求规格说明书C.概要设计说明书D.集成测试计划2.以下哪一项不是结构化程序设计的基本原则?( )(分数:2.00)A.多态性B.自顶向下C.模块化D.逐步求精3.软件设计中划分模块的基本准则是( )。(分数:2.00)A.低内聚低耦合B.高内聚低耦合C.低内聚高耦合D.高内聚高耦合4.箭头线在流程图中的意思是( )。(分数:2.00)A.函数关系B.数据流C.控制流D.判断
2、关系5.计算机算法中有穷性的意思是( )。(分数:2.00)A.算法程序的运行时间是有限的B.算法程序所处理的数据量是有限的C.算法程序的长度是有限的D.算法只能被有限的用户使用6.对长度为 n的线性表排序,在最坏情况下,比较次数不是 n(n1)2 的排序方法是( )。(分数:2.00)A.快速排序B.冒泡排序C.直接插入排序D.堆排序7.关于计算机术语中的栈,说法正确的是( )。(分数:2.00)A.栈按“先进先出”组织数据B.栈按“先进后出”组织数据C.只能在栈底插入数据D.不能删除数据8.在数据库设计过程的哪个阶段,需要将 E一 R图转换成关系数据模型( )。(分数:2.00)A.需求分
3、析阶段B.概念设计阶段C.逻辑设计阶段D.物理设计阶段9.有三个关系 R、S 和 T如下: (分数:2.00)A.并B.自然连接C.笛卡尔积D.交10.在数据库设计中,有三张关于学生选课的数据表,分别是学生信息表 Stu(其中包括:学生的学号,姓名,性别,年龄,身份证号),课程信息表 Cou(其中包括:课程代号,课程名称),选课信息表 SC(其中包括:学生的学号,课程代号,课程成绩),则表 SC的关键字(键或码)为( )。(分数:2.00)A.课程代号,课程成绩B.学号,课程成绩C.学号,课程代号D.学号,姓名,课程成绩11.关于 C语言程序设计,以下叙述中不正确的是( )。(分数:2.00)
4、A.C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令B.C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件C.用 C语言编写的程序称为源程序,它以 ASC代码形式存放在一个文本文件中D.C语言源程序经编译后生成后缀为obj 的目标程序12.以下关于 C语言数值常量的选项中,合法的是( )。(分数:2.00)A.120Xa23 45e0B.0285e 一 3一 0xfC.177 4e15 0abcD.0x8A 10,000 3e513.若有定义:double d=68;int i=0,k=21;,则以下选项中不符合 C语言规定的赋值语句是( )。(分数:2
5、.00)A.i一(d+k)=(i+k);B.i=d3;C.d=(d+,i+);D.i=(int)!d;14.若有代数式 (分数:2.00)A.sqrt(fabs(pow(n,x)+exp(x)B.sqrt(fabs(pow(n,x)+pow(x,e)C.sqrt(abs(n x+e x)D.sqrt(fabs(pow(x,n)+exp(x)15.有关 C语言标识符,以下选项中不合法的是( )。(分数:2.00)A.&aB.FORC.printD._0016.有以下序: #include void main() int num1,num2; int i=10; double d=1234: nu
6、nl=sizeof(i);num2=sizeof(d); pfintf(d,dn,s1,s2); 在 VC 60 平台上编译运行,程序运行后的输出结果是( )。(分数:2.00)A.16,4B.2,8C.4,8D.1,417.有以下程序: #nclude void main() char a,b,c,d; scanf(cc,&a,&b); c=getchar();d=getchar(); pfintf(ccccn,a,b,c,d); 运行程序后输入数据(代表回车符) 34 56 则输出结果是( )。(分数:2.00)A.34B.3456C.34D.3418.以下关于 C语言中逻辑运算符两侧运算
7、对象的叙述中正确的是( )。(分数:2.00)A.只能是整数 0或非 0整数B.可以是任意合法的表达式C.可以是结构体类型的数据D.只能是整数 0或 119.有以下程序: #nelude main() int a=0,b=0,C=0,d=0; if(a=1)b=1;c=2; else d=3; pfintf(d,d,d,dn,a,b,c,d); 程序运行后的输出结果是( )。(分数:2.00)A.1,1,2,0B.0,0,0,3C.编译有错D.0,1,2,020.有以下程序: #include main() int x=1,y=0,a=0,b=0; switch(x) case 1: swit
8、ch(y) case 0:a+;break; case 1:b+;break; case 2:a+;b+;break; case 3:a+;b+; printf(a=d,b=dn,a,b); 程序运行后的输出结果是( )。(分数:2.00)A.a=2,b=2B.a=2,b=1C.a=1,b=1D.a=1,b=021.以下程序段中的变量已正确定义:for(i=0;i4;i+,i+)for(k=l;k3;k+);printf(*);程序段的输出结果是( )。(分数:2.00)A.*B.*C.*D.*22.有以下程序段: #nclude int i,n; for(i=0;i8;i+) n=rand(
9、)5; switch(n) case 1: case 3:printf(dn,n);break; case 2: case 4:printf(dn,n);continue; case 0:exit(0); pfintf(dn,n); 以下关于程序段执行情况的叙述,正确的是( )。(分数:2.00)A.for循环语句固定执行 8次B.当产生的随机数 n为 4时结束循环操作C.当产生的随机数 n为 1和 2时不做任何操作D.当产生的随机数 n为 0时结束程序运行23.有以下程序: #include int f(int x); main() int n=1,m; m=f(f(f(n);printf(
10、dn,m); int f(int x) retum x*2; 程序运行后的输出结果是( )。(分数:2.00)A.8B.2C.4D.124.以下叙述中错误的是( )。(分数:2.00)A.可以给指针变量赋一个整数作为地址值B.函数可以返回地址值C.改变函数形参的值,不会改变对应实参的值D.当在程序的开头包含头文件 stdioh 时,可以给指针变量赋 NULL25.设已有定义:float x;,则以下对指针变量 P进行定义且赋初值的语句中正确的是( )。(分数:2.00)A.int*p=(float)x;B.float*p=&x;C.float p=&x;D.float*p=1024;26.以下
11、数组定义中错误的是( )。(分数:2.00)A.int x 23=1,2,3,4,5,6;B.int x3=0;C.int x3=1,2,3,4,5,6;D.int x 23=1,2,3,4,5,6;27.有以下程序:#includestdiohvoid fun(int a,int n) int i,t;for(i=0;in2;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);程序运行后的输出结果是( )。(分数:
12、2.00)A.321678B.876543C.1098765D.34567828.有以下程序: #include #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); 程序运行后的输出结果是( )。(分数:2.00)A.一 3,一 1,1,3B.12,3,0,0C.0,1,2,3D.一
13、3,一 3,一 3,一 329.设有定义:char s81;int i=0;,以下不能将一行(不超过 80个字符)带有空格的字符串正确读入的语句或语句组是( )。(分数:2.00)A.gets(s);B.while(si+=getchar()!=n);si=0;C.scanf(s,s);D.doscanf(c,&si);while(si+!=n);si=0;30.设有定义:char P=1,2,3,*q=p;,以下不能计算出一个 char型数据所占字节数的表达式是( )。(分数:2.00)A.sizeof(p)B.sizeof(char)C.sizeof(*q)D.sizeof(p0)31.有
14、以下程序: #include #include main() char str20=One*World,One*Dream!,*p=str1; printf(d,strlen(p);printf(sn,p); 程序运行后的输出结果是( )。(分数:2.00)A.10,One*Dream!B.9,One*Dream!C.9,One*WorldD.10,One*World32.有以下程序: #nclude main() char s=012xy08s34f4w2; int i,n=0; for(i=0;si!=0;i+) if(si=0&si=9)n+; printf(dn,n); 程序运行后的输
15、出结果是( )。(分数:2.00)A.0B.3C.7D.833.有以下程序: #include 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(dn,k); 程序执行后的输出结果是( )。(分数:2.00)A.5,11B.5,5C.11,11D.11,534.在 C语言中,只有在使用时才占用内存单元的变量,其存储类型是( )。(分数:2.00)A.auto和 staticB.extem和 re
16、gisterC.auto和 registerD.static和 register35.下面结构体的定义语句中,错误的是( )。(分数:2.00)A.struct ordint x;int y;int z;struct ord a;B.struct ordint x;int y;intz;struct ord a;C.struct ordint x;int y;int z;a;D.structim x;int y;int z;a;36.有以下程序: #ineludestdiohtypedef structint b,p;A;void f(A c)*注意:C 是结构变量名*int j;cb+=1:
17、cp+=2;main()int i;A a=1,2;f(a); printf(d,dn,ab,ap);程序运行后的输出结果是( )。(分数:2.00)A.2,4B.1,2C.1,4D.2,337.读取二进制文件的函数调用形式为:fread(buffer,size,count,fp);,其中 buffer代表的是( )。(分数:2.00)A.一个内存块的字节数B.一个整型变量,代表待读取的数据的字节数C.一个文件指针,指向待读取的文件D.一个内存块的首地址,代表读人数据存放的地址38.有以下程序: #include #include int fun(int n) int*p; p=(int*)m
18、alloc(sizeof(int); *P=n;return*p; main() int a; a=fun(10);printf(dn,a+fun(10); 程序运行后的输出结果是( )。(分数:2.00)A.0B.10C.20D.出错39.有以下程序: #include main() unsigned char a=8,c; c=a3; printf(dn,c); 程序运行后的输出结果是( )。(分数:2.00)A.16B.1C.32D.040.以下叙述中正确的是( )。(分数:2.00)A.在 C语言中,预处理命令行都以“#”开头B.预处理命令行必须位于 C源程序的起始位置C.#inclu
19、de必须放在 C程序的开头D.C语言的预处理不能实现宏定义和条件编译的功能二、程序填空题(总题数:1,分数:2.00)41.下列给定程序的功能是:从键盘输入若干行字符串(每行不超过 80个字符),写入文件 myfile4txt中,用#作字符串输入结束的标志,然后将文件的内容显示在屏幕上。文件的读写分别由函数 ReadText和 WriteText实现。 请在程序的下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANK1C 中。不得增行或删行,也不得更改程序的结构! #include #include #include void WriteText(FI
20、LE*); void ReadText(FILE*); main() FILE*fp; if(fp=fopen(myfile4txt,W)=NULL) printf(open fail!n);exit(0); WriteText(fp); fclose(fp); if(fp=fopen(myfile4txt,r)=NULL) printf(open fail!1n);exit(0); ReadText(fp); fclose(fp); *found* void WfiteText(FILE【1】) char str81; printf(nEnter string with #to end:n)
21、; gets(str); while(strcmp(str,#1)!=0) *found* fputs(【2】,tw);fputs(n,fw); gets(str); void ReadText(FILE*fr) char str81; printf(Read file and output to screen:n); fgets(str,81,fr); while(!feof(fr) *found* printf(s,【3】); fgets(str,81,fr); (分数:2.00)_三、程序修改题(总题数:1,分数:2.00)42.下列给定程序中,函数 fun的功能是:从整数 10到 55
22、之间,查找能被 3整除且有一位上的数值是 5的数,把这些数放在 b所指的数组中,这些数的个数作为函数值返回。规定函数中 a1放个位数,a2 放十位数。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件 MOD11C 中,不得增行或删行,也不得更改程序的结构!#ncludestdiohintfun(int*b)int k,a1,a2,i=0;for(k=10;k=55;k+)*found*a2=k100;al=k 一a2*10;if(k3=0&a2=5)(k3=0&a1=5)bi=k;i+;*found*return k;main()int a100,k,m;m=fun(a);pr
23、intf(The result is:n);for(k=0;km;k+)printf(4d,ak);printf(n);(分数:2.00)_四、程序设计题(总题数:1,分数:2.00)43.某学生的记录由学号、8 门课程成绩和平均分组成,学号和 8门课程的成绩已在主函数中给出,请编写函数 fun,其功能是:求出该学生的平均分,并放入记录的 ave成员中。例如,学生的成绩是:855,76,695,85,91,72,645,875,则他的平均分应为 78875。注意:部分源程序在文件PROGlC 中。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。#
24、includestdioh#define N 8typedef structchar num10;double sN;double ave;STREC;void fun(STREC*a)main()STREC s=GA005,855,76,695,85,91,72,645,875;int i;void NONO();fun(&s);printf(Thessstudentdata:nsnum);for(i=0;iN;i+)printf(41fn,ssi);printf(nave=73fn,save);NONO();void NONO()*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件
25、。*FILE*out;int i,j;STREC s10=GA005,855,76,695,85,91,72,645,875,GA001,825,66,765,76,89,76,465,785,GA002,725,56,665,66,79,68,465,585,GA003,925,76,865,86,99,86,565,885,GA004,82,665,465,56,76,75,765,635,GA006,755,74,715,85,81,79,645,715,GA007,925,61,725,84,79,75,665,725,GA008,725,86,735,80,69,63,765,535
26、,GA009,665,71,745,70,61,82,865,585,GA010,76,665,755,60,76,71,965,935,;out=fopen(outdat,W);for(i=0;i10;i+)fun(&si);fprintf(out,73fn,siave);fclose(out);(分数:2.00)_国家二级(C 语言)机试模拟试卷 139答案解析(总分:86.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.软件的需求分析主要产生的文档是( )。(分数:2.00)A.可行性分析报告B.软件需求规格说明书 C.概要设计说明书D.集成测试计划解析:解析
27、:A 错误,可行性分析阶段产生可行性分析报告。C 错误,概要设计说明书是总体设计阶段产生的文档。D 错误,集成测试计划是在概要设计阶段编写的文档。B 正确,需求规格说明书是后续工作如设计、编码等需要的重要参考文档。2.以下哪一项不是结构化程序设计的基本原则?( )(分数:2.00)A.多态性 B.自顶向下C.模块化D.逐步求精解析:解析:结构化程序设计的思想包括:自顶向下、逐步求精、模块化,不包括多态性。3.软件设计中划分模块的基本准则是( )。(分数:2.00)A.低内聚低耦合B.高内聚低耦合 C.低内聚高耦合D.高内聚高耦合解析:解析:软件设计中模块划分应遵循的准则是高内聚低偶合、模块大小
28、规模适当、模块的依赖关系适当等。模块的划分应遵循一定的要求,以保证模块划分合理,并进一步保证以此为依据开发出的软件系统可靠性强,易于理解和维护。模块之间的耦合应尽可能地低,模块的内聚度应尽可能地高。4.箭头线在流程图中的意思是( )。(分数:2.00)A.函数关系B.数据流C.控制流 D.判断关系解析:解析:在程序的数据流图中,用标有名字的箭头表示数据流。在程序流程图中,用标有名字的箭头表示控制流。5.计算机算法中有穷性的意思是( )。(分数:2.00)A.算法程序的运行时间是有限的 B.算法程序所处理的数据量是有限的C.算法程序的长度是有限的D.算法只能被有限的用户使用解析:解析:算法原则上
29、能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。有穷性是指算法程序的运行时间是有限的。6.对长度为 n的线性表排序,在最坏情况下,比较次数不是 n(n1)2 的排序方法是( )。(分数:2.00)A.快速排序B.冒泡排序C.直接插入排序D.堆排序 解析:解析:除了堆排序算法的比较次数是(nlog 2 n),其他的都是 n(n一 1)2。7.关于计算机术语中的栈,说法正确的是( )。(分数:2.00)A.栈按“先进先出”组织数据B.栈按“先进后出”组织数据 C.只能在栈底插入数据D.不能删除数据解析:解析:栈是按“先进后出”的原则组织数据的,数据的插入和删除都在栈顶进行操作。8.在数据库
30、设计过程的哪个阶段,需要将 E一 R图转换成关系数据模型( )。(分数:2.00)A.需求分析阶段B.概念设计阶段C.逻辑设计阶段 D.物理设计阶段解析:解析:ER 图转换成关系模型数据则是把图形分析出来的联系反映到数据库中,即设计出表,所以属于逻辑设计阶段。9.有三个关系 R、S 和 T如下: (分数:2.00)A.并B.自然连接C.笛卡尔积D.交 解析:解析:自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,所以 B错误。笛卡尔积是用 R集合中元素为第一元素,S 集合中元素为第二元素构成的有序对,所以 C错误。根据关系 T可以很
31、明显地看出是从关系 R与关系 S中取得相同的关系组所以取得是交运算,选择 D。10.在数据库设计中,有三张关于学生选课的数据表,分别是学生信息表 Stu(其中包括:学生的学号,姓名,性别,年龄,身份证号),课程信息表 Cou(其中包括:课程代号,课程名称),选课信息表 SC(其中包括:学生的学号,课程代号,课程成绩),则表 SC的关键字(键或码)为( )。(分数:2.00)A.课程代号,课程成绩B.学号,课程成绩C.学号,课程代号 D.学号,姓名,课程成绩解析:解析:学号是学生表 S的主键,课号是课程表 C的主键,所以选课表 SC的关键字就应该是与前两个表能够直接联系且能唯一定义的学号和课号,
32、所以选择 C。11.关于 C语言程序设计,以下叙述中不正确的是( )。(分数:2.00)A.C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令 B.C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件C.用 C语言编写的程序称为源程序,它以 ASC代码形式存放在一个文本文件中D.C语言源程序经编译后生成后缀为obj 的目标程序解析:解析:C 语言中的非执行语句不会被编译,不会生成二进制的机器指令,所以 A错误。由 C语言构成的指令序列称 C源程序,C 源程序经过 C语言编译程序编译之后生成一个后缀为obj 的二进制文件(称为目标文件);最后要由“连接程序”把
33、此obi 文件与 C语言提供的各种库函数连接起来生成一个后缀为EXE 的可执行文件。12.以下关于 C语言数值常量的选项中,合法的是( )。(分数:2.00)A.120Xa23 45e0 B.0285e 一 3一 0xfC.177 4e15 0abcD.0x8A 10,000 3e5解析:解析:C 语言中八进制整型常量的开头是数字 0,十六进制整型常量的数字开头是 0x;但八进制不能有 8或 9,所以选项 B错,C 选项中 2e12 中 e后面的指数不是整数,D 选项中 3e5 小数点后面缺少数字,另外。也不用用逗号作为千分位分隔符。13.若有定义:double d=68;int i=0,k=
34、21;,则以下选项中不符合 C语言规定的赋值语句是( )。(分数:2.00)A.i一(d+k)=(i+k);B.i=d3; C.d=(d+,i+);D.i=(int)!d;解析:解析:只有整数才能求余,d 是双精度型,所以不能求余,选项 B不符合 C语言赋值规定。选项 A和 D将进行强制数据转换,选项 C为变量自加,逗号运算符和赋值运算符连用,都符合 C语言规范。14.若有代数式 (分数:2.00)A.sqrt(fabs(pow(n,x)+exp(x) B.sqrt(fabs(pow(n,x)+pow(x,e)C.sqrt(abs(n x+e x)D.sqrt(fabs(pow(x,n)+ex
35、p(x)解析:解析:B 选项中函数 pow(x,e)错误应该直接使用 exp(x)函数。C 选项中函数 abs(n x+e x)错误,应该使用 fabs()返回浮点数的绝对值。D 选项中 pow(x,n)参数顺序错误。15.有关 C语言标识符,以下选项中不合法的是( )。(分数:2.00)A.&a B.FORC.printD._00解析:解析:C 语言中标识符由字母、下划线、数字组成,且开头必须是字母或下划线。另外,关键字不能作为标识符。因为 C语言中区分大小写,所以 B选项中的“FOR”可以作为标识符来用。A)选项中含有非法字符&,所以选择 A。16.有以下序: #include void
36、main() int num1,num2; int i=10; double d=1234: nunl=sizeof(i);num2=sizeof(d); pfintf(d,dn,s1,s2); 在 VC 60 平台上编译运行,程序运行后的输出结果是( )。(分数:2.00)A.16,4B.2,8C.4,8 D.1,4解析:解析:sizeof()函数用来获取数据类型的存储空间大小(字节数),整型和双精度型在 C语言中分别占用 4个字节和 8个字节,所以选项 C正确。17.有以下程序: #nclude void main() char a,b,c,d; scanf(cc,&a,&b); c=ge
37、tchar();d=getchar(); pfintf(ccccn,a,b,c,d); 运行程序后输入数据(代表回车符) 34 56 则输出结果是( )。(分数:2.00)A.34B.3456C.34D.34 解析:解析:用格式符c 输入字符时,回车符是分隔符,不能被输入,但 getchar()可以接收包括回车符在内的字符,所以程序运行时输入的第一个回车符将被字符变量 c接收,字符变量 d接收输入的字符5,所以输出的结果是 3,4,回车,5,选项 D正确。18.以下关于 C语言中逻辑运算符两侧运算对象的叙述中正确的是( )。(分数:2.00)A.只能是整数 0或非 0整数B.可以是任意合法的表
38、达式 C.可以是结构体类型的数据D.只能是整数 0或 1解析:解析:在 C语言的逻辑运算法则里,允许运算符两侧是任意合法的表达式,因此选项 B正确,选项A和选项 C不正确;结构体是构造类型,所以不能进行逻辑运算,因此,选项 C不正确。19.有以下程序: #nelude main() int a=0,b=0,C=0,d=0; if(a=1)b=1;c=2; else d=3; pfintf(d,d,d,dn,a,b,c,d); 程序运行后的输出结果是( )。(分数:2.00)A.1,1,2,0B.0,0,0,3C.编译有错 D.0,1,2,0解析:解析:if 语句只执行后面的一个语句或一个用大括
39、号包括的程序段。本题中 if语句中的条件若为真,则只执行 b=1;这一条语句,后面的 c=2是一个和 if分支结构无关的语句,因此,再后面的 else语句便成为一个独立的语句,因为前面没有 if分支与其对应,因此会在编译过程中出错。如果改成 if(a=1)b=1;c=2elsed=3:则编译正确。20.有以下程序: #include 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
40、=d,b=dn,a,b); 程序运行后的输出结果是( )。(分数:2.00)A.a=2,b=2B.a=2,b=1 C.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。所以结果为 B。21.以下程序段中的变量已正确定义:for(i=0;i
41、4;i+,i+)for(k=l;k3;k+);printf(*);程序段的输出结果是( )。(分数:2.00)A.*B.*C.* D.*解析:解析:由于内层循环 for(k=1;k3;k+)后面直接跟了空语句“;”所以在循环内部什么操作也不做,跳出外层循环后执行打印语句,所以打印了一个“*,选择 C。22.有以下程序段: #nclude int i,n; for(i=0;i8;i+) n=rand()5; switch(n) case 1: case 3:printf(dn,n);break; case 2: case 4:printf(dn,n);continue; case 0:exit(
42、0); pfintf(dn,n); 以下关于程序段执行情况的叙述,正确的是( )。(分数:2.00)A.for循环语句固定执行 8次B.当产生的随机数 n为 4时结束循环操作C.当产生的随机数 n为 1和 2时不做任何操作D.当产生的随机数 n为 0时结束程序运行 解析:解析:case 常量表达式只是起语句标号作用,并不是该处进行条件判断。在执行 switch语句时,根据 switch的表达式,找到与之匹配的 case语句,就从此 case子句执行下去,不再进行判断,直到碰到 break或函数结束为止。简单地说,break 是结束整个循环体,而 continue是结束单次循环。B 选项中当产生
43、的随机数 n为 4时,要执行打印操作。C 选项中当产生的随机数为 1和 2时,分别执行 case 3与case 4后面语句的内容。由于存在 break语句,所以 for循环不是固定执行 8次,执行次数与产生的随机数 n有关系。23.有以下程序: #include int f(int x); main() int n=1,m; m=f(f(f(n);printf(dn,m); int f(int x) retum x*2; 程序运行后的输出结果是( )。(分数:2.00)A.8 B.2C.4D.1解析:解析:第一次调用 m=f(f(f(1),第二次为 m=f(f(2),第三次为 m=f(4),即
44、返回值为 8。24.以下叙述中错误的是( )。(分数:2.00)A.可以给指针变量赋一个整数作为地址值 B.函数可以返回地址值C.改变函数形参的值,不会改变对应实参的值D.当在程序的开头包含头文件 stdioh 时,可以给指针变量赋 NULL解析:解析:不能将一个整数直接赋给指针变量作为地址,所以 A是错误的。函数的返回值可以是地址。即指针。函数调用中行参的变化不会传递给实参。25.设已有定义:float x;,则以下对指针变量 P进行定义且赋初值的语句中正确的是( )。(分数:2.00)A.int*p=(float)x;B.float*p=&x; C.float p=&x;D.float*p
45、=1024;解析:解析:指针是用来存放地址的变量,用(类型名*指针变量名)的形式定义。赋值时应将某个变量地址赋给指针变量,所以选择 B。26.以下数组定义中错误的是( )。(分数:2.00)A.int x 23=1,2,3,4,5,6;B.int x3=0;C.int x3=1,2,3,4,5,6;D.int x 23=1,2,3,4,5,6; 解析:解析:D 选项中 x23定义的是一个两行三列的二维数组,而在给数组元素赋值时却赋成了三行,所以错误。27.有以下程序:#includestdiohvoid fun(int a,int n) int i,t;for(i=0;in2;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,