1、二级 C语言分类模拟题 553及答案解析(总分:60.00,做题时间:90 分钟)一、选择题(总题数:40,分数:60.00)1.若 fp已定义为指向某文件的指针,且没有读到该文件的末尾,则 C语言函数 feof(fp)的函数返回值是_。(分数:1.00)A.EOFB非 0C.-1D.02.在满足实体完整性约束的条件下_。(分数:2.50)A.一个关系中应该有一个或多个候选关键字B.一个关系中只能有一个候选关键字C.一个关系中必须有多个候选关键字D.一个关系中可以没有候选关键字3.若有定义:double a=22;int i=0,k=18;,则不符合 C语言规定的赋值语句是_。(分数:2.00
2、)A.i=(a+k)=(i+k);B.i=a%11;C.a=a+,i+D.i=!a;4.以下叙述正确的是(分数:1.00)A.在 C语言中,只能用“/*“和“*/“对程序进行注释B.在 C语言注释语句中,“/“和“*“之间不可以有空格C.注释语句只能使用西文D.在 C程序中,注释说明只能位于一条语句的后面5.以下正确的程序段是( )。(分数:1.00)A.char str20;scanf(“%s“, str);B.char *p;scanf(“%s“, p);C.char str20;scanf(“%s“, str2)D.char str20, *p=str;scanf(“%s“, p2);6
3、.现有以下程序段: #include stdio.h main() int k30=12, 324, 45, 6, 768, 98,21, 34, 453, 456; int count=0, i=0; while(ki) if(ki % 2=0|ki % 5=0) count+; i+ printf(“% d, % d/n“, count, i); 则程序段的输出结果是_。(分数:2.50)A.7,8B.8,8C.7,10D.8,107.若变量均已被正确定义并赋值,以下合法的 C语言赋值语句是_。(分数:1.00)A.x=n%2.5;B.x=y=5;C.x+n=i;D.x=5=4+1;8.下
4、述程序执行的输出结果是_。 #includestdio.h main() char a24; strcpy(a, “are“); strcpy(a1, “you“); a03=“ printf(“%s/n“, a); (分数:1.00)A.are printf(“%d,%d/n“,FNA(FNB(a),FNB(FNA(b); 程序运行后的输出结果是_。(分数:1.00)A.8,16B.16,32C.8,32D.16,1610.关于结构化程序设计原则和方法的描述错误的是_。(分数:2.50)A.选用的结构只准许有一个入口和一个出口B.复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现C.不允许使
5、用 GOTO语句D.语言中若没有控制结构,应该采用前后一致的方法来模拟11.若 x=4,y=5,则 xi7;i+)printf(i%2)?(“*%d/n“):(“#%d/n“),i); A B C D (分数:2.50)A.B.C.D.17.有以下程序 #include stdio.h main() int x=1,y=0; if(!x) y+; else if(x=0) if(x) y+=2; else y+=3; printf(“%d/n“,y); 程序运行后的输出结果是_。(分数:1.00)A.3B.2C.1D.018.下列关于逻辑运算符两侧运算对象的叙述中正确的是_。(分数:2.00)
6、A.只能是整数 0或 1B.只能是整数 0或非 0整数C.可以是结构体类型的数据D.可以是任意合法的表达式19.设 x和 y都是 int类型,且 x=1,y=2,则 printf(“%d%d“,x,y,(x,y)的输出结果是 _ 。(分数:1.00)A.1 2B.1 2 2C.1,2D.输出值不确定20.以下选项中正确的定义语句是_。(分数:1.00)A.double,a,b;B.double a=b=7;C.double a;b;D.double a=7,b =7;21.有以下程序 #includestdio.h main() int i,t3=9,8,7,6,5,4,3,2,1; for(
7、i=0;i3;i+) printf(“%d“,t2-ii); 程序执行后的输出结果是_。(分数:2.00)A.357B.753C.369D.75122.某二叉树有 5个度为 2的结点,则该二叉树中的叶子结点数是_。(分数:1.00)A.10B.8C.6D.423.将 E-R图转换为关系模式时,实体和联系都可以表示为_。(分数:1.00)A.属性B键C.关系D域24.若有定义语句“int a, b; double x;”,则下列选项中没有错误的是_。(分数:1.00)A.switch(x%2) case 0: a+; break;case 1: b+; break;default: a+; b+
8、;B.switch(int)x/2.0) case 0: a+; break;case 1: b+; break;default: a+; b+;C.switch(int)x%2) case 0: a+; break;case 1: b+; break;default: a+; b+;D.switch(int)(x)%2) case 0.0: a+; break;case 1.0: b+; break;default: a+; b+;25.有以下程序 #includestdio.h void fun(char(*p)6) int i; for(i=0; i4; i+) prinff(“%c“,
9、 pii); printf(“/n“); main() char s66=“ABCDE“, “abcde“, “12345“, “FGHIJ“, “fghij“, “54321“; fun(s); 程序的运行结果是(分数:2.00)A.A a 1 FB.A b 3 IC.A B C DD.f g h i j26.以下叙述中错误的是_。(分数:1.00)A.一个 C程序中可以包含多个不同名的函数B.一个 C程序只能有一个主函数C.C程序在书写时,有严格的缩进要求,否则不能编译通过D.C程序的主函数必须用 main作为函数名27.下列能正确定义一维数组的选项是 _ 。(分数:2.00)A.int
10、a5=0,1,2,3,4,5;B.char a=0,1,2,3,4,5;C.char a=“A“,“B“,“C“;D.int a5=“0123“;28.判断 char型变量 c1是否为小写字母的正确表达式为_。(分数:2.50)A.“a“=c1=“z“B.(c1=a) while(a+ +) + +b; printf(“%d,%d/n“, a, b); 则程序的输出结果是_。(分数:2.50)A.1,2B.0,2C.1,3D.2,332.以下叙述中错误的是( )。(分数:1.00)A.对于 double类型数组,不可以直接用数组名对数组进行整体输入或输出B.数组名代表的是数组所占存储区的首地址
11、,其值不可改变C.当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息D.可以通过赋初值的方式确定数组元素的个数33.以下选项中,没有编译错误的是_。(分数:1.00)A.char str3=“d“,“e“,“b“,“u“,“g“,“/0“;B.char str15=“pass“,str26;str2=str1;C.char name10;name=“china“;D.char str4;str4=“hello world“;34.下列程序的输出结果是_。 main() int a, b, d=25; a=d/10%9; b=a printf(“%d, %d/n
12、“, a, b); (分数:2.50)A.6,1B.2,1C.6,0D.2,035.有三个关系 R、S 和 T如下: R A B C a 1 2 b 2 1 c 3 1 S A D c 4 T A B C D c 3 1 4 则由关系 R和 S得到关系 T的操作是_。(分数:1.00)A.自然连接B交C.投影D并36.若有以下程序: #includestdio.h main() printf(“%d/n“, NULL); 程序的输出结果是(分数:1.00)A.因变量无定义输出不定值B.0C.-1D.137.在数据管理技术发展的三个阶段中,数据共享最好的是_。(分数:2.00)A.人工管理阶段B
13、.文件系统阶段C.数据库系统阶段D.三个阶段相同38.设变量已正确定义并赋值,以下合法的 C语言赋值语句是_。(分数:1.00)A.x=y=5B.x=n%2.5C.x+n=iD.x=5=4+139.下列关于 C语言文件的叙述中正确的是_。(分数:1.00)A.文件由一系列数据依次排列组成,只能构成二进制文件B.文件由结构序列组成,可以构成二进制文件或文本文件C.文件由数据序列组成,可以构成二进制文件或文本文件D.文件由字符序列组成,其类型只能是文本文件40.下面选项中的程序段,没有编译错误的是_。(分数:2.00)A.char*sp, s10; sp=“Hello“;B.char*sp, s1
14、0; s=“Hello“;C.char str110=“computer“, str210; str2=str1;D.char mark; mark=“PROGRAM“;二级 C语言分类模拟题 553答案解析(总分:60.00,做题时间:90 分钟)一、选择题(总题数:40,分数:60.00)1.若 fp已定义为指向某文件的指针,且没有读到该文件的末尾,则 C语言函数 feof(fp)的函数返回值是_。(分数:1.00)A.EOFB非 0C.-1D.0 解析:解析 本题考查文件的定位,feof 函数的用法是从输入流读取数据,如果到达文件末尾(遇文件结束符),eof 函数值为非零值,否则为 0,
15、所以选项 D正确。2.在满足实体完整性约束的条件下_。(分数:2.50)A.一个关系中应该有一个或多个候选关键字 B.一个关系中只能有一个候选关键字C.一个关系中必须有多个候选关键字D.一个关系中可以没有候选关键字解析:解析 实体完整性约束要求关系的主键中属性值不能为空值,因此本题答案为 A。3.若有定义:double a=22;int i=0,k=18;,则不符合 C语言规定的赋值语句是_。(分数:2.00)A.i=(a+k)=(i+k);B.i=a%11; C.a=a+,i+D.i=!a;解析:解析 取模运算符“%”、二元运算符具有左结合性,参与运算的量均为整型。B 选项中的 a变量是 d
16、ouble实型,不符合规定。4.以下叙述正确的是(分数:1.00)A.在 C语言中,只能用“/*“和“*/“对程序进行注释B.在 C语言注释语句中,“/“和“*“之间不可以有空格 C.注释语句只能使用西文D.在 C程序中,注释说明只能位于一条语句的后面解析:解析 在 C语言程序段中可以对程序进行注释,注释部分必须用“/*”和“*/”括起来,其中,“/”和“*”之间不可有空格,注释可以是西文,也可以是中文,注释说明语同步以出现在程序的任意位置。综上所述,本题的答案为 B)。5.以下正确的程序段是( )。(分数:1.00)A.char str20;scanf(“%s“, str);B.char *
17、p;scanf(“%s“, p);C.char str20;scanf(“%s“, str2) D.char str20, *p=str;scanf(“%s“, p2);解析:解析 考查如何用 scanf函数输入字符串。scanf 输入字符串有一点要注意的是格式控制串必须用%s。6.现有以下程序段: #include stdio.h main() int k30=12, 324, 45, 6, 768, 98,21, 34, 453, 456; int count=0, i=0; while(ki) if(ki % 2=0|ki % 5=0) count+; i+ printf(“% d, %
18、 d/n“, count, i); 则程序段的输出结果是_。(分数:2.50)A.7,8B.8,8C.7,10D.8,10 解析:解析 在 C语言中,定义一维数组的语句一般形式如下: 类型说明符 数组名常量表达式; 一维数组的引用形式为:数组名下标表达式。count 表示能被 2或 5整除的个数,i 则计算有多少个数组元素。7.若变量均已被正确定义并赋值,以下合法的 C语言赋值语句是_。(分数:1.00)A.x=n%2.5;B.x=y=5; C.x+n=i;D.x=5=4+1;解析:解析 %取余操作数只能是整数,x+n 和数值 5不能作为赋值的左值,所以 A、C、D 错误。8.下述程序执行的输
19、出结果是_。 #includestdio.h main() char a24; strcpy(a, “are“); strcpy(a1, “you“); a03=“ printf(“%s/n“, a); (分数:1.00)A.are printf(“%d,%d/n“,FNA(FNB(a),FNB(FNA(b); 程序运行后的输出结果是_。(分数:1.00)A.8,16B.16,32C.8,32 D.16,16解析:解析 带参数的宏定义不是进行简单的字符串替换,而是要进行参数替换不计算,只是进行简单的替换。替换过程是:用宏调用提供的实参字符串,直接置换宏定义命令行中相应形参字符串,非形参字符保持
20、不变。FNA(FNB(a)的替换过程为:FNA(2+2)替换为 2+22+2,计算结果为 8。FNB(FNA(b)的替换过程为:FNB(4*4)替换为 44+44=32。程序运行后的输出结果是 8,32,故 C选项正确。10.关于结构化程序设计原则和方法的描述错误的是_。(分数:2.50)A.选用的结构只准许有一个入口和一个出口B.复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现C.不允许使用 GOTO语句 D.语言中若没有控制结构,应该采用前后一致的方法来模拟解析:解析 结构化程序设计的原则和方法之一是限制使用 GOTO语句,但不是绝对不允许使用。其他三项为结构化程序设计的原则。11.若
21、x=4,y=5,则 xi7;i+)printf(i%2)?(“*%d/n“):(“#%d/n“),i); A B C D (分数:2.50)A.B.C.D. 解析:17.有以下程序 #include stdio.h main() int x=1,y=0; if(!x) y+; else if(x=0) if(x) y+=2; else y+=3; printf(“%d/n“,y); 程序运行后的输出结果是_。(分数:1.00)A.3B.2C.1D.0 解析:解析 在 if else语句中 else总是与离它最近的 if配对。本题目中 x为 1,因此“!x”为 0,所以执行 else if语句中
22、的内容,判断“x=0”是否成立,因为 x为 1,所以条件不成立,因此 else if内部的“if.else”语句不再执行,所以 y的值还是初始值 0。18.下列关于逻辑运算符两侧运算对象的叙述中正确的是_。(分数:2.00)A.只能是整数 0或 1B.只能是整数 0或非 0整数C.可以是结构体类型的数据D.可以是任意合法的表达式 解析:19.设 x和 y都是 int类型,且 x=1,y=2,则 printf(“%d%d“,x,y,(x,y)的输出结果是 _ 。(分数:1.00)A.1 2 B.1 2 2C.1,2D.输出值不确定解析:解析 本题考查 printf函数的格式和逗号表达式。prin
23、tf 函数在输出时,是根据格式说明符的个数输出的,如果函数中有有多余的项将不予输出;如果有输出项少于格式说明符,则出错,不能输出正确的结果。 本题中逗号表达式(x,y)只返回 y的值。此时格式说明的个数是 2,而输出项的个数是 3,因此 printf函数只输出前两项。20.以下选项中正确的定义语句是_。(分数:1.00)A.double,a,b;B.double a=b=7;C.double a;b;D.double a=7,b =7; 解析:解析 A 选项中变量类型符 double后面不能有逗号。B 选项中变量 b不能先使用再定义,应该写成选项 D中的格式。C 选项中变量 a后面应该是逗号而
24、不是分号。21.有以下程序 #includestdio.h main() int i,t3=9,8,7,6,5,4,3,2,1; for(i=0;i3;i+) printf(“%d“,t2-ii); 程序执行后的输出结果是_。(分数:2.00)A.357 B.753C.369D.751解析:解析 本题考查的是 for循环与二维数组的定义和引用。当定义二维数组的初始化列表只使用一重花括号时,其中的每个值依次代表从第 1行的第 1个元素起,直到第 1行满,接着代表第 2行、第 3行的每一个元素。程序中的循环将循环 3次,循环变量 i的值分别是 0、1、2,所以 3次循环中输出的数分别是:t2-00
25、、t2-11、t2-22,即 t20、t11、t02,所以最后输出的结果为 3 5 7。故应该选择 A。22.某二叉树有 5个度为 2的结点,则该二叉树中的叶子结点数是_。(分数:1.00)A.10B.8C.6 D.4解析:解析 根据二叉树的基本性质 3:在任意一棵二叉树中,度为 0的叶子结点总是比度为 2的结点多一个,因此本题答案是 5+1=6,故选择 C。23.将 E-R图转换为关系模式时,实体和联系都可以表示为_。(分数:1.00)A.属性B键C.关系 D域解析:解析 从 E-R图到关系模式的转换是比较直接的,实体与联系都可以表示成关系,E-R 图中属性也可以转换成关系的属性,因此本题答
26、案为 C。24.若有定义语句“int a, b; double x;”,则下列选项中没有错误的是_。(分数:1.00)A.switch(x%2) case 0: a+; break;case 1: b+; break;default: a+; b+;B.switch(int)x/2.0) case 0: a+; break;case 1: b+; break;default: a+; b+;C.switch(int)x%2) case 0: a+; break;case 1: b+; break;default: a+; b+; D.switch(int)(x)%2) case 0.0: a+
27、; break;case 1.0: b+; break;default: a+; b+;解析:解析 C 语言中,switch 语句中的表达式和 case表达式都不能是浮点类型。所以选 C。25.有以下程序 #includestdio.h void fun(char(*p)6) int i; for(i=0; i4; i+) prinff(“%c“, pii); printf(“/n“); main() char s66=“ABCDE“, “abcde“, “12345“, “FGHIJ“, “fghij“, “54321“; fun(s); 程序的运行结果是(分数:2.00)A.A a 1 F
28、B.A b 3 I C.A B C DD.f g h i j解析:26.以下叙述中错误的是_。(分数:1.00)A.一个 C程序中可以包含多个不同名的函数B.一个 C程序只能有一个主函数C.C程序在书写时,有严格的缩进要求,否则不能编译通过 D.C程序的主函数必须用 main作为函数名解析:解析 C 语言程序中有且只有一个主函数,但允许自定义多个函数。主函数的表示方法为 main(),所以答案选择 C。27.下列能正确定义一维数组的选项是 _ 。(分数:2.00)A.int a5=0,1,2,3,4,5;B.char a=0,1,2,3,4,5; C.char a=“A“,“B“,“C“;D.
29、int a5=“0123“;解析:解析 在定义数组时,如果赋给的初始值个数大于数值的长度,这样就会越界,因此选项 A)错误;选项 C 中定义的是一个字符变量 C;选项 D)中整型数组 a中只能存储整型数据,而不能存储字符串常量“0123”。28.判断 char型变量 c1是否为小写字母的正确表达式为_。(分数:2.50)A.“a“=c1=“z“B.(c1=a) while(a+ +) + +b; printf(“%d,%d/n“, a, b); 则程序的输出结果是_。(分数:2.50)A.1,2 B.0,2C.1,3D.2,3解析:解析 第一次 while判断条件是 a+,先使用后加 1,为-
30、2 时不为 0,条件为真,执行 a的自加与+b操作,a 的值变为-1,b 的值变为 1。第二次 while判断后,a 的值变为 0,b 的值变为 2。第三次while判断条件为假,但是仍要执行自加操作,即值为 1,跳出循环。打印 1和 2。32.以下叙述中错误的是( )。(分数:1.00)A.对于 double类型数组,不可以直接用数组名对数组进行整体输入或输出B.数组名代表的是数组所占存储区的首地址,其值不可改变C.当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息 D.可以通过赋初值的方式确定数组元素的个数解析:解析 本题考查的是数组的基本概念。在 C语言
31、中,除字符数组外,一个数组不能通过数组名对数组进行整体引用,因此选项 A)是对的。数组名中存放的是一个地址常量,它代表整个数组的首地址,因此选项 B)是对的。C 语言程序在运行过程中,系统不自动检验数组元素的下标是否越界,因此选项 C)是错误的。C 语言规定可以通过赋初值来定义数组的大小,这时数组说明符的一对方括号中可以不指定数组的大小,因此选项 D)也是正确的。所以,4 个选项中选项 C)符合题意。33.以下选项中,没有编译错误的是_。(分数:1.00)A.char str3=“d“,“e“,“b“,“u“,“g“,“/0“; B.char str15=“pass“,str26;str2=s
32、tr1;C.char name10;name=“china“;D.char str4;str4=“hello world“;解析:解析 B 选项中,不能直接将字符数组名直接赋值给另一个字符数组名。C 选项赋值错误,不能将一个字符串常量赋值给一个字符指针。D 选项定义 str4时需要定义其长度。34.下列程序的输出结果是_。 main() int a, b, d=25; a=d/10%9; b=a printf(“%d, %d/n“, a, b); (分数:2.50)A.6,1B.2,1 C.6,0D.2,0解析:解析 当逻辑运算符“ 程序的输出结果是(分数:1.00)A.因变量无定义输出不定值
33、B.0 C.-1D.1解析:37.在数据管理技术发展的三个阶段中,数据共享最好的是_。(分数:2.00)A.人工管理阶段B.文件系统阶段C.数据库系统阶段 D.三个阶段相同解析:解析 数据管理技术发展至今经历了三个阶段:人工管理阶段、文件系统阶段和数据库系统阶段。其中最后一个阶段结构简单,逻辑性强物理性少,使用方便,在各方面的表现都最好,一直占据数据库领域的主导地位,因此本题答案为 C。38.设变量已正确定义并赋值,以下合法的 C语言赋值语句是_。(分数:1.00)A.x=y=5 B.x=n%2.5C.x+n=iD.x=5=4+1解析:解析 赋值运算符左侧的操作数必须是一个变量,而不能是表达式
34、或者常量,选项 C和 D错误。“%”运算符两侧都应当是整型数据,选项 B错误。39.下列关于 C语言文件的叙述中正确的是_。(分数:1.00)A.文件由一系列数据依次排列组成,只能构成二进制文件B.文件由结构序列组成,可以构成二进制文件或文本文件C.文件由数据序列组成,可以构成二进制文件或文本文件 D.文件由字符序列组成,其类型只能是文本文件解析:解析 本题考查文件的概念,文件是由数据序列组成,可以构成二进制文件或文本文件,所以答案为 C选项。40.下面选项中的程序段,没有编译错误的是_。(分数:2.00)A.char*sp, s10; sp=“Hello“; B.char*sp, s10; s=“Hello“;C.char str110=“computer“, str210; str2=str1;D.char mark; mark=“PROGRAM“;解析:解析 char 类型指针可以用字符串赋值,字符数组在定义时可以,其他地方不能直接用字符串赋值。