1、二级 C语言分类模拟题 568及答案解析(总分:50.00,做题时间:90 分钟)一、选择题(总题数:30,分数:50.00)1.有如下程序: #include stdio.h int*sum(int data) static int init = 0; init += data; return main() int i,*p; for(i=1; i=4; i+) sum(i); p = sum(0); printf(“%d/n“,*p); 程序运行后的输出结果是_。(分数:1.00)A.15B.0C.1D.102.下面不属于软件需求分析阶段主要工作的是_。(分数:1.00)A.需求变更申请B
2、.需求分析C.需求评审D.需求获取3.if语句的基本形式为:if(表达式) 语句,其中“表达式”_。(分数:2.50)A.可以是任意合法的表达式B.必须是逻辑表达式C.必须是逻辑表达式或关系表达式D.必须是关系表达式4.有以下程序: #include stdio.h #include string.h main( ) char a20 =“ab“,b20=“cdef“; int k=0; strcat(a,b); while(ak!=“/0“) bk=ak; k+; puts(b); 程序的运行结果是_。(分数:1.00)A.abcdefB.cbcdefC.cdefD.ab5.设有如下定义:
3、struct sk int m; float x; data,*q; 若要使 q指向 data中的 m域,正确的赋值语句是_。(分数:2.00)A.q=B.*q=data.m;C.q=(struct sk*)D.q=(struct sk*)data.m;6.数据库设计中反映用户对数据要求的模式是_。(分数:2.00)A.内模式B.概念模式C.外模式D.设计模式7.下面不属于需求分析阶段任务的是_。(分数:1.00)A.确定软件系统的功能需求B.确定软件系统的性能需求C.需求规格说明书评审D.制定软件集成测试计划8.设有定义: struct complex int real,unreal;dat
4、a1=1,8,data2; 则以下赋值语句中错误的是_。(分数:1.00)A.data2=(2,6);B.data2=data1;C.data2=real=data1.real;D.data2.real=data1.unreal;9.有以下程序: #include stdio.h main( ) FILE *Pf; char *s1=“China“, *s2=“Beijing“; pf=fopen(“abc.dat“,“wb+“); fwrite(s2,7,1,pf); rewind(pf); /*文件位置指针回到文件开头*/ fwrite(s1,5,1,pf); fclose(pf); 以上
5、程序执行后 abc.dat文件的内容是_。(分数:2.00)A.ChinaB.ChinangC.ChinaBeijingD.BeijingChina10.有以下程序: #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); 程序的运行结果是_。(分数:2.00)A.a=2, b=2B
6、.a=2, b=1C.a=1, b=1D.a=1, b=011.以下不正确的定义语句是_。(分数:2.50)A.double x5=1.0,2.0,3.0,4.0,5.0;B.int y5=0,1,2,3,4,5;C.char c1=“1“,“2“,“3“,“4“,“5“;D.char c2=“a“,“b“,“c“;12.下列选项中属于面向对象设计方法主要特征的是_。(分数:2.50)A.继承B.自顶向下C.模块化D.逐步求精13.C语言源程序名的后缀是_。(分数:2.50)AexeBCCobjDcp14.在医院,每个医生只属于某一个诊疗科,医生同一天可为多位患者看病,而一名患者可在多个科室治
7、疗,则实体医生和患者之间的联系是_。(分数:1.00)A.多对多B.多对一C.一对多D.一对一15.有以下程序 #include stdio.h int fun(char s) int n=O; while(*s=“9“ s+; return (n); main() char s10= “6“, “1“, “*“, “4“, “*“, “9“, “*“, “0“, “*“; printf(“%d/n“,fun(s); (分数:1.00)A.9B.61490C.61D.516.下列选项中可作为 C语言合法常量的是_。(分数:2.50)A.-80B.-080C.-8e1.0D.-80.0e17.以
8、下叙述中正确的是_。(分数:1.00)A.在一个程序中,允许使用任意数量的#include 命令行B.在包含文件中,不得再包含其他文件C.#include命令行不能出现在程序文件的中间D.虽然包含文件被修改了,包含该文件的源程序也可以不重新进行编译和连接18.程序流程图中带有箭头的线段表示的是_。(分数:1.00)A.图元关系B.数据流C.控制流D.调用关系19.下列程序段的输出结果为( )。 #includestdio.h main() static char a=“language“; char *p; p=a; for(p=a;pa+8;p+=2) putchar(*p); (分数:2.
9、00)A.languageB.lnugC.有语法错误D.lang20.对关系 S和关系 R进行集合运算,结果中既包含关系 S中的所有元组也包含关系 R中的所有元组,这样的集合运算称为_。(分数:2.50)A.并运算B.交运算C.差运算D.除运算21.若 k为 int型变量,以下语句段执行后的输出结果是_。 #includestdio.h main() f intk=3; if(k) printf(“#“); else printf(“(分数:2.00)A.#B.23.以下程序的输出结果是_。 #include stdio.h int a33=1,2,3,4,5,6,7,8,9, *p; f(i
10、nt *s, int p3) *s=p11; main() p=(int *)malloc(sizeof(int); f(p, a); printf(“% d/n“, *p); free(p); (分数:2.50)A.1B.4C.7D.524.若有定义语句: char *s1=“OK“,*s2=“OK“; 以下选项中,能够输出“OK”的语句是_。(分数:1.00)A.if(strcmp(s1,s2)=0) puts(s1);B.if(strcmp(s1,s2)!=0) puts(s2);C.if(strcmp(s1,s2)=1) puts(s1);D.if(strcmp(s1,s2)!=0)
11、puts(s1);25.下列叙述中正确的是_。(分数:2.50)A.循环队列有队头和队尾两个指针,因此,循环队列是非线性结构B.在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况C.在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况D.循环队列中元素的个数是由队头指针和队尾指针共同决定26.下列程序的输出结果是 _ 。 #includestdio.h main() int a3,b2,c1; if(aB) if(bO)c0; else c+; printf(“%d/n“,c) ; (分数:1.00)A.0B.2C.1D.327.有以下函数定义: void fun(int n
12、, double x) 若以下选项中的变量都已正确定义并赋值,则对函数 fun的正确调用语句是 _ 。(分数:1.00)A.fun(int y,double m);B.k=fun(10,12.5);C.fun(x,n);D.void fun(n,x);28.执行下列程序中的输出语句后,a 的值是 _ 。 main() int a; printf(“%d/n“,(a=2*3,a*5,a+7); (分数:2.00)A.17B.37C.6D.1329.设文件指针 fp已定义,执行语句 fp=fopen(“file“,“w“);后,以下针对文本文件 file操作叙述的选项中正确的是_。(分数:2.00
13、)A.只能写不能读B.写操作结束后可以从头开始读C.可以在原有内容后追加写D.可以随意读和写30.对于现实世界中事物的特征,在实体联系模型中使用_。(分数:1.00)A.属性描述B.关键字描述C.二维表格描述D.实体描述二级 C语言分类模拟题 568答案解析(总分:50.00,做题时间:90 分钟)一、选择题(总题数:30,分数:50.00)1.有如下程序: #include stdio.h int*sum(int data) static int init = 0; init += data; return main() int i,*p; for(i=1; i=4; i+) sum(i);
14、 p = sum(0); printf(“%d/n“,*p); 程序运行后的输出结果是_。(分数:1.00)A.15B.0C.1D.10 解析:解析 static 变量又称为静态变量,编译时,将其分配在内存的静态存储区中,在整个程序运行期间都不释放这些存储单元,即使退出函数,下次再进入该函数时,静态局部变量仍使用原来的存储单元,值是上一次函数调用结束时的值。若定义时未赋初值,在编译时,系统自动赋初值为 0;若定义时赋初值,则仅在编译时赋初值一次,程序运行后不再给变量赋初值。程序执行过程为:执行 for循环,i=1,调用函数 sum(1),data=1,init=0,init=init+data
15、=1;i=2,调用函数 sum(2),data=2,init=1,init=init+data=3;i=3,调用函数 sum(3),data=3,init=3,init=init+data=6;i=4,调用函数 sum(4),data=4,init=6,init=init+data=10;i=5 退出 for循环。调用函数 sum(0),data=0,init=10,ini=init+data=10,返回指向 init的指针,输出 init=10。故 D选项正确。2.下面不属于软件需求分析阶段主要工作的是_。(分数:1.00)A.需求变更申请 B.需求分析C.需求评审D.需求获取解析:解析 需
16、求分析阶段的工作可概括为 4个方面:需求获取;需求分析;编写需求规格说明书;需求审评。3.if语句的基本形式为:if(表达式) 语句,其中“表达式”_。(分数:2.50)A.可以是任意合法的表达式 B.必须是逻辑表达式C.必须是逻辑表达式或关系表达式D.必须是关系表达式解析:解析 本题考查 if表达式。if(表达式)中的表达式可以为任何合法的表达式,一般情况下为逻辑、条件表达式,需要注意的是,当等号(=)误写为赋值号(=)时不会报错的,但是其值恒为 1。4.有以下程序: #include stdio.h #include string.h main( ) char a20 =“ab“,b20=
17、“cdef“; int k=0; strcat(a,b); while(ak!=“/0“) bk=ak; k+; puts(b); 程序的运行结果是_。(分数:1.00)A.abcdef B.cbcdefC.cdefD.ab解析:解析 strcat(字符串 1,字符串 2)函数是把字符串 2连接到字符串 1的后面,最终结果存放到字符串 1中,因此本题把字符串 a,b 连接起来放在数组 a中,while 语句完成功能是再将字符串 a赋给字符串 b,因此答案为 A选项。5.设有如下定义: struct sk int m; float x; data,*q; 若要使 q指向 data中的 m域,正确
18、的赋值语句是_。(分数:2.00)A.q=B.*q=data.m;C.q=(struct sk*) D.q=(struct sk*)data.m;解析:6.数据库设计中反映用户对数据要求的模式是_。(分数:2.00)A.内模式B.概念模式C.外模式 D.设计模式解析:解析 数据库系统的三级模式是概念模式、外模式和内模式。概念模式是数据库系统中全局数据逻辑结构的描述,是全体用户的公共数据视图。外模式也称子模式或用户模式,它是用户的数据视图,给出了每个用户的局部数据描述,因此选择 C。内模式又称物理模式,它给出了数据库物理存储结构与物理存取的方法。7.下面不属于需求分析阶段任务的是_。(分数:1.
19、00)A.确定软件系统的功能需求B.确定软件系统的性能需求C.需求规格说明书评审D.制定软件集成测试计划 解析:解析 需求分析阶段的工作有:需求获取;需求分析;编写需求规格说明书;需求评审,所以选择 D。8.设有定义: struct complex int real,unreal;data1=1,8,data2; 则以下赋值语句中错误的是_。(分数:1.00)A.data2=(2,6); B.data2=data1;C.data2=real=data1.real;D.data2.real=data1.unreal;解析:解析 A 选项中可以在声明变量的同时为 data2赋值,但是 data2=
20、(2,6);应写作 data2=2,6。所以选择 A选项。9.有以下程序: #include stdio.h main( ) FILE *Pf; char *s1=“China“, *s2=“Beijing“; pf=fopen(“abc.dat“,“wb+“); fwrite(s2,7,1,pf); rewind(pf); /*文件位置指针回到文件开头*/ fwrite(s1,5,1,pf); fclose(pf); 以上程序执行后 abc.dat文件的内容是_。(分数:2.00)A.ChinaB.Chinang C.ChinaBeijingD.BeijingChina解析:解析 本题考查文
21、件操作函数 fwrite()和 rewind()。题目中先是将 s2字符串写入 adc.dat中,然后将写指针回到文件开头,写入 s1字符串,那么 s1字符串就将前五个字符覆盖,所以最终结果为Chinang,选项 B正确。10.有以下程序: #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“,
22、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。11.以下不正确的定义语句是_。(分数:2.50)A.doubl
23、e x5=1.0,2.0,3.0,4.0,5.0;B.int y5=0,1,2,3,4,5; C.char c1=“1“,“2“,“3“,“4“,“5“;D.char c2=“a“,“b“,“c“;解析:解析 本题考查对一维数组的赋值。选项 B中,y5说明数组中有 5个元素,但却给它赋了 6个值,数组溢出所以是错误的。12.下列选项中属于面向对象设计方法主要特征的是_。(分数:2.50)A.继承 B.自顶向下C.模块化D.逐步求精解析:解析 面向对象设计方法的基本概念有对象、类和实例、消息、继承与多态性,因此选择 A。13.C语言源程序名的后缀是_。(分数:2.50)AexeBC CobjDc
24、p解析:14.在医院,每个医生只属于某一个诊疗科,医生同一天可为多位患者看病,而一名患者可在多个科室治疗,则实体医生和患者之间的联系是_。(分数:1.00)A.多对多 B.多对一C.一对多D.一对一解析:解析 一般来说,实体集之间必须通过联系来建立连接关系,分为三类:一对一联系(1:1)、一对多联系(1:m)、多对多联系(m:n)。医生可为多位患者看病,患者也可以找多位医生看病,实体医生与患者联系是多对多,故 A选项正确。15.有以下程序 #include stdio.h int fun(char s) int n=O; while(*s=“9“ s+; return (n); main()
25、char s10= “6“, “1“, “*“, “4“, “*“, “9“, “*“, “0“, “*“; printf(“%d/n“,fun(s); (分数:1.00)A.9B.61490C.61 D.5解析:解析 本题考查的知识点是:while 循环的简单应用。 题目 fun()函数中 while循环的意思是:判断 s所指内容是否为数字字符,如果是数字字符,则计算表达式 11=10*n+*s-“0“;。其中。s-“0“的作用是将相应的数字字符转换为数值,例如字符“8“减去字符“0“后,得到的结果就是数值 8了。n=10*n+的作用是将累计变量 n中原来内容乘以 10,然后再加上刚转换的数
26、字字符的数值,例如原来 n的值为 1,*s 现在的内容为“2“,那么执行了 n=10*n+*s-“0,;语句后,n 的值变为 12,如果接下来再来一个“8“字符,执行 n=10*n+*s-“0“;语句后,n 的值就是 128了。故不难看出fun()函数的作用是“将数字字符串转换为相应的十进制数值,碰到非数字字符时结束”。从主函数中定义的字符数组 s的初始化内容可以看出,fun()函数返回值应该是 61。故应该选择 C。16.下列选项中可作为 C语言合法常量的是_。(分数:2.50)A.-80 B.-080C.-8e1.0D.-80.0e解析:解析 所谓常量是指在程序运行的过程中,其值不能被改变
27、的量。在 C语言中,有整型常量、实型常量、字符常量和字符串常量等类型。选项 B中是以 0开头,表示一个八进制数,而八进制数的取值范围是 07,所以“-080”错误;在 C语言中 e后面的指数必须是整数,因此选项 C和 D也不正确。17.以下叙述中正确的是_。(分数:1.00)A.在一个程序中,允许使用任意数量的#include 命令行 B.在包含文件中,不得再包含其他文件C.#include命令行不能出现在程序文件的中间D.虽然包含文件被修改了,包含该文件的源程序也可以不重新进行编译和连接解析:解析 本题考查预处理中文件包含的概念,包含文件中可以包含其他文件,B 选项错误。#include可以
28、出现在程序文件的中间,C 选项错误。包含文件被修改了,包含该文件的源程序必须重新进行编译和连接,D 选项错误。18.程序流程图中带有箭头的线段表示的是_。(分数:1.00)A.图元关系B.数据流C.控制流 D.调用关系解析:解析 在数据流图中,用标有名字的带箭头线段表示数据流。在程序流程图中,用标有名字的带箭头线段表示控制流,因此本题答案为 C。19.下列程序段的输出结果为( )。 #includestdio.h main() static char a=“language“; char *p; p=a; for(p=a;pa+8;p+=2) putchar(*p); (分数:2.00)A.l
29、anguageB.lnug C.有语法错误D.lang解析:解析 本程序首先定义了静态字符数组 a,然后将指针 P指向数组 a的首地址。 第 1次 for循环,p=a,p 指向数组的第 1个元素,*p 是取指针 P所指地址的内容,输出 1;第 2次 for循环,p=p+2,则 p指向数组的第 3个元素,*p 是取指针 p所指地址的内容,输出 n;第 3次 for循环,p=p+2,则 p指向数组的第 5个元素,*p 是取指针 p所指地址的内容,输出 u;第 4次 for循环,p=p+2,则 p指向数组的第 7个元素,*p 是取指针 p所指地址的内容,输出 g,结束循环。20.对关系 S和关系 R
30、进行集合运算,结果中既包含关系 S中的所有元组也包含关系 R中的所有元组,这样的集合运算称为_。(分数:2.50)A.并运算 B.交运算C.差运算D.除运算解析:解析 关系的并运算是指,由结构相同的两个关系合并,形成一个新的关系,其中包含两个关系中的所有元组。21.若 k为 int型变量,以下语句段执行后的输出结果是_。 #includestdio.h main() f intk=3; if(k) printf(“#“); else printf(“(分数:2.00)A.#B. 解析:解析 main 函数的参数通常有两个,前者为整型,后者为字符型指针数组。参数的名字可以是任意合法的标识符。而且
31、,形如*av 与*av等价,所以选项 A、B、C 均正确,选项 D是错误的。23.以下程序的输出结果是_。 #include stdio.h int a33=1,2,3,4,5,6,7,8,9, *p; f(int *s, int p3) *s=p11; main() p=(int *)malloc(sizeof(int); f(p, a); printf(“% d/n“, *p); free(p); (分数:2.50)A.1B.4C.7D.5 解析:24.若有定义语句: char *s1=“OK“,*s2=“OK“; 以下选项中,能够输出“OK”的语句是_。(分数:1.00)A.if(str
32、cmp(s1,s2)=0) puts(s1);B.if(strcmp(s1,s2)!=0) puts(s2);C.if(strcmp(s1,s2)=1) puts(s1);D.if(strcmp(s1,s2)!=0) puts(s1); 解析:解析 strcmp 函数比较字符串大小,区分大小写,所以当 s1、s2 不相等输出 s1就会输出“OK”,答案选择 D。25.下列叙述中正确的是_。(分数:2.50)A.循环队列有队头和队尾两个指针,因此,循环队列是非线性结构B.在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况C.在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况D
33、.循环队列中元素的个数是由队头指针和队尾指针共同决定 解析:解析 循环队列有队头和队尾两个指针,但是循环队列仍是线性结构,因此 A错误;在循环队列中需要队头与队尾两个指针来共同反映队列中元素的动态变化情况,因此 B与 C错误,故本题答案为 D。26.下列程序的输出结果是 _ 。 #includestdio.h main() int a3,b2,c1; if(aB) if(bO)c0; else c+; printf(“%d/n“,c) ; (分数:1.00)A.0B.2C.1 D.3解析:解析 本题考查汀语句。第一个 if语句,先判断条件,发现 ab 不成立,不再执行下列的语句,直接执行最后的
34、 printf输出语句,然后结束程序,整个过程 c的值没有发生变化。27.有以下函数定义: void fun(int n, double x) 若以下选项中的变量都已正确定义并赋值,则对函数 fun的正确调用语句是 _ 。(分数:1.00)A.fun(int y,double m);B.k=fun(10,12.5);C.fun(x,n); D.void fun(n,x);解析:解析 本题考查函数调用。函数调用时,实参前不需加类型说明,选项 A)错误;题目中的函数没有返回值,所以选项 B)错误;函数调用前不需要加类型说明,选项 D)错误。28.执行下列程序中的输出语句后,a 的值是 _ 。 ma
35、in() int a; printf(“%d/n“,(a=2*3,a*5,a+7); (分数:2.00)A.17B.37C.6 D.13解析:解析 本题考查逗号表达式。本题的返回值是 a+7,a=2*3=6,a+7=13(注意:本题问的是 a的值,而不是程序的输出值)。29.设文件指针 fp已定义,执行语句 fp=fopen(“file“,“w“);后,以下针对文本文件 file操作叙述的选项中正确的是_。(分数:2.00)A.只能写不能读 B.写操作结束后可以从头开始读C.可以在原有内容后追加写D.可以随意读和写解析:30.对于现实世界中事物的特征,在实体联系模型中使用_。(分数:1.00)A.属性描述 B.关键字描述C.二维表格描述D.实体描述解析:解析 本题考查对实体联系模型的理解和掌握。在实体联系模型中,用属性来描述现实世界中对象的属性所表示的对象的性质、特征和行为,因此正确答案为选项 A。