1、二级 C 语言分类模拟题 521 及答案解析(总分:57.00,做题时间:90 分钟)一、选择题(总题数:35,分数:57.00)1.以下函数返回 a 所指数组中最大值所在的下标值,在下画线处应填入的内容是 fun(int *a,int n) int i,j=0,p; p=j; for(i=j;in;i+) if(aiap)_; return(p); (分数:2.00)A.i=pB.ap=aiC.p=jD.p=i2.有以下程序: #includestdio.h void fun(char*p,int n) char b6=“abcde“; int i; for(i=0,p=b;in;i+)pi
2、=bi; main() char a6=“ABCDE“; fun(a,5); printf(“%s/n“,a); 程序运行后的输出结果是_。(分数:1.00)A.abcdeB.ABCDEC.edcbaD.EDCBA3.设有下列程序段: char str=“HelloWorld“; char*ptr; ptr=str; 执行上面的程序段后,*(ptr+10)的值为_。(分数:2.50)A.“/0“B.“0“C.不确定的值D.“0“的地址4.若有以下程序 #includestdio.h typedef struct stu char name10,gender; int score; STU; v
3、oid f(STU a,STU b) b=a; printf(“%s,%c,%d,“,b.name,b.gender,b.score); main() STU a=“Zhao“,“m“,290,b=“Qian“,“f“,350; f(a,b); printf(“%s,%c,%d/n“,b.name,b.gender,b.score; 则程序的输出结果是_。(分数:2.00)A.Zhao,m,290,Qian,f,350B.Zhao,m,290,Zhao,m,290C.Qian,f,350,Qian,f,350D.Zhao,m,290,Zhao,f,3505.下列叙述中错误的是_。(分数:1.0
4、0)A.在数据库系统中,数据的物理结构必须与逻辑结构一致B.数据库技术的根本目标是要解决数据的共享问题C.数据库设计是指在已有数据库管理系统的基础上建立数据库D.数据库系统需要操作系统的支持6.有以下程序: #includestdio.h main() int a=1,b=0; printf(“%d,“,b=a+b); printf(“%d/n“,a=2*b); 程序运行后的输出结果是_。(分数:1.00)A.1,2B.1,0C.3,2D.0,07.若有以下程序: #include stdio.h void f(int n); main() void f(int n); f(5); void
5、f(int n) printf(“% d/n“, n); 则以下叙述中,不正确的是_。(分数:1.00)A.若在主函数中对函数 f()进行说明,则只能在主函数中正确调用函数 f()B.若在主函数前对函数 f()进行说明,则在主函数和其他函数中都可以正确调用 f()C.对于以上程序,编译时系统会报错,提示对 f()函数重复说明D.函数 f()无返回值,所以可用 void 将其类型定义为无值型8.若 a 为 int 型变量,则执行以下语句后,a 的值为_。 a=5;a+=a-=a*a;(分数:2.00)A.25B.-40C.40D.-149.有以下程序 #include stdio.h main(
6、) int i; for(i=1;i=40;i+) if(i+%5=0) if(+i%8=0) printf(“%d“,i); printf(“/n“); 执行后的输出结果是_。(分数:1.00)A.32B.24C.5D.4010.下列说法不正确的是 _ 。(分数:2.00)A.C 程序是以函数为基本单位的,整个程序由函数组成B.C 语言程序的一条语句可以写在不同的行上C.C 程序的注释行对程序的运行功能不起任何作用,所以注释应该尽可能少写D.C 程序的每个语句都以分号结束11.已知 int 类型的变量占 4 个字节,现有以下程序段: #include stdio.h main() int a
7、=1,2,3,4,5; printf(“% d“, sizeof(a); 则程序段的输出结果是_。(分数:2.50)A.5B.10C.15D.2012.面向对象方法中,继承是指_。(分数:1.00)A.一组对象所具有的相似性质B.一个对象具有另一个对象的性质C.各对象之间的共同性质D.类之间共享属性和操作的机制13.以下叙述中正确的是_。(分数:2.50)A.对于逻辑表达式:a+ +|b+ +,设 a 的值为 1,则求解表达式的值后,b 的值会发生改变B.对于逻辑表达式:a+ + ,按在内存中的存放顺序,a 数组的第 10 个元素是_。(分数:2.50)A.a04B.a13C.a03D.a14
8、15.以下不合法的字符常量是_。(分数:1.00)A.“/018“B.“/“C.“/“D.“/xcc“16.以下叙述中正确的是_。(分数:2.00)A.在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第 1 个数据B.打开一个已存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖C.当对文件的读(写)操作完成之后,必须将它关闭,否则可能导致数据丢失D.C 语言中的文件是流式文件,因此只能顺序存取数据17.在软件开发中,需求分析阶段产生的主要文档是_。(分数:1.00)A.软件集成测试计划B.软件详细设计说明书C.用户手册D.软件需求规格说明书18.表达式“0x11
9、”的值是_。(分数:2.50)A.0xFFEEB.0x71C.0x0071D.0xFFE119.设有如下关系表: R A B C 1 1 2 2 2 3 S A B C 3 1 3 T A B C 1 1 2 2 2 3 3 1 3 则下列操作中正确的是_。(分数:2.50)A.T=RSB.T=RSC.T=RSD.T=R/S20.下列关于栈叙述正确的是_。(分数:1.00)A.栈顶元素最先能被删除B.栈顶元素最后才能被删除C.栈底元素永远不能被删除D.栈底元素最先被删除21.下面函数调用语句含有实参的个数为_。 func(exp1,exp2),(exp3,exp4,exp5);(分数:2.50
10、)A.1B.2C.3D.522.若有定义:int a,b,c;,想通过语句:scanf(“%d,%d%d“, char name20; x5=1,“ZHAO“,2,“QIAN“,3,“SUN“,4,“LEE“,5,“ZHOU“; for(i=1;i5;i+) printf(“%d%c“,xi.hum,xj.name2); 其输出结果为_。(分数:2.00)A.2A3N4E50B.1H213U4EC.1A2N3E40D.1A2N3E5024.有以下程序: #includestdio.h #define f(x)x*x*x main() int a =3,s,t; s=f(a+1); t=f(a+
11、1); printf(“%d,%d/n“,s,t); 程序运行后的输出结果是_。(分数:1.00)A.10,64B.10,10C.64,10D.64,6425.有以下程序: #includestdio.h main() char a510=“one“, “two“, “three“, “four“, “five“; int i, j; char t; for(i=0; i4; i+) for(j=i+1; j5; j+) if(ai0aj0) t=ai0; ai0=aj0; aj0=t; puts(a1); 程序运行后的输出结果是_。(分数:1.00)A.fwoB.fixC.twoD.owo2
12、6.下面不属于需求分析阶段任务的是_。(分数:1.00)A.确定软件系统的功能需求B.确定软件系统的性能需求C.需求规格说明书评审D.制定软件集成测试计划27.设 p 是指针变量,语句 p=NULL;等价于_。(分数:1.00)A.P=“0“;B.p=“;C.p=“;D.p=0;28.以下叙述错误的是_。(分数:2.00)A.C 语言区分大小写B.C 程序中的一个变量,代表内存中一个相应的存储单元,变量的值可以根据需要随时修改C.整数和实数都能用 C 语言准确无误地表示出来D.在 C 程序中,正整数可以用十进制、八进制和十六进制的形式来表示29.下列叙述中正确的是_。(分数:2.00)A.在栈
13、中,栈中元素随栈底指针与栈顶指针的变化而动态变化B.在栈中,栈顶指针不变,栈中元素随栈底指针的变化而动态变化C.在栈中,栈底指针不变,栈中元素随栈顶指针的变化而动态变化D.在栈中,栈中元素不会随栈底指针与栈顶指针的变化而动态变化30.下述程序的输出结果是_。 #includestdio.h void main() int a20,*p4; int i,k=0; for(i=0;i20;i+)ai=i; for(i=0;i4;i+)pi= for(i=0;i4;i+)k=k+*pi; printf(“%d“,k); (分数:2.00)A.10B.18C.6D.输出结果不定31.下列字符串是标识符
14、的是_。(分数:2.00)A.aaB.a-classC.intD.LINE 132.若有以下定义 int x10,*pt=x; 则对 x 数组元素的正确引用是_。(分数:1.00)A.pt+3B.* for(;y0; y-) if(y% 3=0) printf(“% d“, -y); continue; (分数:2.50)A.741B.852C.963D.875432135.若变量已正确定义,在语句“if(W) printf(“%d/n“,k);”中,以下不可替代 W 的是_。(分数:1.00)A.ab+cB.ch=getchar()C.a=b+cD.a+二级 C 语言分类模拟题 521 答案
15、解析(总分:57.00,做题时间:90 分钟)一、选择题(总题数:35,分数:57.00)1.以下函数返回 a 所指数组中最大值所在的下标值,在下画线处应填入的内容是 fun(int *a,int n) int i,j=0,p; p=j; for(i=j;in;i+) if(aiap)_; return(p); (分数:2.00)A.i=pB.ap=aiC.p=jD.p=i 解析:解析 该题目要求的是最大数的位置(下标)。程序通过对 a 所指数组中的元素进行逐个比较,记录最大数的下标 i,并把该下标记录在变量 p 中,所以,如果 aiap关系成立,则应该把 i 的值赋给p,这样才满足题目的要求
16、。2.有以下程序: #includestdio.h void fun(char*p,int n) char b6=“abcde“; int i; for(i=0,p=b;in;i+)pi=bi; main() char a6=“ABCDE“; fun(a,5); printf(“%s/n“,a); 程序运行后的输出结果是_。(分数:1.00)A.abcdeB.ABCDE C.edcbaD.EDCBA解析:解析 本题考查数组名作为函数参数。执行 f 函数时,传进去的 a 指针被重新指向了 b,所以原本 a 数组的地址内容不变,输出结果为“ABCDE”,答案为 B 选项。3.设有下列程序段: ch
17、ar str=“HelloWorld“; char*ptr; ptr=str; 执行上面的程序段后,*(ptr+10)的值为_。(分数:2.50)A.“/0“ B.“0“C.不确定的值D.“0“的地址解析:解析 本题主要考查字符数组和指针,在 C 语言中,字符型数组在存放字符串时会自动在末尾加上“/0“,所以数组 str 有 11 个元素;ptr 指向数组 str 的首地址,ptr+10 是指向 str10,*(ptr+10)是引用 str10的值。4.若有以下程序 #includestdio.h typedef struct stu char name10,gender; int score
18、; STU; void f(STU a,STU b) b=a; printf(“%s,%c,%d,“,b.name,b.gender,b.score); main() STU a=“Zhao“,“m“,290,b=“Qian“,“f“,350; f(a,b); printf(“%s,%c,%d/n“,b.name,b.gender,b.score; 则程序的输出结果是_。(分数:2.00)A.Zhao,m,290,Qian,f,350 B.Zhao,m,290,Zhao,m,290C.Qian,f,350,Qian,f,350D.Zhao,m,290,Zhao,f,350解析:解析 f 函数将
19、结构体 a 赋值给 b,然后输出,注意这是值传递,不会改变 main 中结构体 b 值,所以答案选择 A。5.下列叙述中错误的是_。(分数:1.00)A.在数据库系统中,数据的物理结构必须与逻辑结构一致 B.数据库技术的根本目标是要解决数据的共享问题C.数据库设计是指在已有数据库管理系统的基础上建立数据库D.数据库系统需要操作系统的支持解析:解析 数据库应用系统中的核心问题是设计一个能满足用户需求、性能良好的数据库,这就是数据库设计,因此本题答案为 A。6.有以下程序: #includestdio.h main() int a=1,b=0; printf(“%d,“,b=a+b); print
20、f(“%d/n“,a=2*b); 程序运行后的输出结果是_。(分数:1.00)A.1,2 B.1,0C.3,2D.0,0解析:解析 首先打印 b 的值,b=a+b=1+0=1,此时已给 b 赋值为 1。然后打印 a 的值,a=2*b=2*1=2。所以结果是 1,2。所以选择 A 选项。7.若有以下程序: #include stdio.h void f(int n); main() void f(int n); f(5); void f(int n) printf(“% d/n“, n); 则以下叙述中,不正确的是_。(分数:1.00)A.若在主函数中对函数 f()进行说明,则只能在主函数中正确
21、调用函数 f()B.若在主函数前对函数 f()进行说明,则在主函数和其他函数中都可以正确调用 f()C.对于以上程序,编译时系统会报错,提示对 f()函数重复说明 D.函数 f()无返回值,所以可用 void 将其类型定义为无值型解析:解析 C 语言规定,在一个函数中调用另一个函数(即被调用函数)需要具备的条件有:首先被调用的函数必须是已经存在的函数(是库函数或用户自己定义的函数);如果使用库函数,一般还应该在本文件开头用“#include“命令;如果使用自定义函数,而且该函数与调用它的函数在同一个文件中,一般还应该在主调函数中对被调用的函数作声明。8.若 a 为 int 型变量,则执行以下语
22、句后,a 的值为_。 a=5;a+=a-=a*a;(分数:2.00)A.25B.-40 C.40D.-14解析:9.有以下程序 #include stdio.h main() int i; for(i=1;i=40;i+) if(i+%5=0) if(+i%8=0) printf(“%d“,i); printf(“/n“); 执行后的输出结果是_。(分数:1.00)A.32 B.24C.5D.40解析:解析 本题考查了自增运算符。自增运算符“+”分为前缀和后缀两种形式。两种形式的作用效果是一样的,都是使运算分量的值加 1,但是它们的表达式的值不一样,前缀形式表达式的值为运算分量加 1 之后的值
23、,而后缀形式表达式的值为运算分量加 1 之前的值。题目中使用了一个 for 循环,循环变量i 从 1 递增到 40。在循环体中有两条嵌套的 if 语句,首先判断 i+%5=0,即判断 i+的值(i 加 1 之前的值)是否能被 5 整除(判断后 i 被加 1),然后再判断+i 的值(i 加 1 之后的值)是否能被 8 整除(判断后 i被加 1),若两个条件都满足了,就输出 i 的值,只有 i=30 时,满足 i+%5=0,此时 i=31,+i%8=0 成立,此时 i=32。10.下列说法不正确的是 _ 。(分数:2.00)A.C 程序是以函数为基本单位的,整个程序由函数组成B.C 语言程序的一条
24、语句可以写在不同的行上C.C 程序的注释行对程序的运行功能不起任何作用,所以注释应该尽可能少写 D.C 程序的每个语句都以分号结束解析:解析 本题涉及 C 语言基本的 3 个知识点:C 语言的源程序是由函数构成的,函数是其基本单位,每一个函数完成相对独立的功能,其中只能包括一个主函数;C 语言规定每个语句以分号结束,其书写格式是自由的,一条语句可以写在不同的行上,或者一行也可以写多条语句;注释行虽然对程序的运行不起作用,但是它可以方便程序员阅读,提高程序的可读性和可移植性,所以书写注释行还是很有必要的。11.已知 int 类型的变量占 4 个字节,现有以下程序段: #include stdio
25、.h main() int a=1,2,3,4,5; printf(“% d“, sizeof(a); 则程序段的输出结果是_。(分数:2.50)A.5B.10C.15D.20 解析:解析 int 类型的数组 a 初始化了 5 个整数,它隐含地定义了 a 数组大小为 5 个元素,而一个 int变量占 4 个字节,所以程序输出 20。12.面向对象方法中,继承是指_。(分数:1.00)A.一组对象所具有的相似性质B.一个对象具有另一个对象的性质C.各对象之间的共同性质D.类之间共享属性和操作的机制 解析:解析 继承是面向对象的方法的一个主要特征,是使用已有的类的定义作为基础建立新类的定义技术。广
26、义地说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们,所以说继承是指类之间共享属性和操作的机制。13.以下叙述中正确的是_。(分数:2.50)A.对于逻辑表达式:a+ +|b+ +,设 a 的值为 1,则求解表达式的值后,b 的值会发生改变B.对于逻辑表达式:a+ + ,按在内存中的存放顺序,a 数组的第 10 个元素是_。(分数:2.50)A.a04B.a13 C.a03D.a14解析:解析 在 C 语言中数组的下标是从 0 开始,且二维数组元素的存储是按行存放的。15.以下不合法的字符常量是_。(分数:1.00)A.“/018“ B.“/“C.“/“D.“/xcc“解析:解析
27、本题考查的知识点是字符常量中的转义字符。转义字符是以一个“/”开头的字符序列,它只代表一个字符。在选项 A 中,“/”后跟着三个数字,是表示一个 ASCII 码值等于这三位数字所组成的八进制数数值的字符,但是八进制数只能是由 07 这八个数字表示,而选项 A 中出现了数字 8,所以是不合法的。选项 B 是表示一个双引号的转义字符表示方法;选项 C 表示的是一个反斜杠;选项 D 表示一个ASCII 值为十六进制值 cc 的字符。故应该选择 A。16.以下叙述中正确的是_。(分数:2.00)A.在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第 1 个数据B.打开一个已存在
28、的文件并进行了写操作后,原有文件中的全部数据必定被覆盖C.当对文件的读(写)操作完成之后,必须将它关闭,否则可能导致数据丢失 D.C 语言中的文件是流式文件,因此只能顺序存取数据解析:17.在软件开发中,需求分析阶段产生的主要文档是_。(分数:1.00)A.软件集成测试计划B.软件详细设计说明书C.用户手册D.软件需求规格说明书 解析:解析 需求分析阶段的工作可以概括为:需求获取、需求分析、编写需求规格说明书、需求评审四个方面,因此本题答案为 D。18.表达式“0x11”的值是_。(分数:2.50)A.0xFFEE B.0x71C.0x0071D.0xFFE1解析:解析 本题主要考查按位求反运
29、算:十六进制整型常量的形式是以数字 0x 开头的十六进制字符串;位求反运算的规则是将二进制表示的运算对象按位取反,即将 1 变 0,将 0 变 1。19.设有如下关系表: R A B C 1 1 2 2 2 3 S A B C 3 1 3 T A B C 1 1 2 2 2 3 3 1 3 则下列操作中正确的是_。(分数:2.50)A.T=RSB.T=RS C.T=RSD.T=R/S解析:解析 关系代数中的集合运算分 4 种:并、差、交和笛卡尔。并();差(-),R 和 S 的差是由属于 R 但不属于 S 的元组构成的集合;交():由既属于 R 又属于 S 的元组构成的集合;笛卡尔积():对两
30、个关系 R 和 S 进行合并操作,产生的关系中元组个数为两个关系中元组个数之积。根据关系 T中的元组可知,T 关系是关系 R 和关系 S 进行合并操作所得到的。20.下列关于栈叙述正确的是_。(分数:1.00)A.栈顶元素最先能被删除 B.栈顶元素最后才能被删除C.栈底元素永远不能被删除D.栈底元素最先被删除解析:解析 栈是“先进后出”的数据结构,所以栈顶元素最后入栈却最先被删除。栈底元素最先入栈却最后被删除。所以选择 A 选项。21.下面函数调用语句含有实参的个数为_。 func(exp1,exp2),(exp3,exp4,exp5);(分数:2.50)A.1B.2 C.3D.5解析:解析
31、本题考查函数调用时的实参形式。这里有一个逗号运算的考查,(a,b)的运算结果为 b,因而只有一个值,结合 func 的调用形式,可以知道实参的个数只有 2 个。22.若有定义:int a,b,c;,想通过语句:scanf(“%d,%d%d“, char name20; x5=1,“ZHAO“,2,“QIAN“,3,“SUN“,4,“LEE“,5,“ZHOU“; for(i=1;i5;i+) printf(“%d%c“,xi.hum,xj.name2); 其输出结果为_。(分数:2.00)A.2A3N4E50 B.1H213U4EC.1A2N3E40D.1A2N3E50解析:24.有以下程序:
32、#includestdio.h #define f(x)x*x*x main() int a =3,s,t; s=f(a+1); t=f(a+1); printf(“%d,%d/n“,s,t); 程序运行后的输出结果是_。(分数:1.00)A.10,64 B.10,10C.64,10D.64,64解析:解析 本题考查宏定义的用法,宏定义只是做个简单的替换,所以本题中执行 f(a+1)=a+1*a+1*a+1=3*a+1=10,f(a+1)=(a+1)*(a+1)*(a+1)=64,所以答案为 A 选项。25.有以下程序: #includestdio.h main() char a510=“on
33、e“, “two“, “three“, “four“, “five“; int i, j; char t; for(i=0; i4; i+) for(j=i+1; j5; j+) if(ai0aj0) t=ai0; ai0=aj0; aj0=t; puts(a1); 程序运行后的输出结果是_。(分数:1.00)A.fwo B.fixC.twoD.owo解析:解析 for 循环完成的功能是把二维数组 a 的第一列字母按从小到大排序,其他列的字母不变。26.下面不属于需求分析阶段任务的是_。(分数:1.00)A.确定软件系统的功能需求B.确定软件系统的性能需求C.需求规格说明书评审D.制定软件集成
34、测试计划 解析:解析 需求分析阶段的工作有:需求获取;需求分析;编写需求规格说明书;需求评审。所以选择 D 选项。27.设 p 是指针变量,语句 p=NULL;等价于_。(分数:1.00)A.P=“0“;B.p=“;C.p=“;D.p=0; 解析:解析 p=NuLL;等价 p=0;,因此 D 选项正确。28.以下叙述错误的是_。(分数:2.00)A.C 语言区分大小写B.C 程序中的一个变量,代表内存中一个相应的存储单元,变量的值可以根据需要随时修改C.整数和实数都能用 C 语言准确无误地表示出来 D.在 C 程序中,正整数可以用十进制、八进制和十六进制的形式来表示解析:29.下列叙述中正确的
35、是_。(分数:2.00)A.在栈中,栈中元素随栈底指针与栈顶指针的变化而动态变化B.在栈中,栈顶指针不变,栈中元素随栈底指针的变化而动态变化C.在栈中,栈底指针不变,栈中元素随栈顶指针的变化而动态变化 D.在栈中,栈中元素不会随栈底指针与栈顶指针的变化而动态变化解析:解析 栈是先进后出的数据结构,在对栈操作的整个过程中,栈底指针不变,入栈与出栈操作均由栈顶指针的变化来完成,因此本题答案 C。30.下述程序的输出结果是_。 #includestdio.h void main() int a20,*p4; int i,k=0; for(i=0;i20;i+)ai=i; for(i=0;i4;i+)
36、pi= for(i=0;i4;i+)k=k+*pi; printf(“%d“,k); (分数:2.00)A.10B.18 C.6D.输出结果不定解析:31.下列字符串是标识符的是_。(分数:2.00)A.aa B.a-classC.intD.LINE 1解析:32.若有以下定义 int x10,*pt=x; 则对 x 数组元素的正确引用是_。(分数:1.00)A.pt+3B.* for(;y0; y-) if(y% 3=0) printf(“% d“, -y); continue; (分数:2.50)A.741B.852 C.963D.8754321解析:解析 for 循环的循环控制变量 y
37、的初值是 10,每循环一次 y 减 1,因此 y 的值由 10 变化到1。for 循环中只包含了一条 if 语句,if 子句是一个复合语句。if 后的表达式 y%3=0 表示只有 y 的值能被 3 整除时,其后的子句才执行。已知 y 由 10 变化到 1,当 y 的值分别为 9、6、3 时才会执行 if 子句中的 printf 语句,进行输出。输出的值应是 8、5、2。continue 语句的作用是结束本次循环,即跳过本次循环体中余下尚未执行的语句。就本题而言,在 if 语句之后,不再有余下尚未执行的语句,因此就接着判断是否执行下一次循环。由此可见,在本题中,continue 是虚设的,不起任何作用。35.若变量已正确定义,在语句“if(W) printf(“%d/n“,k);”中,以下不可替代 W 的是_。(分数:1.00)A.ab+c B.ch=getchar()C.a=b+cD.a+解析:解析 符号不是 C 语言中的运算符,所以不能替代。