1、二级 C 语言分类模拟题 565 及答案解析(总分:43.00,做题时间:90 分钟)一、选择题(总题数:30,分数:43.00)1.数据库管理系统中负责数据模式定义的语言是_。(分数:1.00)A.数据定义语言B.数据管理语言C.模式描述语言D.数据控制语言2.关于地址和指针,以下说法正确的是_。(分数:1.00)A.通过强制类型转换可以将一种类型的指针变量赋值给另一种类型的指针变量B.可以取一个常数的地址赋值给同类型的指针变量C.可以取一个表达式的地址赋值给同类型的指针变量D.可以取一个指针变量的地址赋值给基类型相同的指针变量3.公司中有多个部门和多名职员,每个职员只能属于一个部门,一个部
2、门可以有多名职员,从职员到部门的联系类型是_。(分数:1.00)A.多对多B.一对一C.多对一D.一对多4.有以下程序 #includestdio.h double f(double x); main() double a=0; int i; for(i=0; i30; i+=10)a+=f(double)i); printf(“%3.0f/n“, a); double f(double x) return x*x+1; 程序运行后的输出结果是_。(分数:2.00)A.503B.401C.500D.14045.有如下程序: #includestdio.h main() int a=0,b=1;
3、 if(+a=b+) printf(“T“); else printf(“F“); printf(“a=%d,b=%d/n“,a,b); printf(“/n“); 程序运行后的输出结果是_。(分数:1.00)A.Ta=0,b=1B.Fa=1,b=2C.Ta=1,b=2D.Fa=0,b=26.以下程序的输出结果是_。 #include stdio.h main() int a=5, b=4, c=6, d; printf(“% d/n“, d=ab? (ac? a:c):(b); (分数:1.00)A.5B.4C.6D.不确定7.下面程序的输出是_。 main() int x=3,y=6,a=
4、0; while(x+!=(y-=1) a+=1 if(yx)break; printf(“x=%d,y=%d,=%d/n“,x,y,a); (分数:2.00)A.x=4,y=4,a=1B.x=5,y=5,a=1C.x=5,y=4,a=3D.x=5,y=4,a=18.在软件开发中,需求分析阶段产生的主要文档是_。(分数:1.50)A.软件集成测试计划B.软件详细设计说明书C.用户手册D.软件需求规格说明书9.有以下程序: #include stdio.h main() int findmax(int,int,int),m; m=findmax(a,b,e); int findmax(int x
5、,int y,int z) 则以下叙述正确的是_。(分数:1.00)A.在 main 函数中声明了 findmax 函数B.在 main 函数中定义了 findmax 函数C.在 main 函数中两次调用了 findmax 函数D.在 main 函数内、外重复定义了 findmax 函数10.若有以下说明,则_不是对 strcpy 库函数正确的调用。 strcpy 库函数用于复制一个字符串:char*str1=“abcd“, str210, *str3=“hijklmn“, *str42, *str5=“aaaa“;(分数:2.50)A.strcpy(str2, str1)B.strcpy(s
6、tr3, str1)C.strcpy(str1, str2)D.strcpy(str5, str1)11.以下程序的输出是_。 #include stdio.h main() struct s1 int x; int y; struct s1 a=1,3; struct s1 *b= b-x=10; printf(“% d% d/n“, a.x, a.y); (分数:2.50)A.13B.103C.310D.3112.数据库管理系统是_。(分数:1.00)A.操作系统的一部分B.在操作系统支持下的系统软件C.一种编译系统D.一种操作系统13.以下程序的输出结果是 #includestdi0h
7、main() int i=0,a=0; while(i20) for(;) if(i%10)=0)break; elsei-; i+=11;a+=i; printf(“%d/n”,A) ; (分数:1.00)A.21B.32C.33D.1114.以下叙述中正确的是_。(分数:1.00)A.“/0“表示字符 0B.“a“表示一个字符常量C.表达式:“a“b“的结果是“假”D.“/“t“是非法的15.下列选项中不符合良好程序设计风格的是_。(分数:1.00)A.源程序要文档化B.数据说明的次序要规范化C.避免滥用 goto 语句D.模块设计要保证高耦合、高内聚16.有以下程序: #includes
8、tdio.h main() char a30,b30; scanf(“%s“,a); gets(b); printf(“%s%s“,a,b); 程序运行时若输入: how are you? I am fine回车 则输出结果是_。(分数:2.00)A.how are you?I am fineB.howare you? I am fineC.how are you? I am fineD.how are you?17.若有以下程序: #include stdio.h #define S(x) x*x #define T(x) S(x)*S(x) main( ) int k=5,j=2; pri
9、ntf(“%d,%d/n“,S(k+j),T(k+j); 则程序的输出结果是_。(分数:2.00)A.17,289B.49,2401C.17,37D.49,28918.有以下程序: #includestdio.h int fun(int a,int n,int x) int *p=a; while(pa+n if(pa+n)return p-a; else return-1; main() int a10=1,2,3,4,5,6,7,8,9,10; printf(“%d/n“,fun(a,10,10); 程序运行后的输出结果是_。(分数:1.00)A.9B.-1C.10D.019.软件按功能可
10、以分为应用软件、系统软件和支撑软件(工具软件)。下面属于应用软件的是_。(分数:1.50)A.学生成绩管理系统B.C 语言编译程序C.UNIX 操作系统D.数据库管理系统20.有定义语句:int a;long b;double x,y;,则以下选项中正确的表达式是_。(分数:2.00)A.a=xyB.a%(int)(x-y)C.(a*y)%bD.y=x+y=x21.有三个关系 R、S 和 T 如下: R A B C a 1 2 b 2 1 c 3 1 S A B C d 3 2 c 3 1 T A B C a 1 2 b 2 1 则由关系 R 和 S 得到关系 T 的操作是_。(分数:1.00
11、)A.选择B差C交D并22.若有定义语句 int b=2; 则表达式(b2)/(3|b)的值是_。(分数:2.00)A.8B.2C.4D.023.若变量已正确定义,则以下 for 循环_: for(x=0,y=0;(y!=123) *p*p1;*p1*p2;*p2=*p; 则该程序功能为 _(分数:1.00)A.交换*p1 和*p2 的值B.正确,但无法改变*p1 和*p2 的值C.交换*p1 和*p2 的地址D.可能造成系统故障,因为使用了空指针26.若有以下函数首部 int fun(double xlO,int *n) 则下面针对此函数的函数声明语句中正确的是_。(分数:1.00)A.in
12、t fun(double x, int *n);B.int fun(double, int);C.int fun(double *x, int n);D.iht fun(double*,int*);27.有以下程序: #includestdio.h double f(double x); main() double a=0;int i; for(i=0;i30;i+=10)a+=f(double)i); printf(“%3.0f/n“,a); double f(double x) return x*x+1; 程序的运行结果是_。(分数:2.00)A.500B.40lC.503D.140428
13、.在数据库管理技术的发展中,数据独立性最高的是 _ 。(分数:2.00)A.人工管理B.文件系统C.数据库系统D.数据模型29.以下叙述中正确的是_。(分数:2.00)A.char c1,c2,*c3,c440;是合法的变量定义语句B.数组下标的下限由数组中第一个非零元素的位置决定C.数组下标的下限由数组中第一个被赋值元素的位置决定D.数组下标的下限是 130.结构化程序所要求的基本结构不包括_。(分数:1.00)A.顺序结构B.GOTO 跳转C.选择(分支)结构D.重复(循环)结构二级 C 语言分类模拟题 565 答案解析(总分:43.00,做题时间:90 分钟)一、选择题(总题数:30,分
14、数:43.00)1.数据库管理系统中负责数据模式定义的语言是_。(分数:1.00)A.数据定义语言B.数据管理语言C.模式描述语言 D.数据控制语言解析:解析 模式描述语言(Data Description Language,DDL)是用来描述、定义的,体现、反映了数据库系统的整体现。2.关于地址和指针,以下说法正确的是_。(分数:1.00)A.通过强制类型转换可以将一种类型的指针变量赋值给另一种类型的指针变量 B.可以取一个常数的地址赋值给同类型的指针变量C.可以取一个表达式的地址赋值给同类型的指针变量D.可以取一个指针变量的地址赋值给基类型相同的指针变量解析:解析 常数的地址存储在内存的常
15、量区,常量区存储的都是常量,值都是不可修改的,所以直接取常量的地址赋给指针变量没有任何意义,C 语言也不允许这样做,编译会出错,B 选项错误;表达式的值存储在临时变量中,内存中存在专门用来存储临时变量的区域,对这块地址进行操作也是没有意义的,C 语言不允许这样做,编译会出错,C 选项错误;可以取一个指针变量的地址,但是指针变量的地址属于指针,只能赋值给指针类型的指针变量,D 选项错误。故答案为 A 选项。3.公司中有多个部门和多名职员,每个职员只能属于一个部门,一个部门可以有多名职员,从职员到部门的联系类型是_。(分数:1.00)A.多对多B.一对一C.多对一 D.一对多解析:解析 事物之间的
16、联系在信息世界中反映为实体集之间的联系,实体集间的联系个数不仅可以是单个的,也可以是多个的,对应关系有:一对一、一对多(多对一)、多对多。两个实体集间的联系可以用图 181 表示。 4.有以下程序 #includestdio.h double f(double x); main() double a=0; int i; for(i=0; i30; i+=10)a+=f(double)i); printf(“%3.0f/n“, a); double f(double x) return x*x+1; 程序运行后的输出结果是_。(分数:2.00)A.503 B.401C.500D.1404解析:解
17、析 for 循环进入循环体的 i 分别为 0 10 20,调用 f 函数返回分别为 1 101 401,累加为503,所以选择 A。5.有如下程序: #includestdio.h main() int a=0,b=1; if(+a=b+) printf(“T“); else printf(“F“); printf(“a=%d,b=%d/n“,a,b); printf(“/n“); 程序运行后的输出结果是_。(分数:1.00)A.Ta=0,b=1B.Fa=1,b=2C.Ta=1,b=2 D.Fa=0,b=2解析:解析 程序执行过程为:判断+a=b+是否成立,+a 前缀运算先加 1,则 a=1,
18、b+后缀运算先取值,则 b=1,1=1 成立,输出 T,之后 b=2,输出 a=1,b=2。6.以下程序的输出结果是_。 #include stdio.h main() int a=5, b=4, c=6, d; printf(“% d/n“, d=ab? (ac? a:c):(b); (分数:1.00)A.5B.4C.6 D.不确定解析:7.下面程序的输出是_。 main() int x=3,y=6,a=0; while(x+!=(y-=1) a+=1 if(yx)break; printf(“x=%d,y=%d,=%d/n“,x,y,a); (分数:2.00)A.x=4,y=4,a=1B.
19、x=5,y=5,a=1C.x=5,y=4,a=3D.x=5,y=4,a=1 解析:解析 注意的是 x+中 x 值的引用时,这里应当是先引用,后自加,具体执行过程如下: 第次 while 循环:条件为真,执行 a=a+1=1;此时,x 的值已为 4,判断 yx 不成立,继续执行循环; 第二次 while 循环;条件为假,此时 x 的值已为 5,退出 while 循环,执行 printf。8.在软件开发中,需求分析阶段产生的主要文档是_。(分数:1.50)A.软件集成测试计划B.软件详细设计说明书C.用户手册D.软件需求规格说明书 解析:解析 需求分析阶段的工作可以概括为:需求获取、需求分析、编写
20、需求规格说明书、需求评审四个方面,因此本题答案为 D。9.有以下程序: #include stdio.h main() int findmax(int,int,int),m; m=findmax(a,b,e); int findmax(int x,int y,int z) 则以下叙述正确的是_。(分数:1.00)A.在 main 函数中声明了 findmax 函数 B.在 main 函数中定义了 findmax 函数C.在 main 函数中两次调用了 findmax 函数D.在 main 函数内、外重复定义了 findmax 函数解析:解析 程序编译是从上到下进行的,所以如果函数定义放在主函数
21、之后,那么在函数调用时必须提前声明函数,可以在主函数之前声明函数,也可以在主函数中函数调用之前声明函数。题目中函数findmax 定义放在了函数之后,所以主函数中声明了findma 函数。int findmax(int,int,int);为函数声明,m=findmax(a,b,c);为函数调用,int findmax(intx,inty,int z)为函数定义。A 选项正确。B 选项是在 main 函数外定义的 findmax 函数,错误。在 main 函数中,出现了一次 findmax 函数的声明和一次 findmax 函数的调用,不是两次调用,C 选项错误。D 选项在 main 函数内不是
22、定义 findmax 函数而是声明 findmax 函数。10.若有以下说明,则_不是对 strcpy 库函数正确的调用。 strcpy 库函数用于复制一个字符串:char*str1=“abcd“, str210, *str3=“hijklmn“, *str42, *str5=“aaaa“;(分数:2.50)A.strcpy(str2, str1)B.strcpy(str3, str1)C.strcpy(str1, str2) D.strcpy(str5, str1)解析:解析 strcpy(s1,s2)函数的功能是将字符串 s2 复制到字符串 s1 中。要保证 s1 存储区能容纳下s2 字符
23、串。11.以下程序的输出是_。 #include stdio.h main() struct s1 int x; int y; struct s1 a=1,3; struct s1 *b= b-x=10; printf(“% d% d/n“, a.x, a.y); (分数:2.50)A.13B.103 C.310D.31解析:解析 b 为指向结构 a 的指针,通过运算符改变了 a 成员 x 的值为 10,所以输出 103。12.数据库管理系统是_。(分数:1.00)A.操作系统的一部分B.在操作系统支持下的系统软件 C.一种编译系统D.一种操作系统解析:解析 数据库管理系统是数据库的机构,它是
24、一种系统软件,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务等,是一种在操作系统支持下的系统软件,因此本题答案为 B。13.以下程序的输出结果是 #includestdi0h main() int i=0,a=0; while(i20) for(;) if(i%10)=0)break; elsei-; i+=11;a+=i; printf(“%d/n”,A) ; (分数:1.00)A.21B.32 C.33D.11解析:解析 break 语句只能在循环体和 switch 语句体内使用。本题程序为在 while 循环中嵌套 for 循环。先看内层 for 循环,该循环的 3 个
25、表达式全部省略,循环条件始终为真,但循环体内的 break 语句为终止循环的条件。首先,由初始条件判断外层循环 while 括号内表达式的值,该值为真,执行本次 while循环,即执行循环体内的 if 语句,判断该表达式后面括号里表达式的值为真,执行 break 语句,跣出内层循环,执行下面的语句,此时 i 和 a 的值均变为 11;回到外层循环,判断表达式“i20”仍为真,执行内层循环语句,此时 if 条件不满足,执行 else 语句,i 的值为 10,继续内层循环,if 语句条件满足,执行 break 语句,跳出内层循环,执行下面的语句后,i 和 a 的值分别是 21 和 32。再判断外层
26、循环的条件为假,结束循环。14.以下叙述中正确的是_。(分数:1.00)A.“/0“表示字符 0B.“a“表示一个字符常量C.表达式:“a“b“的结果是“假” D.“/“t“是非法的解析:解析 A 选项中,“/0“表示结束;B 选项中,字符常量是用单引号括起来的一个字符;D 选项中,“/”是双引号符。因此 C 选项正确。15.下列选项中不符合良好程序设计风格的是_。(分数:1.00)A.源程序要文档化B.数据说明的次序要规范化C.避免滥用 goto 语句D.模块设计要保证高耦合、高内聚 解析:解析 良好的程序设计风格使程序结构清晰合理,使程序代码便于维护。主要应注意和考虑的因素有:源程序要文档
27、化;数据说明的次序要规范化;语句的结构应简单直接,不应该为提高效率而把语句复杂化,避免滥用 goto 语句;模块设计要保证低耦合、高内聚。16.有以下程序: #includestdio.h main() char a30,b30; scanf(“%s“,a); gets(b); printf(“%s%s“,a,b); 程序运行时若输入: how are you? I am fine回车 则输出结果是_。(分数:2.00)A.how are you?I am fineB.howare you? I am fineC.how are you? I am fine D.how are you?解析:
28、解析 这道题主要考查的是 scanf 函数和 gets 函数在输入字符串时的差别。scanf 函数在以格式字符 s 输入字符串时,当遇到字符“/0”时,表示输入字符串结束。而函数 gets(b)是从键盘读入一行字符串放入字符数组 b 中,所以当从键盘输入 how are you? I am fine回车时,把字符串 how 存入字符数组 a 中,把其余的字符存入字符数组 b 中,因而正确答案为选项 C。17.若有以下程序: #include stdio.h #define S(x) x*x #define T(x) S(x)*S(x) main( ) int k=5,j=2; printf(“
29、%d,%d/n“,S(k+j),T(k+j); 则程序的输出结果是_。(分数:2.00)A.17,289B.49,2401C.17,37 D.49,289解析:解析 本题考查宏定义。宏定义只是做简单的替换,执行语句 s(k+j)=k+j*k+j=17,T(k+j)=s(k+j)*s(k+j)=k+j*k+j*k+j*k+j=37,因此选项 C 正确。18.有以下程序: #includestdio.h int fun(int a,int n,int x) int *p=a; while(pa+n if(pa+n)return p-a; else return-1; main() int a10=
30、1,2,3,4,5,6,7,8,9,10; printf(“%d/n“,fun(a,10,10); 程序运行后的输出结果是_。(分数:1.00)A.9 B.-1C.10D.0解析:解析 while(pa+n当 p=a;n=10,x=10;时 while 循环条件成立,直到 p=a+9,结束循环,执行下一条语句,if 条件成立,返回 p-a,此时执行 p-a=a+9-a=9;因此,输出 9。故答案为 A 选项。19.软件按功能可以分为应用软件、系统软件和支撑软件(工具软件)。下面属于应用软件的是_。(分数:1.50)A.学生成绩管理系统 B.C 语言编译程序C.UNIX 操作系统D.数据库管理系
31、统解析:解析 软件按功能可以分为:应用软件、系统软件、支撑软件。操作系统、编译程序、汇编程序、网络软件、数据库管理系统都属于系统软件,因此 B、C、D 都是系统软件,只有 A 是应用软件。20.有定义语句:int a;long b;double x,y;,则以下选项中正确的表达式是_。(分数:2.00)A.a=xyB.a%(int)(x-y) C.(a*y)%bD.y=x+y=x解析:解析 C 语言中没有“”运算符,所以 A 选项错误。“%”运算符的两个操作值必须为整型数据,所以 B 选项正确。a*y 的结果为 double 型,所以 C 选项错误。不能将值赋给像 x+y 这样的表达式,所以
32、D 选项错误。21.有三个关系 R、S 和 T 如下: R A B C a 1 2 b 2 1 c 3 1 S A B C d 3 2 c 3 1 T A B C a 1 2 b 2 1 则由关系 R 和 S 得到关系 T 的操作是_。(分数:1.00)A.选择B差 C交D并解析:解析 关系 T 中的元素是关系 R 去掉与关系 S 中相同的元组,符合差操作,选项 B 正确。22.若有定义语句 int b=2; 则表达式(b2)/(3|b)的值是_。(分数:2.00)A.8 B.2C.4D.0解析:解析 b2 是将 b 二进制左移 2 位相当于乘以 4 值为 8,3|b 的值为真为 1,所以答案
33、为 8。23.若变量已正确定义,则以下 for 循环_: for(x=0,y=0;(y!=123) *p*p1;*p1*p2;*p2=*p; 则该程序功能为 _(分数:1.00)A.交换*p1 和*p2 的值B.正确,但无法改变*p1 和*p2 的值C.交换*p1 和*p2 的地址D.可能造成系统故障,因为使用了空指针 解析:26.若有以下函数首部 int fun(double xlO,int *n) 则下面针对此函数的函数声明语句中正确的是_。(分数:1.00)A.int fun(double x, int *n);B.int fun(double, int);C.int fun(doubl
34、e *x, int n);D.iht fun(double*,int*); 解析:评析:函数声明可以照写已定义的函数的首部,再加一个号就成为了对函数的声明,在函数声明中也可以不写形参名,而只写形参的类型,但要保证与函数首部写法上的致,即函数类型、函数名、参数个数、参数类型和参数顺序相同。字符数组可用指针来表示,所以选顶 D 正确。27.有以下程序: #includestdio.h double f(double x); main() double a=0;int i; for(i=0;i30;i+=10)a+=f(double)i); printf(“%3.0f/n“,a); double f
35、(double x) return x*x+1; 程序的运行结果是_。(分数:2.00)A.500B.40lC.503 D.1404解析:解析 本题重点考查函数的定义和调用。第一次循环,a=0,i=0,返回值 a=0*0+1=1;第二次循环,a=1,i=10,返回值 a=10*10+1+1=102;第三次循环,a=102,i=20,返回值 a=20*20+1+102=503;第四次循环,a=503,i=30,不符合 i30,跳出循环,最后结果输出 a=503。28.在数据库管理技术的发展中,数据独立性最高的是 _ 。(分数:2.00)A.人工管理B.文件系统C.数据库系统 D.数据模型解析:解析 在人工管理阶段,数据无法共享,冗余度大,不独立,完全依赖程序:在文件系统阶段,数据共享性差;在数据库系统阶段,共享性好,独立性高。29.以下叙述中正确的是_。(分数:2.00)A.char c1,c2,*c3,c440;是合法的变量定义语句 B.数组下标的下限由数组中第一个非零元素的位置决定C.数组下标的下限由数组中第一个被赋值元素的位置决定D.数组下标的下限是 1解析:30.结构化程序所要求的基本结构不包括_。(分数:1.00)A.顺序结构B.GOTO 跳转 C.选择(分支)结构D.重复(循环)结构解析:解析 结构化程序包含的基本结构为顺序结构、循环结构、分支结构。