1、二级 C语言笔试-395 及答案解析(总分: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.
2、下列排序方法中,最坏情况下比较次数最少的是A) 简单选择排序 B) 冒泡排序C) 堆排序 D) 直接插入排序(分数: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.下列关于数据流图的描述正确的是A) 数据流图是描述数据处理过程的工具B) 数据流图间接支持系统的功能建模C) 数据流图中带箭头的线段表示控制
3、流D) 数据流图是软件详细设计的工具(分数:1.00)A.B.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.在 E-R图中,用来表示实体集的图形是A) 矩形 B) 椭圆形 C) 菱形 D) 三角形(分数:1.00)A.B.C.D.10.有两个关系 R和 S
4、如下:(分数:1.00)A.B.C.D.11.以下叙述中错误的是A) C语言源程序经编译后生成后缀为.obj 的目标程序B) C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件C) 用 C语言编写的程序称为源程序,它以 ASC代码形式存放在一个文本文件中D) C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令(分数:1.00)A.B.C.D.12.以下选项中合法的标识符是A) 1_2 B) _12 C) 2-1 D) 12_ _(分数:1.00)A.B.C.D.13.设有定义:int x=3;,以下表达式中,值不为 12的是A) x*=x+1 B) x+,
5、3*x C) x*=(1+x) D) 2*x,x+=6(分数:1.00)A.B.C.D.14.下列程序的输出结果是main()double d=3.2;int x,y;x=1.2;y=(x+3.8)/5.0;printf(“%d/n“,d*y);A) 3 B) 3.2 C) 0 D) 3.07(分数:1.00)A.B.C.D.15.有以下程序:#include stdio.hmain()char a,b,c,d;a=getchar();b=getchar();scanf(“%c%c“,当执行程序时,按下列方式输入数据(从第 1列开始,CR代表回车,注意,回车也是一个字符):1CR234CR则输
6、出结果是A) 123434B) 12C) 123D) 1234(分数:1.00)A.B.C.D.16.下列程序的运行结果是#include “stdio.h“main()int x=-9,y=5,z=7;if(xy)if(y0) z=0;else z+=1;printf(“%d/n“,z);A) 6 B) 7 C) 8 D) 9(分数:1.00)A.B.C.D.17.以下选项中不属于 C语言类型的是A) unsigned long int B) long shortC) unsigned int D) signed short int(分数:1.00)A.B.C.D.18.有以下定义语句,编译
7、时会出现编译错误的是A) char a=a; B) char a=/n;C) char a=aa; D) char a=/x2d;(分数:1.00)A.B.C.D.19.要求以下程序的功能是计算:s=1+1/2+1/3+1/100。main()int n;float s;s=1.0:for(n=100;n1;n-)s=s+1/n;printf(“%6.4f/n“,s);程序运行后输出结果错误,导致错误结果的程序行是A) s=1.0; B) for (n=100;n1;n-)C) s=s+1/n; D) printf(“%6.4f/n“,s);(分数:1.00)A.B.C.D.20.有如下嵌套的
8、 if语句if(ab)if(ac)k=a;else k=c;elseif(bc)k=b;else k=c;以下选项中与上述 if语句等价的语句是A) k=(ab)?a:b;k=(bc)?b:c;B) k=(ab)?(bc)?a:b):(bc)?b:c);C) k=(ab)?(ac)?a:c):(bc)?b:c);D) k=(ab)?a:b;k=(ac)?a:c;(分数:1.00)A.B.C.D.21.在下列选项中,没有构成死循环的是A) int i=100;while(1)i=1%100+1;if(i100) break;B) for(;);C) int k=10000;dok+; while
9、(k10000);D) int s=36;while(s) -s;(分数:1.00)A.B.C.D.22.有以下程序段:int n,t=1,s=0;scanf(“%d“,t=t-2;while(t!=n);为使程序段不陷入死循环,从键盘键入的数据应该是A) 任意正奇数 B) 任意负偶数C) 任意正偶数 D) 任意负奇数(分数:1.00)A.B.C.D.23.若运行以下程序时,从键盘输入 ADescriptorCR(CR表示回车),则下面程序的运行结果是#include stdio.hmain()char c;int v0=1,v1=0,v2=0;do switch(c=getchar()cas
10、e a:case A:case e:case E:case i:case I:case o:case O:case u:case U:v1+=1:default:v0+=1;v2+=1;while(c!=/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=8C) v0=11,v1=4,v2=11 D) v0=13,v1=4,v2=12(分数:1.00)A.B.C.D.24.数字字符 0的 ASC值为 48,若有以下程序:main()char a=1,b=2;printf(“%c,“,b+);p
11、rintf(“%d/n“,b-a);程序运行后的输出结果是A) 3,2 B) 50,2 C) 2,2 D) 2,50(分数:1.00)A.B.C.D.25.有以下程序:#include stdio.hvoid f(int *p, int *q);main()int m=1,n=2,*r= printf(“%d,%d“,m,n);void f(int *p, int*q)p=p+1;*q=*q+1;程序运行后的输出结果是A) 1,3 B) 2,3 C) 1,4 D) 1,2(分数:1.00)A.B.C.D.26.有以下程序:#include stdio.hvoid f(int *q)int i=
12、0;for(;i5;i+)(*q)+;main()int a5=5,4,3,2,1,i;f(a);for(i=0;i5;i+)printf(“%d,“,ai);程序运行后的结果是A) 6,4,3,2,1 B) 6,5,4,3,2C) 5,4,3,2,1 D) 10,4,3,2,1(分数:1.00)A.B.C.D.27.有以下程序:#include stdio.hint f(int t,int n);main()int a4=1,2,3,4,s;s=f(a,4);printf(“%d/n“,s);int f(int t ,int n)if(n0) return tn-1+f(t,n-1);els
13、e return 0;程序运行后的输出结果是A) 4 B) 10 C) 14 D) 6(分数:1.00)A.B.C.D.28.阅读下面程序段,则执行后的结果为#include “stdio.h“main()int m=4,n=2,k;k=fun(m,n);printf(“%d/n“,k);fun(int m,int n)return(m*m*m-n*n*n);A) 64 B) 8 C) 56 D) 0(分数:1.00)A.B.C.D.29.有以下程序:#include stdio.hmain()int s12=1,2,3,4,5,6,7,8,9,10,11,12 ,c5=0,i;for(i=0
14、;i12;i+) csi+;for(i=1;i5;i+) printf(“%d“,ci);printf(“/n“);程序的运行结果是A) 1 2 3 4 B) 5 6 7 8 C) 9 10 1 1 12 D) 1 1 1 1(分数:1.00)A.B.C.D.30.以下程序的输出结果是void change(int k) k0=k5;main()int x10=1,2,3,4,5,6,7,8,9,10,n=0;while(n=4) change(n+;for(n=0;n5;n+) printf(“%d“,xn);printf(“/n“);A) 678910 B) 13579 C) 12345
15、D) 62345(分数:1.00)A.B.C.D.31.若有以下定义:int x10,*pt=x;则对 x数组元素的正确引用是A) * B) p=k; C) p=s0; D) k=s;(分数:1.00)A.B.C.D.33.以下程序运行后的输出结果是#include stdio.hvoid f(char p10,int n)char t10;int i,j;for(i=0;in-1;i+)for(j=i+1;jn;j+)if(strcmp(pi,pj)0) strcpy(t,pi);strcpy(pi,pj);strcpy(pj,t);main()char p510=“abc“,“aabdfg
16、“,“abbd“,“dedbe“,“cd“;f(p,5);printf(“%d/n“,strlen(p0);A) 2 B) 4 C) 6 D) 3(分数:1.00)A.B.C.D.34.设有定义:structchar mark12;int num1;double num2;t1,t2;,若变量均已正确赋初值,则以下语句中错误的是A) t1=t2; B) t2.num1=t1.num1;C) r2.mark=t1.mark; D) t2.num2=t1.num2;(分数:1.00)A.B.C.D.35.下面程序段的运行结果是char *p=“abcdefgh“;p+=3;printf(“%d/n
17、“,strlen(strcpy(p,“ABCD“);A) 8 B) 12 C) 4 D) 7(分数:1.00)A.B.C.D.36.有以下程序:struct Sint n;int a20;void f(struct S*p)int i,j,t;for(i=0;ip-n-1;i+)for(j=i+1;jp-n;j+)if(p-aip-aj)t=p-ai;p-ai=p-aj;p-aj=t;main()int i;struct S s=10,2,3,1,6,8,7,5,4,10,9;f(is.n;i+)printf(“%d,“,s.ai);程序运行后的输出结果是A) 1,2,3,4,5,6,7,8,
18、9,10,B) 10,9,8,7,6,5,4,3,2,1,C) 2,3,1,6,8,7,5,4,10,9,D) 10,9,8,7 ,6,1,2,3,4,5,(分数:1.00)A.B.C.D.37.有以下程序:#include stdio.hint fun()static int x=1;x*=2;return x;main()int i,s=1;for(i=1;i=3;i+)s=fun();printf(“%d/n“,s);程序运行后的输出结果是A) 0 B) 1 C) 4 D) 8(分数:1.00)A.B.C.D.38.有以下程序:#include stdio.h#define S(x)4*
19、(x)*x+1main()int k=5,j=2;printf(“%d/n“,S(k+j);程序运行后的输出结果是A) 197 B) 143 C) 33 D) 28(分数:1.00)A.B.C.D.39.设有定义语句 int(*f)(int);,则以下叙述正确的是A) f是基类型为 int的指针变量B) f是指向函数的指针变量,该函数具有一个 int类型的形参C) f是指向 int类型一维数组的指针变量D) f是函数名,该函数的返回值是基类型为 int类型的地址(分数:1.00)A.B.C.D.40.若有以下程序段:int r =9;printf(“%d/n“,r1);输出结果是A) 2 B)
20、 4 C) 8 D) 16(分数:1.00)A.B.C.D.二、填空题(总题数:15,分数:60.00)41.设有如下图所示的二叉树:(分数:4.00)填空项 1:_42.对长度为 n的有序线性表进行二分法查找,在最坏情况下所需要的比较次数为 1。(分数:4.00)填空项 1:_43. 1测试的任务是检查软件的功能、性能及其他特征是否与用户的需求一致。(分数:4.00)填空项 1:_44.有关系模式:学生 S(学号,姓名,性别,年龄,身份证号),课程 C(课号,课名),其中两个关系模式的主键分别是学号和课号,则关系模式选课 SC可定义为 SC(学号, 1,成绩)。(分数:4.00)填空项 1:
21、_45.从 E-R图向关系模式转换发生在数据库设计的 1 阶段。(分数:4.00)填空项 1:_46.已有定义:char c=;int a=1,b;(此处 c的初值为空格字符),执行 b=!c|a;后 b的值为 1。(分数:4.00)填空项 1:_47.设 int a=15,b=16,表达式(+a=b-)?+a:-b 的值是 1。(分数:4.00)填空项 1:_48.以下程序运行后的输出结果是_。#include stdio.hmain()int k=1,s=0;doif(k%2)!=0) continue;s+=k;k+;while(k10);printf(“s=%d/n“,s);(分数:4
22、.00)填空项 1:_49.有以下程序:#include stdio.hfun(int x)if (x/20) fun(x/2);printf(“%d“,x);main()fun(8),printf(“/n“);程序运行后的输出结果是_。(分数:4.00)填空项 1:_50.以下程序用以删除字符串中所有的空格,请填空。#include stdio.hmain()char s100=“our teacher teach c language!“;int i,j;for(i=j=0;si!=/0;i+)if(si! =)sj=si;j+;sj=_;printf(“%s/n“,s);(分数:4.00
23、)填空项 1:_51.以下 fun函数的功能是在 N行 M列的整型二维数组中,选出一个最大值作为函数值返回,请填空(设 M,N已定义)。int fun(int aNM)int i,j,row=0,col=0;for(i=0;iN;i+)for(j=0;jM;j+)if(aijarowcol) row=i; col=j;return(_);(分数:4.00)填空项 1:_52.以下程序运行后的输出结果是_。(注:如果结果中含有回车,可加一空格写在一行,例如:1 1 11 1 11 1 1可以写成 1 1 1 1 1 1 1 1 1)main()int i,j,a3=1,2,3,4,5,6,7,8
24、,9;for(i=0;i3;i+)for(j=i+1;j3;j+)aji=0;for(i=0;i3;i+)for(j=0;j3;j+)printf(“%d“,aij);printf(“/n“);(分数:4.00)填空项 1:_53.以下程序的功能是利用指针指向 3个整型变量,并通过指针运算找出 3个数中的最大值,输出到屏幕上,请填空。main()int x,y,z,max,*px,*py,*pz,*pmax;scanf(“%d%d%d“,px= py= pz=pmax=_;if(*pmax*py) *pmax=*py;if(*pmax*pz) *pmax=*pz;printf(“max=%d/
25、n“,max);(分数:4.00)填空项 1:_54.有以下程序:#include stdio.hmain()char a20=“How are you?“,b20;scallf(“%s“,b);printf(“%s%s/n“,a,b);程序运行时从键盘输入:How are you?回车,则输出结果为_。(分数:4.00)填空项 1:_55.已知文本文件 test.txt,其中的内容为:Hello,everyone!。以下程序中,文件 test.txt已正确为“读”而打开,由此文件指针 fr指向文件,则程序的输出结果是_。#include stdio.hmain()FILE *fr;char
26、str40;fgets(str, 5 ,fr);printf(“%s/n“,str);fclose(fr);(分数:4.00)填空项 1:_二级 C语言笔试-395 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:40.00)1.下列关于算法复杂度描述正确的是A) 算法的时间复杂度是指算法执行的时间B) 算法的空间复杂度是指执行这个算法所需的内存空间C) 一个算法的空间复杂度大,则其时间复杂度必定大D) 一个算法的空间复杂度大,则其时间复杂度必定小(分数:1.00)A.B. C.D.解析:解析 算法的时间复杂度是指执行算法所需的计算工作量。算法的空间复杂度是
27、指执行这个算法所需的内存空间。在一个算法的空间复杂度大的情况下,其时间复杂度可能会很大,具体视情况而定;反之亦然。2.下列叙述中正确的是A) 栈是“先进先出”的线性表B) 队列是“先进后出”的线性表C) 循环队列中元素的个数是由队头指针和队尾指针共同决定的D) 循环队列中队头指针是固定不变的(分数:1.00)A.B.C. D.解析:解析 栈是“先进后出”的线性表;队列是“先进先出”的线性表;在循环队列结构中,每进行一次入队运算,队头指针就进 1,队头指针和队尾指针一起反映队列中元素的动态变化情况。3.下列排序方法中,最坏情况下比较次数最少的是A) 简单选择排序 B) 冒泡排序C) 堆排序 D)
28、 直接插入排序(分数:1.00)A.B.C. D.解析:解析 在最坏情况下,冒泡排序、简单选择排序和直接插入排序需要的比较次数都是 n(n-1)/2,堆排序需要比较的次数为 nlog2n,这也是堆排序的最大优点。4.下列选项中属于结构化程序设计原则的是A) 可封装 B) 多态性 C) 自下而上 D) 逐步求精(分数:1.00)A.B.C.D. 解析:解析 模块化、自顶向下、逐步求精和限制使用 goto语句是结构化程序设计的原则。5.下列描述中正确的是A) 程序就是软件B) 软件开发不受计算机系统的限制C) 软件即是逻辑实体,又是物理实体D) 软件是程序、数据和相关文档的集合(分数:1.00)A
29、.B.C.D. 解析:解析 软件是计算机系统中与硬件相互依存的另一部分,是包括程序、数据及相关文档的完整集合。6.下列关于数据流图的描述正确的是A) 数据流图是描述数据处理过程的工具B) 数据流图间接支持系统的功能建模C) 数据流图中带箭头的线段表示控制流D) 数据流图是软件详细设计的工具(分数:1.00)A. B.C.D.解析:解析 数据流图是结构化方法的需求分析工具,是描述数据处理过程的工具,是需求理解的逻辑模型的图形表示,它直接支持系统的功能建模。数据流图中带箭头的线段表示数据流。7.下列叙述中正确的是A) 软件测试的目的是确定程序中错误的位置B) 软件测试的目的是发现程序中的错误C)
30、软件调试的目的是发现程序中的错误D) 软件调试后一般不需要再测试(分数:1.00)A.B. C.D.解析:解析 软件测试的目的是为了发现程序中的错误,而软件调试的任务是诊断和改正程序中的错误,改正以后还需要再测试。8.数据库管理系统中负责数据模式定义和数据物理存取构建的语言是A) 数据定义语言 B) 数据管理语言C) 数据操作语言 D) 数据控制语言(分数:1.00)A. B.C.D.解析:解析 数据定义语言负责数据模式定义和数据的物理存取构建;数据操作语言负责数据的操纵;数据控制语言负责数据完整性、安全性的定义与检查以及并发控制、故障恢复等功能。无数据管理语言的说法。9.在 E-R图中,用来
31、表示实体集的图形是A) 矩形 B) 椭圆形 C) 菱形 D) 三角形(分数:1.00)A. B.C.D.解析:解析 在 E-R图形中,用矩形表示实体集,用椭圆形表示属性,用菱形表示关系。10.有两个关系 R和 S如下:(分数:1.00)A.B.C. D.解析:解析 选择和投影都是对单个表进行运算,其结果都是一个关系。交和并运算要求参与运算的表具有相同的属性。选择运算是满足条件的元组,由图可知,由关系 R得到关系 S的操作是选择。11.以下叙述中错误的是A) C语言源程序经编译后生成后缀为.obj 的目标程序B) C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件C) 用 C
32、语言编写的程序称为源程序,它以 ASC代码形式存放在一个文本文件中D) C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令(分数:1.00)A.B.C.D. 解析:解析 并不是源程序中的所有行都参加编译。在条件编译形式下,相关内容只在满足一定条件时才进行编译。选项 D)中的非执行语句不在其范围内。12.以下选项中合法的标识符是A) 1_2 B) _12 C) 2-1 D) 12_ _(分数:1.00)A.B. C.D.解析:解析 标识符命名规则:标识符必须由字母(az 或 AZ)或下划线(_)开头;标识符的其他部分可以用字母、下划线或数字(09)组成;大小写字母表示不同意义,
33、如 cout和 Cout代表不同的标识符;在定义标识符时,虽然语法上允许用下划线开头,但是,我们最好避免定义用下划线开头的标识符,因为编译器常常定义一些下划线开头的标识符。因此,本题的正确答案为 B)。13.设有定义:int x=3;,以下表达式中,值不为 12的是A) x*=x+1 B) x+,3*x C) x*=(1+x) D) 2*x,x+=6(分数:1.00)A.B.C.D. 解析:解析 本题考查逗号运算符的运算方式,逗号运算符的作用是将若干表达式连接起来,它的优先级别在所有运算符中是最低的,结合方向为“自左至右”。选项 A)和选项 C)的结果是一样的,可展开为:x=x*(x+1)=3
34、*4=12;选项 B)中先执行 x+,因为+运算符有自加功能,逗号之前执行后 x的值为 4,逗号后的值就是整个表达式的值,即 12;选项 D)逗号之前并未给 x赋值,所以表达式的值就是 x+=6的值,即9。因此,本题答案为 D)。14.下列程序的输出结果是main()double d=3.2;int x,y;x=1.2;y=(x+3.8)/5.0;printf(“%d/n“,d*y);A) 3 B) 3.2 C) 0 D) 3.07(分数:1.00)A.B.C. D.解析:解析 本题考查复合的赋值表达式。本题中,程序先执行语句 x=1.2;,根据赋值运算的类型转换规则,先将 double型的常
35、量 1.2转换为 int型,即取整为 1,然后将 1赋值给变量 x。接下来执行语句y=(x+3.8)/5.0;,根据运算符的优先级,先计算小括号内,再计算除法,最后执行赋值运算。小括号内的运算过程为:先将整型变量 x的值 1转换为 double型 1.0,然后与 3.8进行加法运算,得到中间结果4.8;接着进行除法运算 4.8/5.0,其结果小于 1.0,这里没有必要计算出精确值,因为接着进行赋值运算,赋值号左边变量 y的类型为整型,于是对这个小于 1.0的中间结果进行取整,结果为 0,于是变量 y的值为 0,d*y 的值也为 0。15.有以下程序:#include stdio.hmain()
36、char a,b,c,d;a=getchar();b=getchar();scanf(“%c%c“,当执行程序时,按下列方式输入数据(从第 1列开始,CR代表回车,注意,回车也是一个字符):1CR234CR则输出结果是A) 123434B) 12C) 123D) 1234(分数:1.00)A.B.C. D.解析:解析 程序根据用户输入分别给字符型变量 a、b、c、d 赋值为1、CR、2、3,因此输出到屏幕得到选项 C)中的格式。16.下列程序的运行结果是#include “stdio.h“main()int x=-9,y=5,z=7;if(xy)if(y0) z=0;else z+=1;pri
37、ntf(“%d/n“,z);A) 6 B) 7 C) 8 D) 9(分数:1.00)A.B.C. D.解析:解析 ifelse 语句的执行过程如下:首先计算 if后面一对圆括号内表达式的值,若表达式的值为非 0,执行 if子句,然后跳过 else子句,去执行 if语句后的下一条语句;若表达式的值为 0,跳过if子句,去执行 else子句,接着去执行 if语句后的下一条语句。C 语言的语法规定,else 子句总是与前面最近的不带 else的 if匹配,与书写格式无关,本题目的后一个 ifelse相当于嵌套在第一个 if子句里,相当于 xy B) char a=/n;C) char a=aa; D
38、) char a=/x2d;(分数:1.00)A.B.C. D.解析:解析 aa 是字符串,字符串的表示要用双引号,可以赋值给字符数组和字符指针变量,但字符串不能赋值给字符变量,只能给字符变量赋值单个字符。19.要求以下程序的功能是计算:s=1+1/2+1/3+1/100。main()int n;float s;s=1.0:for(n=100;n1;n-)s=s+1/n;printf(“%6.4f/n“,s);程序运行后输出结果错误,导致错误结果的程序行是A) s=1.0; B) for (n=100;n1;n-)C) s=s+1/n; D) printf(“%6.4f/n“,s);(分数:1
39、.00)A.B.C. D.解析:解析 本题的考查点是查找程序运行错误的原因。主要考查运算中字符的转换。初看此题,可能不太容易发现错误,该题的运行结果是 1.0000,算法错误。s=s+1/n;1/2=0,因为 n为整型,所以 1/n都为 0。这就是导致本题出错的原因。s=s+1/n 应改为 s=s+1.0/n。20.有如下嵌套的 if语句if(ab)if(ac)k=a;else k=c;elseif(bc)k=b;else k=c;以下选项中与上述 if语句等价的语句是A) k=(ab)?a:b;k=(bc)?b:c;B) k=(ab)?(bc)?a:b):(bc)?b:c);C) k=(ab
40、)?(ac)?a:c):(bc)?b:c);D) k=(ab)?a:b;k=(ac)?a:c;(分数:1.00)A.B.C. D.解析:解析 嵌套的 if语句功能是将 k赋值为 a、b、c 中的最小值,选项 A)中没有比较 a、c 的大小,选项 B)中语句“(bc)?a:b):(bc)?b:c)”错误,选项 D)中没有比较 b、c 大小。21.在下列选项中,没有构成死循环的是A) int i=100;while(1)i=1%100+1;if(i100) break;B) for(;);C) int k=10000;dok+; while(k10000);D) int s=36;while(s)
41、 -s;(分数:1.00)A.B.C.D. 解析:解析 选项 A)的循环表达式的条件永久为 1,并且小于 100的数与 100取余不超过 99,所以在循环体内表达式 i%100 +1的值永远不大于 100,break 语句永远不会执行,所以是死循环;选项 B)的括号内没有能使循环停下来的变量增量,是死循环;选项 C)中先执行 k+,使 k=10001,从而使循环陷入死循环。22.有以下程序段:int n,t=1,s=0;scanf(“%d“,t=t-2;while(t!=n);为使程序段不陷入死循环,从键盘键入的数据应该是A) 任意正奇数 B) 任意负偶数C) 任意正偶数 D) 任意负奇数(分
42、数:1.00)A.B.C.D. 解析:解析 此题目中变量 s是迷惑考生的,变量 t赋初值为 1,由语句 t=t-2;将使 t得到的是负奇数。所以选项 D)是正确答案。23.若运行以下程序时,从键盘输入 ADescriptorCR(CR表示回车),则下面程序的运行结果是#include stdio.hmain()char c;int v0=1,v1=0,v2=0;do switch(c=getchar()case a:case A:case e:case E:case i:case I:case o:case O:case u:case U:v1+=1:default:v0+=1;v2+=1;w
43、hile(c!=/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=8C) v0=11,v1=4,v2=11 D) v0=13,v1=4,v2=12(分数:1.00)A.B.C.D. 解析:解析 本题考查 switch语句的掌握。必须掌握以下内容。首先应该明白 switch语句的语法格式:switch(表达式)case常量表达式 1:语句组 1;case常量表达式 2:语句组 2;case常量表达式 n:语句组 n;default:语句组 n+1;另外,以下几点是关于 switch语句的重点:
44、系统在执行时计算开关表达式的值;根据所得的值在各个 case标号表达式中寻找匹配,直到发现与表达式匹配的标号。找到匹配后执行后面相应的语句表,顺序往下执行;如果无相匹配的标号,若存在 default标号,则执行该语句标号后面的语句组 n+1;当不存在 default标号时,不执行 switch中的任何一个语句表。一般而言,在多分支结构中总会出现“意外”的情况,这时均可归入 default程序段,作统一的处理。default 标号是可选性的,不必每次都有,视需要而定。switch 语句中还可以包含switch语句的嵌套。24.数字字符 0的 ASC值为 48,若有以下程序:main()char
45、a=1,b=2;printf(“%c,“,b+);printf(“%d/n“,b-a);程序运行后的输出结果是A) 3,2 B) 50,2 C) 2,2 D) 2,50(分数:1.00)A.B.C. D.解析:解析 语句 printf(“%c,“,b+);中 b+是先返回后自增,所以执行完该语句后,输出结果是2,变量 b的值为3。printf(“%d/n“,b-a); b=3,ASC值是 51,a=1,ASC值是 49,所以 b-a=51-49=2。25.有以下程序:#include stdio.hvoid f(int *p, int *q);main()int m=1,n=2,*r= pri
46、ntf(“%d,%d“,m,n);void f(int *p, int*q)p=p+1;*q=*q+1;程序运行后的输出结果是A) 1,3 B) 2,3 C) 1,4 D) 1,2(分数:1.00)A. B.C.D.解析:解析 在 f(int *p,int *q)函数中,执行 p=p+1将 p所对应的地址加 l,而*q=*q+1 是将 q所指向的 n的地址所对应的值加 1,即 m的地址所对应的值不变,而 n的值为 3。26.有以下程序:#include stdio.hvoid f(int *q)int i=0;for(;i5;i+)(*q)+;main()int a5=5,4,3,2,1,i;
47、f(a);for(i=0;i5;i+)printf(“%d,“,ai);程序运行后的结果是A) 6,4,3,2,1 B) 6,5,4,3,2C) 5,4,3,2,1 D) 10,4,3,2,1(分数:1.00)A.B.C.D. 解析:解析 表达式(*q)+先取出 q所指对象的值,再对该值递增,计算中 q的值不变。所以 f函数的功能是将指针 q所指的数加 5。函数调用 f(a);相当于将数组 a的第一个元素加 5,操作后 a5=10,4,3,2,1。27.有以下程序:#include stdio.hint f(int t,int n);main()int a4=1,2,3,4,s;s=f(a,4);printf(“%d/n“,s);int f(int t ,int n)if(n0) return tn-1+f(t,n-1);else return 0;程序运