1、二级 C语言分类模拟题 525及答案解析(总分:57.50,做题时间:90 分钟)一、选择题(总题数:35,分数:57.50)1.有以下定义和语句: struct workers int num; char name20;char c; struct int day; int month; int year; s; ; struct workers w,*pw; pw= 能给 w中 year成员赋 1980的语句是_。(分数:2.00)A.pw-year=1980;B.year=1980;C.s.year=1980;D.*pw.year=1980;2.以下说法中正确的是_。(分数:2.50)A
2、.C语言程序的执行都是从程序的第一个函数开始B.在 C语言程序中,要调用的函数必须在 main函数中声明C.任何 C语言程序的执行都是从 main函数开始D.C语言程序中的 main函数必须放在程序的最前面3.下列条件语句中,输出结果与其他语句不同的是_。(分数:2.00)A.if(a)printf(“%d/n“, x); else printf(“%d/n“, y);B.if(a=0)printf(“%d/n“, y); else printf(“%d/n“, x);C.if(a!=0)printf(“%d/n“, x); else printf(“%d/n“, y);D.if(a=0)pr
3、intf(“%d/n“, x); else printf(“%d/n“, y);4.在数据流图中,带有箭头的线段表示的是_。(分数:2.50)A.控制流B.数据流C.模块调用D.事件驱动5.以下所列对结构类型变量 tdl的声明中错误的是_。(分数:3.00)A.typedef struct aaint n;float m;AA;B.#define AA struct aaAAint n;float m;)tdl;AAtdl;C.structint n; float m;)aa;D.structint n;float m;tdl;struct aa tdl;6.下列对于线性链表的描述中正确的是
4、_。(分数:2.00)A.存储空间不一定是连续,且各元素的存储顺序是任意的B.存储空间不一定是连续,且前件元素一定存储在后件元素的前面C.存储空间必须连续,且各前件元素一定存储在后件元素的前面D.存储空间必须连续,且各元素的存储顺序是任意的7.以下选项中关于 C语言常量的叙述错误的是_。(分数:1.00)A.常量可分为数值型常量和非数值型常量B.常量分为整型常量、实型常量、字符常量和字符串常量C.经常被使用的变量可以定义成常量D.所谓常量,是指在程序运行过程中,其值不能被改变的量8.现在有以下定义,int a;double b;float c;char k;则下面的表达式 a/b+c-k值的类
5、型为:(分数:1.00)A.intB.doubleC.floatD.char9.以下错误的定义语句是_。(分数:2.00)A.int x4=1,2,3,1,2,3,1,2,3,1,2,3;B.int x43=1,2,3,1,2,3,1,2,3,1,2,3;C.int x3=0,1,1,2,3;D.int x3=1,2,3,4;10.某系统总体结构图如下图所示: (分数:1.00)A.7B.6C.3D.211.以下选项中关于程序模块化的叙述错误的是_。(分数:2.00)A.可采用自底向上、逐步细化的设计方法把若干独立模块组装成所要求的程序B.把程序分成若干相对独立、功能单一的模块,可便于重复使用
6、这些模块C.把程序分成若干相对独立的模块,可便于编码和调试D.可采用自顶向下、逐步细化的设计方法把若干独立模块组装成所要求的程序12.C语言中,下列不合法的字符常量是_。(分数:2.50)A.“/xff“B.“/65“C.“B.link next;C.link*next;D.struct link next;15.有以下程序 main() char*s=“BBC“,“CNN“,“NDS“,*p; p=s1; printf(“%c,%s/n“,*(p+1),p); 执行后输出结果是_。(分数:1.00)A.C,BBCB.N,BBCC.C,CNND.N,CNN16.有以下程序: #includes
7、tdio.h #define SUB(a)(a)-(a)main() int a=2,b=3,c=5,d; d=SUB(a+b)*c; printf(“%d/n“,d); 程序的运行结果是_。(分数:2.00)A.0B.-12C.-20D.1017.软件按功能可以分为应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的是_。(分数:1.00)A.学生成绩管理系统B.C语言编译程序C.UNIX操作系统D.数据库管理系统18.以下程序的输出结果是_。 point(char*pt); main() char b4=“a“,“c“,“s“,“f“),*pt=b; pt=point(pt);
8、printf(“%c/n“,*pt); point(char*p) p+=3; return p; (分数:2.00)AsBcCfDa19.若有定义: float x=1.5; int a=1, b=3, c=2; 则正确的 switch语句是_。(分数:1.00)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.0:printf(“*/n“);case 2.0:printf(“*
9、/n“);D.switch(a+b)case 1:printf(“*/n“);case c:printf(“*/n“);20.有三个关系 R、S 和 T如下: (分数:1.00)A.自然连接B交C除D并21.设有定义: int x=2; 以下表达式中,值不为 6的是_。(分数:2.50)A.2*x, x+=2B.x+, 2*xC.x*=(1+x)D.x*=x+122.有以下程序: #includestdio.h main() int a5=1, 2, 3, 4, 5, b5=0, 2, 1, 3, 0, i, s=0; for(i=0; i5; i+) s=s+abi; printf(“%d/
10、n“, s); 程序运行后的输出结果是_。(分数:1.00)A.6B.10C.11D.1523.以下选项中,合法的是_。(分数:1.00)A.char str3=“d“,“e“,“b“,“u“,“g“,“/0“;B.char str4; str4=“hello world“;C.char name10; name=“china“;D.char strl5=“pass“,str26; str2=strl;24.有以下程序: #include stdio.h int a =4; int f(int n) int t = 0; static int a=5; if (n%2) int a=6; t
11、+ = a+ +; else int a=7; t + = a+ +; return t + a+ +; main( ) int s=a, i=0; for (; i2;i+ +) s + = f(i); printf(“%d/n“, s) ; 程序运行后的输出结果是_。(分数:2.50)A.36B.24C.32D.2825.若有定义“float a15,*p=a;“,且数组 a的首地址为 300H,则 p+13所指向的数组元素的地址为_。(分数:2.00)A.334HB.30DHC.352HD.31AH26.若定义函数 int *func(),则函数 func的返回值为_。(分数:2.00)
12、A.一个实数B.一个指向整型变量的指针C.一个指向整型函数的指针D.一个整型函数的人口地址27.下列关于栈叙述正确的是_。(分数:1.00)A.栈顶元素最先能被删除B.栈顶元素最后才能被删除C.栈底元素永远不能被删除D.栈底元素最先能被删除28.关于程序中的注释,以下叙述正确的是_。(分数:1.00)A.注释的内容必须放在一对/*和*/之间B.注释必须置于所说明的语句前或语句后C.注释中间可以嵌套另一个注释D.注释内容错误会导致编译出错29.以下程序的输出结果是_。 #include stdio.h main() printf(“% f“, 2.5+1*7% 2/4); (分数:1.00)A.
13、2.500000B.2.750000C.3.375000D.3.00000030.有如下程序: #include stdio.h main( ) int i, data; scanf(“%d“, for(i=0; i10; i+) if(idata) break; printf(“%d,“,i); 程序运行时,从键盘输入:3回车后,程序输出结果为_。(分数:1.00)A.3,4,5,B.1,2,3,C.2,3,4,D.0,1,2,3,31.设计软件结构是在软件生命周期的 _ 。(分数:2.00)A.软件定义期B.软件开发期C.软件维护期D.以上 3个都不是32.下列定义数组的语句中,正确的是_
14、。(分数:2.00)A.int N=10;int xN;B.#define N 10int xN;C.int x010;D.int x;33.若变量已正确定义,则以下语句的输出结果是_。 s=32; s=32; printf(“%d“,s);(分数:2.00)A.-1B.0C.1D.3234.若有如下程序: #include“stdioh“ void main() FILE *fp; fpfopen(“test“,“wb“) fprintf(fp,“%d%.1f,%c%c“,5,238.41,“B“,“h“); fclose(fp); 则程序运行后向文件输出的结果是 ( )(分数:1.00)A
15、.5 238.41 B hB.5238.4,BhC.5,238.4,B,hD.5238.41Bh35.有一堆零件(个数在 100到 200之间),如果分成 4个零件一组,则多 2个零件;若分成 7个零件一组,则多 3个零件;若分成 9个零件一组,则多 5个零件。下面的程序是求这堆零件的总数,请选择填空。 #includestdioh main() int i; for(i=100; i200;i+) if(i-2)%4=0) if(! (i-3)%7) if(_) printf(“%d“,i); (分数:1.00)A.i%9=5B.i%9!=5C.(i-5)%9!=0D.(i-5)%9= =0
16、二级 C语言分类模拟题 525答案解析(总分:57.50,做题时间:90 分钟)一、选择题(总题数:35,分数:57.50)1.有以下定义和语句: struct workers int num; char name20;char c; struct int day; int month; int year; s; ; struct workers w,*pw; pw= 能给 w中 year成员赋 1980的语句是_。(分数:2.00)A.pw-year=1980;B.year=1980;C.s.year=1980; D.*pw.year=1980;解析:解析 本题考查结构体变量的引用。题目中定
17、义了一个结构体,其中结构体中的变量又是一个结构体,w 为外层结构体,如果给内层结构体赋值,先要得到内层结构体变量,即 w.s,若要给 year赋值,表示为 w.s.year即可,选项 C正确。2.以下说法中正确的是_。(分数:2.50)A.C语言程序的执行都是从程序的第一个函数开始B.在 C语言程序中,要调用的函数必须在 main函数中声明C.任何 C语言程序的执行都是从 main函数开始 D.C语言程序中的 main函数必须放在程序的最前面解析:3.下列条件语句中,输出结果与其他语句不同的是_。(分数:2.00)A.if(a)printf(“%d/n“, x); else printf(“%
18、d/n“, y);B.if(a=0)printf(“%d/n“, y); else printf(“%d/n“, x);C.if(a!=0)printf(“%d/n“, x); else printf(“%d/n“, y);D.if(a=0)printf(“%d/n“, x); else printf(“%d/n“, y); 解析:解析 若 a为 0,D 选项输出 x,其他输出 y,所以选择 D。4.在数据流图中,带有箭头的线段表示的是_。(分数:2.50)A.控制流B.数据流 C.模块调用D.事件驱动解析:解析 数据流图中带箭头的线段表示数据流,沿箭头方向传递数据的通道,一般在旁边标注数据流
19、名。5.以下所列对结构类型变量 tdl的声明中错误的是_。(分数:3.00)A.typedef struct aaint n;float m;AA;B.#define AA struct aaAAint n;float m;)tdl;AAtdl;C.structint n; float m;)aa; D.structint n;float m;tdl;struct aa tdl;解析:6.下列对于线性链表的描述中正确的是 _。(分数:2.00)A.存储空间不一定是连续,且各元素的存储顺序是任意的 B.存储空间不一定是连续,且前件元素一定存储在后件元素的前面C.存储空间必须连续,且各前件元素一定
20、存储在后件元素的前面D.存储空间必须连续,且各元素的存储顺序是任意的解析:解析 线性链表属于链式存储结构,在链式存储结构中,存储空间可以不连续,各元素的存储顺序是任意的,元素之间的逻辑关系是由指针域来决定的。7.以下选项中关于 C语言常量的叙述错误的是_。(分数:1.00)A.常量可分为数值型常量和非数值型常量B.常量分为整型常量、实型常量、字符常量和字符串常量C.经常被使用的变量可以定义成常量 D.所谓常量,是指在程序运行过程中,其值不能被改变的量解析:解析 常量是在程序运行时,其值不能被改变的量,跟是否经常使用没关系,所以 C错误。8.现在有以下定义,int a;double b;floa
21、t c;char k;则下面的表达式 a/b+c-k值的类型为:(分数:1.00)A.intB.double C.floatD.char解析:解析 双目运算中两边运算量类型转换规律: 运算数 1 运算数 2 转换结果类型 短整型 长整型 短整型-长整型 整型 长整型 整型-长整型 字符型 整型 字符型-整型 有符号整型无符号整型有符号整型-无符号整型 整型 浮点型 整型-浮点型 在 a/b的时候,a,b 的类型不一致,根据类型转换规则,把整型转换成 double类型,之后的加,减类似。转化规则为 char,shortintunsignedlongdoublefloat9.以下错误的定义语句是_
22、。(分数:2.00)A.int x4=1,2,3,1,2,3,1,2,3,1,2,3; B.int x43=1,2,3,1,2,3,1,2,3,1,2,3;C.int x3=0,1,1,2,3;D.int x3=1,2,3,4;解析:解析 二维数组定义行数可以省略,列数不能省略,所以答案选择 A。10.某系统总体结构图如下图所示: (分数:1.00)A.7B.6C.3 D.2解析:解析 由题可知是要计算结构图的深度,其值为 3。11.以下选项中关于程序模块化的叙述错误的是_。(分数:2.00)A.可采用自底向上、逐步细化的设计方法把若干独立模块组装成所要求的程序 B.把程序分成若干相对独立、功
23、能单一的模块,可便于重复使用这些模块C.把程序分成若干相对独立的模块,可便于编码和调试D.可采用自顶向下、逐步细化的设计方法把若干独立模块组装成所要求的程序解析:解析 程序模块化思想中,可以采用自顶向下、逐步细化的方法,所以 A选项中“自底向上”的说法是错误的。12.C语言中,下列不合法的字符常量是_。(分数:2.50)A.“/xff“B.“/65“C.“ B.link next;C.link*next;D.struct link next;解析:解析 本题考查链表的定义形式,答案选择 A。15.有以下程序 main() char*s=“BBC“,“CNN“,“NDS“,*p; p=s1; p
24、rintf(“%c,%s/n“,*(p+1),p); 执行后输出结果是_。(分数:1.00)A.C,BBCB.N,BBCC.C,CNND.N,CNN 解析:16.有以下程序: #includestdio.h #define SUB(a)(a)-(a)main() int a=2,b=3,c=5,d; d=SUB(a+b)*c; printf(“%d/n“,d); 程序的运行结果是_。(分数:2.00)A.0B.-12C.-20 D.10解析:解析 本题考查宏定义。宏定义只是做简单的替换,本题中 SUB(a+b)*c=(a+b)-(a+b)*c=-20,所以 C选项正确。17.软件按功能可以分为
25、应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的是_。(分数:1.00)A.学生成绩管理系统 B.C语言编译程序C.UNIX操作系统D.数据库管理系统解析:解析 软件按功能可以分为:应用软件、系统软件、支撑软件。操作系统、编译程序、汇编程序、网络软件、数据库管理系统都属于系统软件。所以 B、C、D 选项都是系统软件,只有 A选项是应用软件。18.以下程序的输出结果是_。 point(char*pt); main() char b4=“a“,“c“,“s“,“f“),*pt=b; pt=point(pt); printf(“%c/n“,*pt); point(char*p) p+=
26、3; return p; (分数:2.00)AsBcCf Da解析:19.若有定义: float x=1.5; int a=1, b=3, c=2; 则正确的 switch语句是_。(分数:1.00)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.0:printf(“*/n“);case 2.0:printf(“*/n“);D.switch(a+b)case 1:printf(
27、“*/n“);case c:printf(“*/n“);解析:解析 switch 语句的一般形式为: switch(表达式) case常量表达式 1:语句 1; case常量表达式 2:语句 2; default:语句 n; 其中 switch后的表达式只能是整型或字符型,故 C选项错误;case 后面必须是常量表达式,故 D选项错误;switch()右括号后面不能有分号,故选项 B错误,因此答案选 A选项。20.有三个关系 R、S 和 T如下: (分数:1.00)A.自然连接B交C除 D并解析:解析 由图可知,其中 C中只有一个属性,是除操作。21.设有定义: int x=2; 以下表达式中
28、,值不为 6的是_。(分数:2.50)A.2*x, x+=2 B.x+, 2*xC.x*=(1+x)D.x*=x+1解析:解析 选项 A中,2*x 对 x的值没有影响,x 仍为 2,“x+=2”执行后,表达式值为 4。故本题答案为 A。22.有以下程序: #includestdio.h main() int a5=1, 2, 3, 4, 5, b5=0, 2, 1, 3, 0, i, s=0; for(i=0; i5; i+) s=s+abi; printf(“%d/n“, s); 程序运行后的输出结果是_。(分数:1.00)A.6B.10C.11 D.15解析:解析 本题考查数组的使用。本题
29、定义了两个数组,注意数组的下标是从 0开始的,进行第 1次for循环:当 i=0时,b0为数组 b中第 1个元素,结果为 0,那么 a0也是数组 a中第 1个元素,结果为 1,所以 s的值为 1。第 2次循环:i 此时自加为 1,b1为数组的第 2个元素,值为 2,所以可求出a2(数组中的第 3个元素)的值为 3,s=s+3,所以 s的值为 4。进入第 3次 for循环,依此类推,第 3次 for循环结束时 s的值为 6。第 4次 for循环,s 的值变为 10。第 5次 for循环时,此时 i的值为4,s 的值变为 11,i=5 不符合题意,所以跳出循环,输出结果,所以本题答案为 C。23.
30、以下选项中,合法的是_。(分数:1.00)A.char str3=“d“,“e“,“b“,“u“,“g“,“/0“; B.char str4; str4=“hello world“;C.char name10; name=“china“;D.char strl5=“pass“,str26; str2=strl;解析:解析 选项 B不能把一个字符串赋值给一个字符变量,选项 C和 D犯了同样的错误是把字符串赋给了数组名。24.有以下程序: #include stdio.h int a =4; int f(int n) int t = 0; static int a=5; if (n%2) int
31、a=6; t + = a+ +; else int a=7; t + = a+ +; return t + a+ +; main( ) int s=a, i=0; for (; i2;i+ +) s + = f(i); printf(“%d/n“, s) ; 程序运行后的输出结果是_。(分数:2.50)A.36B.24C.32D.28 解析:解析 在主函数 main( )中定义了两个变量 s和 i,同时给 s赋初值。a=4,i 赋初值 0。当 i=0时。执行“s+=f(i);”语句,调用 f()并将 i的初值 0传递给形参 n。首先执行 if语句中的条件:n%2,若条件为假,则执行 else下
32、的语句,a=7,t=7+0=7,使用 return返回 t,t=7+(a+)=7+5=12,此时 a运算完后自增 1,变为 6;返回主函数中,s=4+12=16。当 i=1时,执行“s+=f(i);”语句,调用 f()并将 i的初值传递给形参 n。首先执行 if语句中的条件:n%2,条件为真,执行 if下面的语句,t=0,a=6 t=0+6=6,使用 return返回 t,t=6+6=12,返回主函数中,s=16+12=28。最后输出的结果为 28。因此 D选项正确。25.若有定义“float a15,*p=a;“,且数组 a的首地址为 300H,则 p+13所指向的数组元素的地址为_。(分数
33、:2.00)A.334HB.30DHC.352H D.31AH解析:26.若定义函数 int *func(),则函数 func的返回值为_。(分数:2.00)A.一个实数B.一个指向整型变量的指针 C.一个指向整型函数的指针D.一个整型函数的人口地址解析:27.下列关于栈叙述正确的是_。(分数:1.00)A.栈顶元素最先能被删除 B.栈顶元素最后才能被删除C.栈底元素永远不能被删除D.栈底元素最先能被删除解析:解析 栈是先进后出的数据结构,因此栈顶元素最后入栈却最先被删除,栈底元素最先入栈却最后被删除,所以本题答案为 A。28.关于程序中的注释,以下叙述正确的是_。(分数:1.00)A.注释的
34、内容必须放在一对/*和*/之间 B.注释必须置于所说明的语句前或语句后C.注释中间可以嵌套另一个注释D.注释内容错误会导致编译出错解析:解析 程序中,注释可以出现在程序的任何位置,B 选项错误;注释中间不能嵌套另一个注释,C选项错误;注释内容不影响程序编译,D 选项错误,故答案为 A选项。29.以下程序的输出结果是_。 #include stdio.h main() printf(“% f“, 2.5+1*7% 2/4); (分数:1.00)A.2.500000 B.2.750000C.3.375000D.3.000000解析:30.有如下程序: #include stdio.h main(
35、) int i, data; scanf(“%d“, for(i=0; i10; i+) if(idata) break; printf(“%d,“,i); 程序运行时,从键盘输入:3回车后,程序输出结果为_。(分数:1.00)A.3,4,5,B.1,2,3,C.2,3,4,D.0,1,2,3, 解析:解析 从键盘上输入“3”,此时 data=3。进入 for语句,执行 if语句,判断 idata 是否成立,如果条件成立,运行 break语句结束整个循环过程。当 i等于 0、1、2、3 时,if 条件不满足,执行循环体中的 printf(“%d“,i)语句,因此答案为 D选项。31.设计软件结
36、构是在软件生命周期的 _ 。(分数:2.00)A.软件定义期B.软件开发期 C.软件维护期D.以上 3个都不是解析:解析 设计软件结构是在软件概要设计阶段进行的,而概要设计属于软件开发期。32.下列定义数组的语句中,正确的是_。(分数:2.00)A.int N=10;int xN;B.#define N 10int xN; C.int x010;D.int x;解析:解析 A 中的 N是一个变量,不可以用变量来定义数组,所以选项 A错误。C 中把所有的下标均列出,不正确,此处只需指明数组长度即可。D 中在定义时没有指明数组长度,不正确,如果不指明长度就应在定义时对数组元素进行赋值,而此选项没有
37、,所以错误。故本题答案为 B。33.若变量已正确定义,则以下语句的输出结果是_。 s=32; s=32; printf(“%d“,s);(分数:2.00)A.-1B.0 C.1D.32解析:解析 本题考查逻辑异或运算。异或运算只有在两个比较的位不同时其结果是 1,否则结果为 0,题目中两个值相同,所以结果为 0。34.若有如下程序: #include“stdioh“ void main() FILE *fp; fpfopen(“test“,“wb“) fprintf(fp,“%d%.1f,%c%c“,5,238.41,“B“,“h“); fclose(fp); 则程序运行后向文件输出的结果是
38、( )(分数:1.00)A.5 238.41 B hB.5238.4,Bh C.5,238.4,B,hD.5238.41Bh解析:35.有一堆零件(个数在 100到 200之间),如果分成 4个零件一组,则多 2个零件;若分成 7个零件一组,则多 3个零件;若分成 9个零件一组,则多 5个零件。下面的程序是求这堆零件的总数,请选择填空。 #includestdioh main() int i; for(i=100; i200;i+) if(i-2)%4=0) if(! (i-3)%7) if(_) printf(“%d“,i); (分数:1.00)A.i%9=5B.i%9!=5C.(i-5)%9!=0D.(i-5)%9= =0 解析:解析 本题中需要填空的是第三个条件,即“若分成 9个零件一组,则多 5个零件”,当总零件数减去 5后,并与 9取余为 0即可满足本题的条件。