1、二级 C 语言分类模拟题 535 及答案解析(总分:48.50,做题时间:90 分钟)一、选择题(总题数:35,分数:48.50)1.有以下程序段: int x; for(x=3; x6; x+) printf(x%2)?(“*%d“): (“#%d/n“), x); 程序段的输出结果是(分数:2.00)A.*3#4*5B.#3*4#5C.#3*4#5.D.*3#4*52.设 x 和 y 都是 int 类型,且 x=1,y=2,则 printf(“%d%d“,x,y,(x,y)的输出结果是 _ 。(分数:1.00)A.1 2B.1 2 2C.1,2D.输出值不确定3.若有以下说明和定义: #i
2、ncludestdio.h main() int(*a)(int*), *b(), w10, c; int fun(int*c) 则以下选项中能正确调用 fun 函数是(分数:1.00)A.a=fun; a(w);B.a=fun; (*a)(C.b=fun; *b(w);D.fun(b);4.若变量已正确定义,在 if(W)printf(“%d/n“,k);中,以下不可替代 W 的是_。(分数:1.00)A.a=b+cB.ch=getchar()C.ab+cD.a+5.阅读以下程序: # includestdio.h main() int case; float printF; printf(
3、“请输入 2 个数:“); scanf(“%d%f“, case,printF); printf(“%d%f/n“,case,printF); 该程序在编译时产生错误,其出错原因是_。(分数:1.00)A.定义语句出错,case 是关键字,不能用作用户自定义标识符B.定义语句出错,printF 不能用作用户自定义标识符C.定义语句无错,scanf 不能作为输入函数使用D.定义语句无错,printf 不能输出 case 的值6.有以下程序: # include stdio.h main() char a,b,c; b=“1“;c=“A“; for(a=0;a6;a+) if(a%2) putch
4、ar(b+a); else putchar(c+a); 程序运行后的输出结果是_。(分数:1.00)A.1B3D5FB.ABCDEFC.A2C4E6D.1234567.下面对软件特点描述不正确的是_。(分数:1.00)A.软件是一种逻辑实体,具有抽象性B.软件开发、运行对计算机系统具有依赖性C.软件开发涉及软件知识产权、法律及心理等社会因素D.软件运行存在磨损和老化问题8.下列叙述中正确的是_。(分数:1.00)A.存储空间不连续的所有链表一定是非线性结构B.节点中有多个指针域的所有链表一定是非线性结构C.能顺序存储的数据结构一定是线性结构D.带链的栈与队列是线性结构9.设有宏定义: #def
5、ine IsDIV(k,n) (k%n= =1)?1 : 0) 且变量 m 已正确定义并赋值,则宏调用: IsDIV(m,5) t=*a;*a=*b;*b=t; tp=a;a=b;b=tp; printf(“%d,%d,“,*a,*b); main() int i=3,j=7,*p= swap(p,q); printf(“%d,%d,%d,%d“,i,j,*p,*q); 程序执行后的输出结果是_。(分数:1.00)A.3,7,3,7,3,7B.7,3,7,3,7,3C.3,7,3,7,7,3D.3,7,7,3,7,313.以下程序段给数组所有元素输入数据: #include stdio.h m
6、ain() int a10, i=0; while(i10) scanf(“%d“, _); 应在下划线处填入的是(分数:1.00)A.a+(i+)B. int age; char sex; std10, *p=std; 以下语句错误的是_。(分数:1.00)A.scanf(“%d“, p-age);B.scanf(“%s“,std0.name);C.scanf(“%d“,D.scanf(“%c“,15.若有以下程序段: char str412=“aaa“,“bbbb“,“ccccc“,“dddddd“,*strp4; int i; for(i=0;i4;i+)strpi=stri; 则以下错
7、误引用字符串的选项是(其中 0k4)_。(分数:1.00)A.*strpB.strkC.strpkD.strp16.有以下程序段: int j;float y;char name50; scanf(“%2d%f%s“, 当执行上述程序段,从键盘上输入 55566 7777abc 后,y 的值为_。(分数:2.00)A.55566.0B.566.0C.7777.0D.566777.017.程序流程图中带有箭头的线段表示的是_。(分数:1.00)A.图元关系B.数据流C.控制流D.调用关系18.已定义以下函数 int fun(int *P) return *P; fun 函数返回值是_。(分数:1
8、.00)A.一个整数B.不确定的值C.形参 p 中存放的值D.形参 p 的地址值19.软件测试的目的是_。(分数:2.50)A.评估软件可靠性B.发现并改正程序中的错误C.改正程序中的错误D.发现程序中的错误20.若有定义:float x=1.5;int a=1,b=3,c=2;,则正确的 switch 语句是_。(分数:2.50)A.switch(a+b)case 1:printf(“*/n“);case 2+1:printf(“*/n“);B.switch(int)x);case 1:printf(“*/n“);case 2:printf(“*/n“);C.switch(x)case 1.
9、0:printf(“*/n“);case 2.0:printf(“*/n“);D.switch(a+b)case 1:printf(“*/n“);case c:printf(“*/n“);21.下面程序的运行结果是_。 #includestdio.h void del(char*s) int i,j; char*a; a=s; for(i=0,j=0;ai!=“/0“;i+) if(ai=“0“ j+; sj=“/0“; main() char s=“aa89gggh“; del(s); printf(“/n%s“,s); (分数:2.00)A.aaB.89C.ggghD.aa89gggh22
10、.以下选项中表示一个合法的常量是(说明:符号表示空格)_。(分数:1.00)A.999B.0XabC.123E0.2D.2.7e23.有以下程序: #include #define S(x) (x)*x*2main() int k=5,j-2;printf(“%d,“,S(k+j);printf(“%d/n“,S(k-j);程序运行后的输出结果是 。 A.98,18 B.39,11 C.39,18 D.98,11A B C D C解析 由#define 的定义知,x 是在预编译阶段替换参数值,即第一个 s(k+j)替换成(k+j)*k+j*2,带入数值得 39;第二个 s(k-j)替换成(k-
11、j)*(k-j)*2,带入数值得 18。故选 C) 。(分数:2.00)A.98,18B.39,11C.39,18D.98,1124.若有以下程序段: int r=8; print(“%d/n“,r1); 输出结果是_。(分数:1.00)A.16B.8C.4D.225.有以下函数定义: 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);26.下列叙述中正确的是_。(
12、分数:1.00)A.存储空间连续的数据结构一定是线性结构B.存储空间不连续的数据结构一定是非线性结构C.没有根节点的非空数据结构一定是线性结构D.具有两个根节点的数据结构一定是非线性结构27.以下选项中,能够正确利用随机函数 rand(),产生一个英文字母的表达式是_。(分数:1.00)A.rand()%2=0?rand()%“A“:rand()%“a“B.rand()%26+“A“|rand()%26+“a“C.rand()%26+“A“ 以下选项中能够使 c 正确指向一个字符串的是_。(分数:1.00)A.char str=“string“;c=str;B.scanf(“%s“,c);C.
13、c=getchar();D.*c=“string“;30.C 语言中运算对象必须是整型的运算符是_。(分数:2.50)A.%B./C.!D.*31.在结构化分析方法中,数据字典的作用是_。(分数:2.50)A.存放所有需要处理的原始数据B.存放所有处理的结果C.存放所有程序文件D.描述系统中所用到的全部数据和文件的有关信息32.有以下程序: #includestdio.h main() char a30,b30; scanf(“%s“,a); gets(b); printf(“%s%s“,a,b); 程序运行时若输入: how are you? I am fine回车 则输出结果是_。(分数:
14、2.00)A.how are you?I am fineB.howare you? I am fineC.how are you? I am fineD.how are you?33.以下结构体类型说明和变量定义中正确的是_。(分数:2.00)A.typedef structint n;char c;REC;REC t1,t2;B.struct REC;int n;char c;);REC t1,t2;C.typedef struct REC;int n=0;char c=“A“;t1,t2;D.structint n;char c;REC;REC t1,t2;34.有下列程序: int fu
15、n(int x, int n) static int sum=0, i; for(i=0; in; i+) sum+=xi; return sum; main() int a=1, 2, 3, 4, 5, b=6, 7, 8, 9, s=0; s=fun(a, 5)+fun(b, 4); printf(“%d/n“, s); 程序执行后的输出结果是_。(分数:1.00)A.45B.50C.60D.5535.有以下程序: #include stdio.h main( ) chair ch=“B“; while (ch“E“) printf(“%d“, ch-“A“); ch+; printf(“
16、/n“); 程序运行后的输出结果是_。(分数:1.00)A.123B.ABCC.abcD.012二级 C 语言分类模拟题 535 答案解析(总分:48.50,做题时间:90 分钟)一、选择题(总题数:35,分数:48.50)1.有以下程序段: int x; for(x=3; x6; x+) printf(x%2)?(“*%d“): (“#%d/n“), x); 程序段的输出结果是(分数:2.00)A.*3#4*5B.#3*4#5C.#3*4#5.D.*3#4*5 解析:2.设 x 和 y 都是 int 类型,且 x=1,y=2,则 printf(“%d%d“,x,y,(x,y)的输出结果是 _
17、 。(分数:1.00)A.1 2 B.1 2 2C.1,2D.输出值不确定解析:解析 本题考查 printf 函数的格式和逗号表达式。printf 函数在输出时,是根据格式说明符的个数输出的,如果函数中有有多余的项将不予输出;如果有输出项少于格式说明符,则出错,不能输出正确的结果。 本题中逗号表达式(x,y)只返回 y 的值。此时格式说明的个数是 2,而输出项的个数是 3,因此 printf 函数只输出前两项。3.若有以下说明和定义: #includestdio.h main() int(*a)(int*), *b(), w10, c; int fun(int*c) 则以下选项中能正确调用 f
18、un 函数是(分数:1.00)A.a=fun; a(w);B.a=fun; (*a)( C.b=fun; *b(w);D.fun(b);解析:4.若变量已正确定义,在 if(W)printf(“%d/n“,k);中,以下不可替代 W 的是_。(分数:1.00)A.a=b+cB.ch=getchar()C.ab+c D.a+解析:解析 选项 C 是非法的表达式,C 语言中没有“”运算符。5.阅读以下程序: # includestdio.h main() int case; float printF; printf(“请输入 2 个数:“); scanf(“%d%f“, case,printF);
19、 printf(“%d%f/n“,case,printF); 该程序在编译时产生错误,其出错原因是_。(分数:1.00)A.定义语句出错,case 是关键字,不能用作用户自定义标识符 B.定义语句出错,printF 不能用作用户自定义标识符C.定义语句无错,scanf 不能作为输入函数使用D.定义语句无错,printf 不能输出 case 的值解析:解析 本题中定义了整形变量 case,但 case 是关键字,关键字不能用作标识符。单精度 printF不是关键字,因为标识符区分大小写。所以选项 A 不正确。6.有以下程序: # include stdio.h main() char a,b,c
20、; b=“1“;c=“A“; for(a=0;a6;a+) if(a%2) putchar(b+a); else putchar(c+a); 程序运行后的输出结果是_。(分数:1.00)A.1B3D5FB.ABCDEFC.A2C4E6 D.123456解析:解析 本题考查 putchar 输出语句,当 a=0 时,a%2=0,执行 else 语句,所以第一次输出 A;当a=1 时,a%2=1,执行 if 语句,所以第二次输出 2,依次类推,所以答案选择 C。7.下面对软件特点描述不正确的是_。(分数:1.00)A.软件是一种逻辑实体,具有抽象性B.软件开发、运行对计算机系统具有依赖性C.软件开
21、发涉及软件知识产权、法律及心理等社会因素D.软件运行存在磨损和老化问题 解析:解析 与硬件不同,软件在运行、使用期间不存在磨损、老化问题。8.下列叙述中正确的是_。(分数:1.00)A.存储空间不连续的所有链表一定是非线性结构B.节点中有多个指针域的所有链表一定是非线性结构C.能顺序存储的数据结构一定是线性结构D.带链的栈与队列是线性结构 解析:解析 一个非空的数据结构如果满足以下两个条件:有且只有一个根节点;每一个节点最多有一个前件,也最多有一个后件,称为线性结构,也称为线性表,可以采用顺序存储和链式存储,其中链式存储空间不连续,所以 A 选项错误。双向链表节点有两个指针域指向前一个节点的指
22、针和指向后一个节点的指针,也是线性结构,敞 B 选项错误。顺序存储结构中可能根节点不唯一,故可能不是线性结构,所以 C选项错误。栈是所有的插入与删除都限定在表的同一端进行的线性表;队列是允许在一端进行插入,而在另一端进行删除的线性表。故 D 选项正确。9.设有宏定义: #define IsDIV(k,n) (k%n= =1)?1 : 0) 且变量 m 已正确定义并赋值,则宏调用: IsDIV(m,5) t=*a;*a=*b;*b=t; tp=a;a=b;b=tp; printf(“%d,%d,“,*a,*b); main() int i=3,j=7,*p= swap(p,q); printf(
23、“%d,%d,%d,%d“,i,j,*p,*q); 程序执行后的输出结果是_。(分数:1.00)A.3,7,3,7,3,7B.7,3,7,3,7,3C.3,7,3,7,7,3D.3,7,7,3,7,3 解析:解析 main()函数中,首先定义两个整型变量 i 和 j,初值为 3 和 7,并将 i 的地址赋给 p,j 的地址赋给 q,传给 swap()函数,swap()函数接收两个整型指针变量 a,b,然后使用整型变量 t 交换 a、b所指向的值并输出,通过指针变量,这次交换改变了实参 i、j 的值,使得 i=7,j=3;指针变量 tp 交换a 和 b 的值,由于 a、b 的值是 p,q 值的拷
24、贝,所以这次交换只改变了形参 a,b 的值,对实参 p,q 的值没有改变,所以此时 a 指向 j,b 指向 i,函数最后输出*a 和*b,所以输出 3,7;由于 swap()函数改变了p 和 q 指向的值,但未改变 p,q 的值,所以 main()函数输出 i 的值为 7,j 的值为 3,*p 的值为 i,*q 的值为 j,所以程序输出:3,7,7,3,7,3,本题答案为 D。13.以下程序段给数组所有元素输入数据: #include stdio.h main() int a10, i=0; while(i10) scanf(“%d“, _); 应在下划线处填入的是(分数:1.00)A.a+(
25、i+) B. int age; char sex; std10, *p=std; 以下语句错误的是_。(分数:1.00)A.scanf(“%d“, p-age); B.scanf(“%s“,std0.name);C.scanf(“%d“,D.scanf(“%c“,解析:解析 A 选项中,p-age 是结构指针访问结构成员的方式,如果为结构体内变量进行赋值,应该对指针地址指向的单元进行赋值,因此在 p-age 前面应该加入取地址符,A 选项语句错误,答案为 A选项。15.若有以下程序段: char str412=“aaa“,“bbbb“,“ccccc“,“dddddd“,*strp4; int
26、i; for(i=0;i4;i+)strpi=stri; 则以下错误引用字符串的选项是(其中 0k4)_。(分数:1.00)A.*strpB.strkC.strpkD.strp 解析:解析 程序定义了二维数组 str,指针数组 strp。A 项正确,*strp 引用数组 str 的第一行字符串”aaa”;B 项正确,strk引用数组 str 的第 k 行字符串;C 项正确,strpk引用数组 str 的第 k 行字符串;D 项错误,strp 不能引用字符串。16.有以下程序段: int j;float y;char name50; scanf(“%2d%f%s“, 当执行上述程序段,从键盘上输
27、入 55566 7777abc 后,y 的值为_。(分数:2.00)A.55566.0B.566.0 C.7777.0D.566777.0解析:解析 本题考查通过 scanf 函数输入数据时的格式控制问题。变量 j 的格式控制为“%2d”,即只接收输入数据的前两位,从第三位开始直到空格之间的输入都会被保存到变量 y 中,因为 y 为浮点型数据,所以输出结果为选项 B。17.程序流程图中带有箭头的线段表示的是_。(分数:1.00)A.图元关系B.数据流C.控制流 D.调用关系解析:解析 在数据流图中,用标有名字的箭头表示数据流。在程序流程图中,用标有名字的箭头表示控制流。所以选择 C 选项。18
28、.已定义以下函数 int fun(int *P) return *P; fun 函数返回值是_。(分数:1.00)A.一个整数 B.不确定的值C.形参 p 中存放的值D.形参 p 的地址值解析:解析 本题考查的是指针的概念。在 C 语言中,指针是一种特殊的变量,它存放的值是一个内存地址。所以一个指针变量涉及三个值:指针变量所指内容的值、指针变量中存放的值、指针变量的地址值。它们可以分别用表达式*p、p、int a=1,b=3,c=2;,则正确的 switch 语句是_。(分数:2.50)A.switch(a+b)case 1:printf(“*/n“);case 2+1:printf(“*/n
29、“); B.switch(int)x);case 1:printf(“*/n“);case 2:printf(“*/n“);C.switch(x)case 1.0:printf(“*/n“);case 2.0:printf(“*/n“);D.switch(a+b)case 1:printf(“*/n“);case c:printf(“*/n“);解析:解析 B 选项中 switch(int)x);语句中不应该有最后的分号。switch(expr1)中的 expr1 不能用浮点类型或 long 类型,也不能为一个字符串,所以 C 选项错误。case 后面必须为常量表达式,所以 D 选项错误。21
30、.下面程序的运行结果是_。 #includestdio.h void del(char*s) int i,j; char*a; a=s; for(i=0,j=0;ai!=“/0“;i+) if(ai=“0“ j+; sj=“/0“; main() char s=“aa89gggh“; del(s); printf(“/n%s“,s); (分数:2.00)A.aaB.89 C.ggghD.aa89gggh解析:22.以下选项中表示一个合法的常量是(说明:符号表示空格)_。(分数:1.00)A.999B.0Xab C.123E0.2D.2.7e解析:解析 当用指数形式表示浮点数据时,E 的前后都要
31、有数据,并且 E 的后面数要为整数。23.有以下程序: #include #define S(x) (x)*x*2main() int k=5,j-2;printf(“%d,“,S(k+j);printf(“%d/n“,S(k-j);程序运行后的输出结果是 。 A.98,18 B.39,11 C.39,18 D.98,11A B C D C解析 由#define 的定义知,x 是在预编译阶段替换参数值,即第一个 s(k+j)替换成(k+j)*k+j*2,带入数值得 39;第二个 s(k-j)替换成(k-j)*(k-j)*2,带入数值得 18。故选 C) 。(分数:2.00)A.98,18B.3
32、9,11C.39,18 D.98,11解析:解析 由#define 的定义知,x 是在预编译阶段替换参数值,即第一个 s(k+j)替换成(k+j)*k+j*2,带入数值得 39;第二个 s(k-j)替换成(k-j)*(k-j)*2,带入数值得 18。故选 C) 。24.若有以下程序段: int r=8; print(“%d/n“,r1); 输出结果是_。(分数:1.00)A.16B.8C.4 D.2解析:解析 本题考查移位运算。将 8 转为二进制数为 1000,右移一位不足补 0,结果为 0100,转化为十进制结果为 4。25.有以下函数定义: void fun(int n, double x
33、) 若以下选项中的变量都已正确定义并赋值,则对函数 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)错误。26.下列叙述中正确的是_。(分数:1.00)A.存储空间连续的数据结构一定是线性结构B.存储空间不连续的数据结构一定是非线性结构C.没有根节点的非空数据结构一定是线性结构D.具有两个根节点的数据
34、结构一定是非线性结构 解析:解析 一个非空的数据结构如果满足以下两个条件:有且只有一个根节点;每一个节点最多有一个前件,也最多有一个后件,称为线性结构,也称为线性表,可以采用顺序存储和链式存储,其中顺序存储的空间连续而链式存储空间不连续。非线性结构是指不满足以上两个条件的数据结构,非线性结构主要是指树形结构和网状结构。数据结构线性与否与存储空间是否连续没有直接关系,如二叉树可以用一片连续的空间来存储,但其为非线性结构,A 选项错误。线性表的链式存储结构可以用不连续的空间来存储,但其为线性结构,B 选项错误。没有根节点的非空数据结构一定不是线性结构,C 选项错误。具有两个根节点的结构一定是非线性
35、结构,故 D 选项正确。27.以下选项中,能够正确利用随机函数 rand(),产生一个英文字母的表达式是_。(分数:1.00)A.rand()%2=0?rand()%“A“:rand()%“a“B.rand()%26+“A“|rand()%26+“a“C.rand()%26+“A“ 以下选项中能够使 c 正确指向一个字符串的是_。(分数:1.00)A.char str=“string“;c=str; B.scanf(“%s“,c);C.c=getchar();D.*c=“string“;解析:解析 选项 A 定义字符数组 str,然后将 str 赋值给 c,c 便指向字符串 str,符合题意,
36、所以选择 A。30.C 语言中运算对象必须是整型的运算符是_。(分数:2.50)A.% B./C.!D.*解析:解析 %既然求余数,运算对象必须是整数。31.在结构化分析方法中,数据字典的作用是_。(分数:2.50)A.存放所有需要处理的原始数据B.存放所有处理的结果C.存放所有程序文件D.描述系统中所用到的全部数据和文件的有关信息 解析:解析 在 C 语言中,结构化分析方法中的数据字典的作用是描述系统中所用到的全部数据和文件的有关信息。32.有以下程序: #includestdio.h main() char a30,b30; scanf(“%s“,a); gets(b); printf(“
37、%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?解析:解析 这道题主要考查的是 scanf 函数和 gets 函数在输入字符串时的差别。scanf 函数在以格式字符 s 输入字符串时,当遇到字符“/0”时,表示输入字符串结束。而函数 gets(b)是从键盘读入一行字符串放入字符数组 b 中,所以当从键盘输入 how are you? I am fi
38、ne回车时,把字符串 how 存入字符数组 a 中,把其余的字符存入字符数组 b 中,因而正确答案为选项 C。33.以下结构体类型说明和变量定义中正确的是_。(分数:2.00)A.typedef structint n;char c;REC;REC t1,t2; B.struct REC;int n;char c;);REC t1,t2;C.typedef struct REC;int n=0;char c=“A“;t1,t2;D.structint n;char c;REC;REC t1,t2;解析:解析 B 选项和 C 选项中,REC 后不应加分号,D 选项,没有 typedef,REC
39、不能作为类型名。所以答案选择 A。34.有下列程序: int fun(int x, int n) static int sum=0, i; for(i=0; in; i+) sum+=xi; return sum; main() int a=1, 2, 3, 4, 5, b=6, 7, 8, 9, s=0; s=fun(a, 5)+fun(b, 4); printf(“%d/n“, s); 程序执行后的输出结果是_。(分数:1.00)A.45B.50C.60 D.55解析:解析 在函数 int fun(int x,int n)的定义中,变量 sum 为一个静态局部变量。由于在整个程序运行期间,
40、静态局部变量在内存中的静态存储中占据着永久的存储单元。函数 int fun(int x,int n)的功能是求出数组 x各个元素的和,所以在主函数中,调用函数 fun(a,5)后,变量sum=1+2+3+4+5=15,当再次调用 fun(b,4)后,变量 sum=15+6+7+8+9=45,所以 s=15+45=60。35.有以下程序: #include stdio.h main( ) chair ch=“B“; while (ch“E“) printf(“%d“, ch-“A“); ch+; printf(“/n“); 程序运行后的输出结果是_。(分数:1.00)A.123 B.ABCC.abcD.012解析:解析 当满足 ch“E“,输出 ch-“A“,即字符在 AsCII 码相减进行输出,%d 表示输出十进制整数。循环开始 ch=“B“,print(“%d”,ch-“A“)=1,以此类推答案为 A 选项。