1、二级 C 语言-31 及答案解析(总分:79.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:51.00)1.请选出以下程序的输出结果_。#includestdio.hsub(int*s,inty) static int t=3,y=st;t-;main() int a=1,2,3,4,i,x=0;for(i=0;i4;i+)sub(a,x);printf(“%d“,x);printf(“/n“); A. 1234 B. 4321 C. 0000 D. 4444 (分数:1.00)A.B.C.D.2.下列程序执行后的输出结果是void func1(int i);void fu
2、nc2(int i);char st=“hello,friend!”;void func1(int i) printf(“%c“,sti);if(i3)i+=2;func2(i);void func2(int i) printf(“%c“,sti);if(i3)i+=2;func1(i); int i=0;func1(i);printf(“/n“); A. hello B. hel C. hlo D. hlm(分数:1.00)A.B.C.D.3.下列表达式中,可以正确表示 x0 或 x1 的关系是U /U。 A. (x=1)(x=0) B. x1x=0 C. x=1 OR x=0 D. x=1
3、 strcat(m,n);printf(“%d%d/n“, sizeof(m), strlen(m); A. 2011 B. 99 C. 209 D. 1111(分数:1.00)A.B.C.D.22.以下对枚举类型名的定义中正确的是_。 A. enum a=one, two,three; B. enum aone=9,two=1,three; C. enum a=“one“,“two“,“three“; D. enum a“one“, “two“,“three“; (分数:1.00)A.B.C.D.23.有以下程序 #includestdio.h void fun(int x) if(x/21
4、)fun(x/2); printf(“%d“,x); main() fun(7);printf(“/n“);) 程序运行后的输出结果是U /U。 A. 1 3 7 B. 7 3 1 C. 7 3 D. 3 7(分数:2.00)A.B.C.D.24.变量 a 所占的内存字节数是 _。 A. 4 B. 5 C. 6 D. 8 union U char st4; int i; long l; ; Struct A int c; union U u; a; (分数:1.00)A.B.C.D.25.设有定义:char p=1,2,3,*q=p;,以下不能计算出一个 char 型数据所占字节数的表达是_。
5、 A. sizeof(p) B. sizeof(char) C. sizeof(*q) D. sizeof(p0)(分数:2.00)A.B.C.D.26.设有以下定义:int a=0; double b=1.25; char c=A;#define d 2则下面语句中错误的是( )。 A. a+; B. b+; C. c+; D. d+;(分数:1.00)A.B.C.D.27.线性表 L=(a1,a2,a3,ai,an),下列说法正确的是 A. 每个元素都有一个直接前件和直接后件 B. 线性表中至少要有一个元素 C. 表中诸元素的排列顺序必须是由小到大或由大到小 D. 除第一个元素和最后一个元
6、素外,其余每个元素都有一个且只有一个直接前件和直接后件(分数:2.00)A.B.C.D.28.若要求从键盘读入含有空格字符的字符串,应使用函数_。 A. getc() B. gets() C. getchar() D. scanf()(分数:2.00)A.B.C.D.29.有以下程序:#includestdio.h#includestdio.hmain() char c6;int i=0;for(;j6;ci=getchar(),i+);for(i=0;i6;i+)putchar(ci);printf(“/n“);如果从键盘上输入:ab回车c回车def回车则输出结果为 _。 A. a b c
7、d e f B. a b c d C. ab c d D. abcdef(分数:2.00)A.B.C.D.30.以下说法错误的是 A. 一个算法应包含有限个步骤 B. 在计算机上实现的算法是用来处理数据对象的 C. 算法中指定的操作,不能通过已经实现的基本运算执行有限次后实现 D. 算法的目的是求解(分数:1.00)A.B.C.D.31.下面结构体的定义语句中,错误的是U /U。 A.struct ordint x;int y;int z;struct ord a; B.struct ordint x;int y;int z;struct ord a; C.struct ordint x;in
8、t y;int z;a; D.structint x;int y;int z;a;(分数:1.00)A.B.C.D.32.设计软件结构是在软件生命周期的U /U。 A. 软件定义期 B. 软件开发期 C. 软件维护期 D. 以上三个都不是(分数:2.00)A.B.C.D.33.对下述程序的判断中,正确的是U /U。#includestdio.hvoid main()char *P,s256;p=s;while(strcmp(s,“the end“)printf(“Input the string:“);gets(s);while(*P)putchar(*p+); A. 此程序循环接收字符串并输
9、出,直到接收到字符串“the end”为止 B. 此程序循环接收字符串,接收到字符串“the end”则输出,否则程序终止 C. 此程序循环接收字符串并输出,直到接收字符串“the end”为止,但因为代码有错误,程序不能正常工作 D. 此程序循环接收字符串并将其连接在一起,直到接收字符串“the end”为止,输出连接在一起的字符串(分数:2.00)A.B.C.D.34.有下列程序:fun(int x, int y) return (x+y);main() int a =1,b=2,c=3,sum; sum=fun(a+,b+,a+b),c+);printf(“%d/n“, sum);执行后
10、的输出结果是U /U。 A. 6 B. 7 C. 8 D. 9(分数:2.00)A.B.C.D.35.数据库设计包括两个方面的设计内容,它们是_。 A. 概念设计和逻辑设计 B. 模式设计和内模式设计 C. 内模式设计和物理设计 D. 结构特性设计和行为特性设计(分数:2.00)A.B.C.D.二、B填空题/B(总题数:15,分数:28.00)36.若变量 n 的值为 24,则 print 函数共输出U U /U /U行,最后一行有U U /U /U个数。 void print(int n,int aa) int i; for(i=1;in;i+) printf(“%6d“,aai); if(
11、!(i%5) printf(“/n“); printf(“/n“); (分数:2.00)填空项 1:_37.以下程序用来判断指定文件是否能正常打开。请填空。 #includestdio.h main() FILE *fp; if(fp=fopen(“test.txt“, “r“)=_) printf(“未能打开文件!/n“); else printf(“文件打开成功!/n“); (分数:2.00)填空项 1:_38.设函数 findbig 已定义为求 3 个数中的最大值。以下程序将利用函数指针调用 findbig 函数。请填空。main() int findbig(int,int,int);
12、int(*f)(),x,y,z,big; f=U U /U /U;seanf(“%d%d%d“, if (c=a+b) printf(“yes/n“); else printf(“no/n“); (分数:2.00)填空项 1:_43.若有定义语句:int a=5;,则表达式 a+的值是 1。(分数:2.00)填空项 1:_44.若有定义语句 char s100,d100;int j=0,i=0;且 s 中已赋字符串,请填空以实现拷贝。 (注:不使用逗号表达式) while(si=U U /U /U;j+; dj=0;(分数:1.00)填空项 1:_45.以下程序的输出结果是U U /U /U。
13、 #includestdioh main() struct stru int a; float b; char d4; ; printf(“%d/n“,sizeof(struct stru);(分数:1.00)填空项 1:_46.若有定义 int a44=1,2,3,4,0,4,6,8,10,1,3,5,7,则初始化后,a11得到的初值是_。(分数:2.00)填空项 1:_47.软件生命周期分为软件定义期、软件开发期和软件维护期,详细设计属于 1 中的一个阶段。(分数:2.00)填空项 1:_48.深度为 5 的满二叉树中,叶子结点的个数为 1。(分数:2.00)填空项 1:_49.若有以下定
14、义和语句,则使指针 p 指向值为 36 的数组元素的表达式是U U /U /U。 int a10=19,23,44,17,37,28,49,36,*p; p=a;(分数:2.00)填空项 1:_50.语句“x+;+x;x=1+x;”执行后都使变量 x 中的值增 1,请写出一条同一功能的赋值语句 1。(分数:4.00)填空项 1:_二级 C 语言-31 答案解析(总分:79.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:51.00)1.请选出以下程序的输出结果_。#includestdio.hsub(int*s,inty) static int t=3,y=st;t-;mai
15、n() int a=1,2,3,4,i,x=0;for(i=0;i4;i+)sub(a,x);printf(“%d“,x);printf(“/n“); A. 1234 B. 4321 C. 0000 D. 4444 (分数:1.00)A.B.C. D.解析:解析 x 作为函数 sub()的实参时,函数对 x 值的改变没有返回主函数,并不能使得 x 的值变化,所以在打印时,x 的值是始终不变的,即为 0。2.下列程序执行后的输出结果是void func1(int i);void func2(int i);char st=“hello,friend!”;void func1(int i) prin
16、tf(“%c“,sti);if(i3)i+=2;func2(i);void func2(int i) printf(“%c“,sti);if(i3)i+=2;func1(i); int i=0;func1(i);printf(“/n“); A. hello B. hel C. hlo D. hlm(分数:1.00)A.B.C. D.解析:解析 考查函数的调用。 解题要点 函数调用的一般形式为: 函数名(实参列表) 首先调用函数 funcl(0),输出 st0=h。i 值变为 2,并调用函数 func2(2),输出 st2=l。i 值此时变为 4,又调用函数 funcl(4),输出 st4=0。
17、此时 i 值大于等于 3,执行完毕。因此,输出结果为 hlo。 考点链接 函数调用的一般格式以及函数的返回值。3.下列表达式中,可以正确表示 x0 或 x1 的关系是U /U。 A. (x=1)(x=0) B. x1x=0 C. x=1 OR x=0 D. x=1 strcat(m,n);printf(“%d%d/n“, sizeof(m), strlen(m); A. 2011 B. 99 C. 209 D. 1111(分数:1.00)A. B.C.D.解析:解析 strlen 返回的是不包括/0在内的数组实际长度。初始时,strlen(n)=3,函数调用strcpy(m+stlen(n),
18、k);,将字符串 k 复制到 m3到 m6中,执行后 m20=a,b,c,a,b,c,d,e。函数调用 strcat(m,n);执行后 m20=a,b,c,a,b,c,d,e,a,b,c,共 11 个字符。但 m 仍然占有 20 个字节。所以 sizeof(m)=20,strlen(m)=11。22.以下对枚举类型名的定义中正确的是_。 A. enum a=one, two,three; B. enum aone=9,two=1,three; C. enum a=“one“,“two“,“three“; D. enum a“one“, “two“,“three“; (分数:1.00)A.B.
19、C.D.解析:解析 声明枚举类型用 enum 开头。例如:enum weekday (sun,mon,tue,wed,thu,fri,sat); 说明:1、在 C 编译中,对枚举元素按常量处理,同时可以改变他们的值。2、枚举值可以用来做判断比较。3、一个整数不能直接赋给一个枚举变量。23.有以下程序 #includestdio.h void fun(int x) if(x/21)fun(x/2); printf(“%d“,x); main() fun(7);printf(“/n“);) 程序运行后的输出结果是U /U。 A. 1 3 7 B. 7 3 1 C. 7 3 D. 3 7(分数:2.
20、00)A.B.C.D. 解析:解析 这道试题主要考查了函数 fun(int x)的递归调用,当 x 除以 2 的值大于 1 时,就接着执行函数 fun(x/2),所以在主函数中,当执行 fun(7)时,函数 fun 执行两次,第一次输出 3,第二次 7。24.变量 a 所占的内存字节数是 _。 A. 4 B. 5 C. 6 D. 8 union U char st4; int i; long l; ; Struct A int c; union U u; a; (分数:1.00)A.B.C. D.解析:解析 结构体变量所占内存长度是各成员占内存长度之和,而共用体变量所占的内存长度等于最长的成员
21、的长度。本题结构体变量 a 中成员 c 为整型占 2 个字节,共用体变量 u 最大长度为 4 个字节,故选 C。25.设有定义:char p=1,2,3,*q=p;,以下不能计算出一个 char 型数据所占字节数的表达是_。 A. sizeof(p) B. sizeof(char) C. sizeof(*q) D. sizeof(p0)(分数:2.00)A. B.C.D.解析:26.设有以下定义:int a=0; double b=1.25; char c=A;#define d 2则下面语句中错误的是( )。 A. a+; B. b+; C. c+; D. d+;(分数:1.00)A.B.C
22、.D. 解析:解析 自加运算对象可以是整型变量也可以是实型变量,但不能是表达式和常量。本题中,#defined2 定义了 d 为常数 2,d 是符号常量不能进行自加运算。故选项 D 是个不正确的语句。27.线性表 L=(a1,a2,a3,ai,an),下列说法正确的是 A. 每个元素都有一个直接前件和直接后件 B. 线性表中至少要有一个元素 C. 表中诸元素的排列顺序必须是由小到大或由大到小 D. 除第一个元素和最后一个元素外,其余每个元素都有一个且只有一个直接前件和直接后件(分数:2.00)A.B.C.D. 解析:解析 线性表可以为空表;第一个元素没有直接前件,最后一个元素没有直接后件;线性
23、表的定义中,元素的排列并没有规定大小顺序。28.若要求从键盘读入含有空格字符的字符串,应使用函数_。 A. getc() B. gets() C. getchar() D. scanf()(分数:2.00)A.B. C.D.解析:解析 函数 getc()是从数据流中读入一个字符。getchar()从键盘读入一个字符。scanf()是格式化输入函数,空格字符被用于多个数据输入的分隔符,含有空格的字符串会被截断。gets()用于字符串的输入,并且以回车键为结束符。29.有以下程序:#includestdio.h#includestdio.hmain() char c6;int i=0;for(;j
24、6;ci=getchar(),i+);for(i=0;i6;i+)putchar(ci);printf(“/n“);如果从键盘上输入:ab回车c回车def回车则输出结果为 _。 A. a b c d e f B. a b c d C. ab c d D. abcdef(分数:2.00)A.B.C. D.解析:解析 1getchar():此函数的作用是从终端(或系统隐含指定的输入设备)输入一个字符。 2putchar():此函数的作用是向终端输出一个字符,也可以输出控制字符。本题在输入字符时,ab 和c 后面的回车符分别赋给了 c2和 c4,所以,正确答案为 C。30.以下说法错误的是 A. 一
25、个算法应包含有限个步骤 B. 在计算机上实现的算法是用来处理数据对象的 C. 算法中指定的操作,不能通过已经实现的基本运算执行有限次后实现 D. 算法的目的是求解(分数:1.00)A.B.C. D.解析:解析 算法是指为解决某个特定的问题而采取的确定且有限的步骤,一个算法应当具有以下几个特性:有穷性、确定性、可行性、有零个或多个输入和有一个或多个输出。C)答案是对算法可行性的解释,即算法中指定的操作,可以通过已经实现的基本运算执行有限次后实现。31.下面结构体的定义语句中,错误的是U /U。 A.struct ordint x;int y;int z;struct ord a; B.struc
26、t ordint x;int y;int z;struct ord a; C.struct ordint x;int y;int z;a; D.structint x;int y;int z;a;(分数:1.00)A.B. C.D.解析:解析 结构体定义的类型说明的一般形式为:struct 结构体标识名(类型名 1 结构成员名表 1;类型名 2 结构成员名表 2;);注意:结构体说明同样要以分号结尾;紧跟在结构体类型说明之后进行定义;在说明一个无名结构体类型的同时,直接进行定义;先说明结构体类型,再单独进行变量定义等。所以选择 B 选项。32.设计软件结构是在软件生命周期的U /U。 A. 软
27、件定义期 B. 软件开发期 C. 软件维护期 D. 以上三个都不是(分数:2.00)A.B. C.D.解析:解析 设计软件结构是在软件概要设计阶段进行的,而概要设计属于软件开发期。33.对下述程序的判断中,正确的是U /U。#includestdio.hvoid main()char *P,s256;p=s;while(strcmp(s,“the end“)printf(“Input the string:“);gets(s);while(*P)putchar(*p+); A. 此程序循环接收字符串并输出,直到接收到字符串“the end”为止 B. 此程序循环接收字符串,接收到字符串“the
28、 end”则输出,否则程序终止 C. 此程序循环接收字符串并输出,直到接收字符串“the end”为止,但因为代码有错误,程序不能正常工作 D. 此程序循环接收字符串并将其连接在一起,直到接收字符串“the end”为止,输出连接在一起的字符串(分数:2.00)A. B.C.D.解析:解析 strcmp(str1,str2)是比较字符串 str1 和 sir2,当两字符串相等时,返回值为 0,不相等时返回值为非 0;所以此段程序的功能是在未接收到字符串“the end”时,读入字符并输出。34.有下列程序:fun(int x, int y) return (x+y);main() int a
29、=1,b=2,c=3,sum; sum=fun(a+,b+,a+b),c+);printf(“%d/n“, sum);执行后的输出结果是U /U。 A. 6 B. 7 C. 8 D. 9(分数:2.00)A.B.C. D.解析:解析 函数 fun(int x, int y)的功能是返回两个整型数据的和。在主函数中,变量 a, b, c 的初始值分别为 1,2,3。因此逗号表达式“a+,b+,a+b”的值等于 5,表达式 c+的值为 3,调用子函数的表达式为“fun(5,3);”,其返回值等 8。所以变量 sum 的值等于 8。35.数据库设计包括两个方面的设计内容,它们是_。 A. 概念设计和
30、逻辑设计 B. 模式设计和内模式设计 C. 内模式设计和物理设计 D. 结构特性设计和行为特性设计(分数:2.00)A. B.C.D.解析:解析 数据库设计可分为概念设计与逻辑设计。概念设计的目的是分析数据间内在语义关联,在此基础上建立个数据的抽象模型。逻辑设计的主要工作是将 ER 图转换为指定的 RDBMS 中的关系模型。二、B填空题/B(总题数:15,分数:28.00)36.若变量 n 的值为 24,则 print 函数共输出U U /U /U行,最后一行有U U /U /U个数。 void print(int n,int aa) int i; for(i=1;in;i+) printf(
31、“%6d“,aai); if(!(i%5) printf(“/n“); printf(“/n“); (分数:2.00)填空项 1:_ (正确答案:5 4)解析:解析 语句 if(!(i%5)printf(“/n“);实现每 5 个数输出一行,因为 n 的值为 24,所以共输出 5行,最后一行有 4 个数。37.以下程序用来判断指定文件是否能正常打开。请填空。 #includestdio.h main() FILE *fp; if(fp=fopen(“test.txt“, “r“)=_) printf(“未能打开文件!/n“); else printf(“文件打开成功!/n“); (分数:2.0
32、0)填空项 1:_ (正确答案:NULL)解析:解析 若 fopen 不能实现打开任务,函数将返回一个空指针 NULL。因此通过判断返回值是否为NULL 即可判断是否正常打开文件。38.设函数 findbig 已定义为求 3 个数中的最大值。以下程序将利用函数指针调用 findbig 函数。请填空。main() int findbig(int,int,int); int(*f)(),x,y,z,big; f=U U /U /U;seanf(“%d%d%d“, if (c=a+b) printf(“yes/n“); else printf(“no/n“); (分数:2.00)填空项 1:_ (正
33、确答案:yes)解析:解析 程序 if 语句中是赋值表达式,而不是相等“=”运算。因为 c=a+b 中 a+b 的值为 4,赋给c,c=4,表达式为真,输出 yes。43.若有定义语句:int a=5;,则表达式 a+的值是 1。(分数:2.00)填空项 1:_ (正确答案:5)解析:解析 表达式 a+的值是 5,而变量 a 的值为 6。这里要注意区分表达式的值和变量 a 的值。44.若有定义语句 char s100,d100;int j=0,i=0;且 s 中已赋字符串,请填空以实现拷贝。 (注:不使用逗号表达式) while(si=U U /U /U;j+; dj=0;(分数:1.00)填
34、空项 1:_ (正确答案:si+)解析:解析 本题中为了能实现字符串的拷贝,需要使字符数组 s 从头到尾依次遍历其所有元素。本题应使用 i 的自增后置来实现。45.以下程序的输出结果是U U /U /U。 #includestdioh main() struct stru int a; float b; char d4; ; printf(“%d/n“,sizeof(struct stru);(分数:1.00)填空项 1:_ (正确答案:14)解析:46.若有定义 int a44=1,2,3,4,0,4,6,8,10,1,3,5,7,则初始化后,a11得到的初值是_。(分数:2.00)填空项
35、1:_ (正确答案:0)解析:解析 二维数组可以看成是按矩阵形式排列的,题目中给二维数组赋初值是按行分段赋值的,a44可以分解为 4 个一维数组,其数组名分别为 a0、a1、a2、a3,这 4 个一维数组都有 4 个元素,a0的元素为 a00、 a01、a02、 a03o47.软件生命周期分为软件定义期、软件开发期和软件维护期,详细设计属于 1 中的一个阶段。(分数:2.00)填空项 1:_ (正确答案:软件开发)解析:解析 软件生命周期分为 3 个时期共 8 个阶段:软件定义期(问题定义、可行性研究和需求分析)、软件开发期(系统设计、详细设计、编码和测试)、软件维护期(即运行维护阶段)。48
36、.深度为 5 的满二叉树中,叶子结点的个数为 1。(分数:2.00)填空项 1:_ (正确答案:16)解析:解析 满二叉树的叶子结点都在最后一层,即第 4 层,且第 4 层的结点达到最大数,即 25-1(上标)=16。49.若有以下定义和语句,则使指针 p 指向值为 36 的数组元素的表达式是U U /U /U。 int a10=19,23,44,17,37,28,49,36,*p; p=a;(分数:2.00)填空项 1:_ (正确答案:p=p+7 或 p+=7)解析:解析 本题考查通过指针引用数组元素。值为 36 的数组元素在 a 数组中是第 8 个元素,即 a7。在程序中,p=a;语句将数组 a 的首地址赋给了指针变量 p,则可以用*(p+i)来表示数组元素,*(p+i)与ai等价,a7可表示为*(p+7)。要使指针 p 指向 a7,可以用 p= p+7 移动指针,故填写 p=p+7 或p+=7。50.语句“x+;+x;x=1+x;”执行后都使变量 x 中的值增 1,请写出一条同一功能的赋值语句 1。(分数:4.00)填空项 1:_ (正确答案:x+=1)解析:解析 x+=1 相当于 x=x+1,也就是本身加 1,+前缀形式是在使用变量之前先将其值增 1 或减 1,后缀形式是先使用变量原来的值,使用完成后再使值增 1 或减 1。