1、二级 C语言分类模拟题 585及答案解析(总分:49.00,做题时间:90 分钟)一、选择题(总题数:30,分数:49.00)1.下面对对象概念描述正确的是_。(分数:1.00)A.对象间的通信靠消息传递B.对象是名字和方法的封装体C.任何对象必须有继承性D.对象的多态性是指一个对象有多个操作2.下列叙述中正确的是_。(分数:1.00)A.在栈中,栈中元素随栈底指针与栈顶指针的变化而动态变化B.在栈中,栈顶指针不变,栈中元素随栈底指针的变化而动态变化C.在栈中,栈底指针不变,栈中元素随栈顶指针的变化而动态变化D.在栈中,栈中元素不会随栈底指针与栈顶指针的变化而动态变化3.设有如下关系表: R
2、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/S4.要求通过 while循环不断读入字符,当读入字母 N时结束循环,若变量已正确定义,下列正确的程序段是_。(分数:2.50)A.while(ch=getchar()!=“N“)printf(“%c“, ch);B.while(ch=getchar()!=“N“)printf(“%c“, ch);C.while(ch=getchar()=“N“)printf(“%c“, ch);D.whi
3、le(ch=getchar()=“N“)printf(“%c“, ch);5.下列叙述中正确的是_。(分数:1.00)A.有两个指针域的链表称为二叉链表B.循环链表是循环队列的链式存储结构C.带链的栈有栈顶指针和栈底指针,因此又称为双重链表D.节点中具有多个指针域的链表称为多重链表6.下列选项中,能正确定义数组的语句是_。(分数:2.00)A.int N=2008;int numN;B.int num;int numN;C.#define N 2008int numN;D.int num02008;7.结构化程序设计的基本原则不包括_。(分数:2.50)A.多态性B.自顶向下C.模块化D.逐步
4、求精8.若有定义语句:“int k1=10,k2=20;”,执行表达式(k1=kk2)(k2=k2k1)后,k1 和 k2的值分别为_。(分数:1.00)A.0和 1B.0和 20C.10和 1D.10和 209.有以下程序 #includestdio.h main() int a=1,b=2,c=3,d=4,r=0; if(a!=1)r=1; if(b=2)r=2; else if(c!=3)r=3; else if(d=4)r=4; printf(“%d/n“,r); 执行后的输出结果是_。(分数:1.00)A.0B.4C.1D.210.以下不能输出字符 A的语句是(注:字符 A的 ASC
5、II码值为 65,字符 a的 ASCII码值为 97)_。(分数:1.00)A.printf(“%c/n“, “a“-32);B.printf(“%d/n“, “A“);C.printf(“%c/n“, 65);D.printf(“%c/n“, “B“-1);11.有以下程序: #includestdio.h main() unsigned char a=2, b=4, c=5, d; d=a | b;d printf(“%d/n“,d); 程序运行后的输出结果是_。(分数:1.00)A.3B.4C.5D.612.下列语句组中正确的是_。(分数:1.50)A.char*s;s=“Olympic
6、“;B.char s7;s=“Olympic“;C.char*s;s=“Olympic“;D.char s7;s=“Olympic“;13.以下程序的输出结果为_。 #include stdio.h main() int a, b , c=246; a=c/100% 9; b=(-1) printf(“% d, % d/n“, a, b); (分数:1.00)A.2,1B.3,2C.4,3D.2,-114.有以下函数 int fun(char*s) char*t=s; while(*t+); return(t-s); 该函数的功能是_。(分数:1.00)A.计算 s所指字符串占用内存字节的个数
7、B.比较两个字符串的大小C.计算 s所指字符串的长度D.将 s所指字符串复制到字符串 t中15.在结构化分析方法中,数据字典的作用是_。(分数:2.50)A.存放所有需要处理的原始数据B.存放所有处理的结果C.存放所有程序文件D.描述系统中所用到的全部数据和文件的有关信息16.若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是_。(分数:2.00)A.函数调用可以作为独立的语句存在B.函数调用可以作为一个函数的实参C.函数调用可以出现在表达式中D.函数调用可以作为一个函数的形参17.有以下程序段: int m23,(*p)3; p=m; 则以下对 m数组元素的引用正确的是_。(分数:
8、1.00)A.(P+1)0B.*(*(p+2)+1)C.*(p1+1)D.p1+218.在数据库系统中,用户所见的数据模式为_。(分数:1.00)A.概念模式B.外模式C.内模式D.物理模式19.表达式“0x11”的值是_。(分数:2.50)A.0xFFEEB.0x71C.0x0071D.0xFFE120.C语言中,字符(char)型数据在微机内存中的存储形式是(分数:2.00)A.反码B.补码C.EBCDIC码D.ASCII码21.有以下程序: #includestdio.h main() int a=0,b=0,c=0,d=0; if(a=1)b=1;c=2; else d=3; prin
9、tf(“%d,%d,%d,%d/n“,a,b,c,d); 程序的运行结果是_。(分数:2.50)A.1,1,2,0B.0,0,0,3C.编译有错D.0,1,2,022.下列程序的运行结果是_。 #includestdio.h void fun(int*s,int*p) static int t=3; *p=st; t-; void main() int a=2,3,4,5,k,x; for(k=0;k4;k+) fun(a, printf(“%d,“,x); (分数:2.50)A.5,4,3,2,B.2,3,4,5,C.2,2,2,2,D.5,5,5,5,23.某二叉树的前序序列为 ABCD,
10、中序序列为 DCBA,则后序序列为_。(分数:1.00)A.BADCB.DCBAC.CDABD.ABCD24.以下结构体类型说明和变量定义中正确的是_。(分数:1.00)A.struct REC; int n;char c;REC t1,t2;B.typedef structint n;char c;REC;REC t1,t2;C.typedef struct REC; int n=0;char c=“A“;t1,t2;D.structint n;char c;REC;REC t1,t2;25.有以下程序: void ss(char *s,char t) while(*s) if(*s=t)*
11、s=t-“a“+“A“; S+; main() char strl100=“abcddfefdbd“,c=“d“: ss(strl,c);printf(“% s/n“ ,strl); 程序运行后的输出结果是()。(分数:2.00)A.ABCDDEFEDBDB.abcDDfeDbDC.abcAAfefAbAD.Abcddfefdbd26.以下叙述正确的是_。(分数:2.50)A.do.while语句构成的循环不能用其他语句构成的循环代替B.只有 do.while语句构成的循环能用 break语句退出C.用 do.while语句构成循环时,在 while后的表达式为零时不一定结束循环D.用 do.
12、while语句构成循环时,在 while后的表达式为零时结束循环27.若有以下程序: #include stdio.h void fun(int *s) static int j=0; do sj + =sj+1; while(+ +j2); main( ) int i,a10=1,2,3,4,5; for(i=1;i3;i+ +) fun(a); for(i=1; i5; i+ + ) printf(“%d“,ai); printf(“/n“); 则程序运行后的输出结果是_。(分数:2.50)A.34756B.5745C.5795D.3574528.若有以下程序段 char str412=“
13、aa“, “bbb“, “ccccc“, “d“), *strp4; int i; for(i=0; i4; i+)strpi=stri; 不能正确引用字符串的选项是_。(分数:2.00)A.*strpB.str0C.strp3D.strp29.某二叉树的中序序列为 DCBAEFG,后序序列为 DCBGFEA,则该二叉树的深度(根节点在第 1层)为_。(分数:1.00)A.5B.4C.3D.230.以下选项中可用作 C程序合法实数的是_。(分数:1.00)A1e0B.3.0e0.2CE9D.9.12E二级 C语言分类模拟题 585答案解析(总分:49.00,做题时间:90 分钟)一、选择题(总
14、题数:30,分数:49.00)1.下面对对象概念描述正确的是_。(分数:1.00)A.对象间的通信靠消息传递 B.对象是名字和方法的封装体C.任何对象必须有继承性D.对象的多态性是指一个对象有多个操作解析:解析 对象之间进行通信的结构叫做消息,A 正确。封装性是指从外面看只能看到对象的外部特征,而不知道也无须知道数据的具体结构以及实现操作,不能简单地说成是名字和方法,B 选项错误。对象不一定必须有继承性,C 选项错误。多态性是指同一个操作可以是不同对象的行为,D 选项错误。2.下列叙述中正确的是_。(分数:1.00)A.在栈中,栈中元素随栈底指针与栈顶指针的变化而动态变化B.在栈中,栈顶指针不
15、变,栈中元素随栈底指针的变化而动态变化C.在栈中,栈底指针不变,栈中元素随栈顶指针的变化而动态变化 D.在栈中,栈中元素不会随栈底指针与栈顶指针的变化而动态变化解析:解析 栈是先进后出的数据结构,在对栈操作的整个过程中,栈底指针不变,入栈与出栈操作均由栈顶指针的变化来完成,因此本题答案为 C。3.设有如下关系表: 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种:并、差、交和笛卡尔。并();
16、差(-),R 和 S的差是由属于 R但不属于 S的元组构成的集合;交():由既属于 R又属于 S的元组构成的集合;笛卡尔积():对两个关系 R和 S进行合并操作,产生的关系中元组个数为两个关系中元组个数之积。根据关系 T中的元组可知,T 关系是关系 R和关系 S进行合并操作所得到的。4.要求通过 while循环不断读入字符,当读入字母 N时结束循环,若变量已正确定义,下列正确的程序段是_。(分数:2.50)A.while(ch=getchar()!=“N“)printf(“%c“, ch); B.while(ch=getchar()!=“N“)printf(“%c“, ch);C.while(
17、ch=getchar()=“N“)printf(“%c“, ch);D.while(ch=getchar()=“N“)printf(“%c“, ch);解析:解析 while 循环的执行过程如下:计算 while后面圆括号中表达式的值。当值为非 0时,执行步骤。当值为 0时,执行步骤。执行循环体一次。转去执行步骤。退出循环。在选项 A中,表达式(ch=get-char()!=“N“表示输入的字符不等于 N,如果这个条件表达式成立,则执行循环体,打印输出输入的字符。如果这个条件表达式不成立,即输入的字符等于 N,则退出循环。所以选项 A为正确答案。5.下列叙述中正确的是_。(分数:1.00)A.
18、有两个指针域的链表称为二叉链表B.循环链表是循环队列的链式存储结构C.带链的栈有栈顶指针和栈底指针,因此又称为双重链表D.节点中具有多个指针域的链表称为多重链表 解析:解析 双向链表与二叉链表均是有两个指针域的链表,A 选项错误。在单链表的第一个节点前增加一个表头节点,队头指针指向表头节点,最后一个节点的指针域的值由 NULL改为指向表头节点,这样的链表称为循环链表。循环队列是队列的一种顺序存储结构。循环链表与循环队列是两种存储结构,B 选项错误。双向链表节点有两个指针域,指向前一个节点的指针和指向后一个节点的指针,而带链的栈是单链表形式,C 选项锚误。故正确答案为 D选项。6.下列选项中,能
19、正确定义数组的语句是_。(分数:2.00)A.int N=2008;int numN;B.int num;int numN;C.#define N 2008int numN; D.int num02008;解析:解析 数组定义的长度必须为常量,所以 C选项正确。7.结构化程序设计的基本原则不包括_。(分数:2.50)A.多态性 B.自顶向下C.模块化D.逐步求精解析:解析 结构化程序设计的思想包括:自顶向下、逐步求精、模块化、限制使用 go to语句,多态性是面向对象的程序设计的思想,因此本题答案为 A。8.若有定义语句:“int k1=10,k2=20;”,执行表达式(k1=kk2)(k2=
20、k2k1)后,k1 和 k2的值分别为_。(分数:1.00)A.0和 1 B.0和 20C.10和 1D.10和 20解析:解析 此表达武为逻辑表达式,k1=k1k2 的意义是,如果 k1k2,则 k1为真,同理k2=k2k1,如果 k2k1,则 k2为真。所以答案为 A。9.有以下程序 #includestdio.h main() int a=1,b=2,c=3,d=4,r=0; if(a!=1)r=1; if(b=2)r=2; else if(c!=3)r=3; else if(d=4)r=4; printf(“%d/n“,r); 执行后的输出结果是_。(分数:1.00)A.0B.4C.1
21、D.2 解析:解析 第一个 if语句是单独的语句,所以执行完第一个 if语句后,r 的值仍为初值 0;第二个if语句与后续的两个 else if都是嵌套的,所以只会执行其中的一个语句,即 if(b=2)r=2;这条语句,所以本题答案为 D。10.以下不能输出字符 A的语句是(注:字符 A的 ASCII码值为 65,字符 a的 ASCII码值为 97)_。(分数:1.00)A.printf(“%c/n“, “a“-32);B.printf(“%d/n“, “A“); C.printf(“%c/n“, 65);D.printf(“%c/n“, “B“-1);解析:解析 在 C语言中%d 表示输出整
22、型数值,所以答案为 B。11.有以下程序: #includestdio.h main() unsigned char a=2, b=4, c=5, d; d=a | b;d printf(“%d/n“,d); 程序运行后的输出结果是_。(分数:1.00)A.3B.4 C.5D.6解析:解析 s=“Olympic“; B.char s7;s=“Olympic“;C.char*s;s=“Olympic“;D.char s7;s=“Olympic“;解析:解析 字符型指针变量可以用 A选项的赋值方法:char*s;s=“Olympic“。C 选项的写法:char*s,s=“Olympic“;是错误的
23、。字符数组可以在定义的时候初始化:char s=“Olympic“;或者char s=“Olympic“,但是不可以在定义字符数组后对数组名赋值(数组名是常量,代表数组首地址),所以 B选项和 D选项都是错误的。对于本例,B、D 选项中字符数组 s的大小至少为 8,才能存放下字符串(字符串的末尾都有结束标志“/0“),同时此时 s为字符数组的地址,是常量,不能为其赋值。13.以下程序的输出结果为_。 #include stdio.h main() int a, b , c=246; a=c/100% 9; b=(-1) printf(“% d, % d/n“, a, b); (分数:1.00)
24、A.2,1 B.3,2C.4,3D.2,-1解析:14.有以下函数 int fun(char*s) char*t=s; while(*t+); return(t-s); 该函数的功能是_。(分数:1.00)A.计算 s所指字符串占用内存字节的个数B.比较两个字符串的大小C.计算 s所指字符串的长度 D.将 s所指字符串复制到字符串 t中解析:解析 首先 char *s接受一个字符型数组的首地址并将这个首地址赋给另一个字符型指针char*t,while(*t+)不断循环,直到*t 为“/0“,再将 t-1,这时字符指针 t指向字符串的最后一个字符,又因为 s指向字符数组的首地址即字符串的首地址,
25、所以 return(t-s)便是返回字符数组中字符串的长度。故本题答案为 C。15.在结构化分析方法中,数据字典的作用是_。(分数:2.50)A.存放所有需要处理的原始数据B.存放所有处理的结果C.存放所有程序文件D.描述系统中所用到的全部数据和文件的有关信息 解析:解析 在 C语言中,结构化分析方法中的数据字典的作用是描述系统中所用到的全部数据和文件的有关信息。16.若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是_。(分数:2.00)A.函数调用可以作为独立的语句存在B.函数调用可以作为一个函数的实参C.函数调用可以出现在表达式中D.函数调用可以作为一个函数的形参 解析:17.
26、有以下程序段: int m23,(*p)3; p=m; 则以下对 m数组元素的引用正确的是_。(分数:1.00)A.(P+1)0B.*(*(p+2)+1)C.*(p1+1) D.p1+2解析:解析 数组元素 aij可表示为*(ai+j),因此,在定义数组 m和指针变量 P后,*(p1+1)表示指向数组 m11,因此答案为 C选项。18.在数据库系统中,用户所见的数据模式为_。(分数:1.00)A.概念模式B.外模式 C.内模式D.物理模式解析:解析 概念模式是数据库系统中对全局数据逻辑结构的描述,是全体用户(应用)公共数据视图,它主要描述数据的记录类型及数据间关系,还包括数据间的语义关系等。数
27、据库管理系统的 3级模式结构由外模式、模式、内模式组成。数据库的外模式也叫做用户级数据库,是用户所看到和理解的数据库,是从概念模式导出的子模式,用户可以通过子模式描述语言来描述用户级数据库的记录,还可以利用数据语言对这些记录进行操作。内模式(或存储模式、物理模式)是指数据在数据库系统内的存储介质上的表示,是对数据的物理结构和存取方式的描述。19.表达式“0x11”的值是_。(分数:2.50)A.0xFFEE B.0x71C.0x0071D.0xFFE1解析:解析 本题主要考查按位求反运算:十六进制整型常量的形式是以数字 0x开头的十六进制字符串;位求反运算的规则是将二进制表示的运算对象按位取反
28、,即将 1变 0,将 0变 1。20.C语言中,字符(char)型数据在微机内存中的存储形式是(分数:2.00)A.反码B.补码C.EBCDIC码D.ASCII码 解析:21.有以下程序: #includestdio.h main() int a=0,b=0,c=0,d=0; if(a=1)b=1;c=2; else d=3; printf(“%d,%d,%d,%d/n“,a,b,c,d); 程序的运行结果是_。(分数:2.50)A.1,1,2,0B.0,0,0,3C.编译有错 D.0,1,2,0解析:解析 本题中 if(a=1)b=1;与 else d=3;之间多了语句 c=2;,所以会出现
29、 else语句的位置错误的编译失败提示。22.下列程序的运行结果是_。 #includestdio.h void fun(int*s,int*p) static int t=3; *p=st; t-; void main() int a=2,3,4,5,k,x; for(k=0;k4;k+) fun(a, printf(“%d,“,x); (分数:2.50)A.5,4,3,2, B.2,3,4,5,C.2,2,2,2,D.5,5,5,5,解析:解析 分析 fun函数程序段,可知 fun函数要实现的功能是将 s中第(t+1)个元素以前的元素逆置赋给数组 p。由于 fun函数定义了静态变量 t=3
30、,因此,在主函数中调用函数 fun(a, int n;char c;REC t1,t2;B.typedef structint n;char c;REC;REC t1,t2; C.typedef struct REC; int n=0;char c=“A“;t1,t2;D.structint n;char c;REC;REC t1,t2;解析:解析 本题考查结构体的相关知识,选项 A中 struct REC后面不能有分号,选项 C中 typedef struct REC的后面也不能有分号,选项 D中 REC已经是结构体变量,不能当做结构体类型来使用。25.有以下程序: void ss(char
31、 *s,char t) while(*s) if(*s=t)*s=t-“a“+“A“; S+; main() char strl100=“abcddfefdbd“,c=“d“: ss(strl,c);printf(“% s/n“ ,strl); 程序运行后的输出结果是()。(分数:2.00)A.ABCDDEFEDBDB.abcDDfeDbD C.abcAAfefAbAD.Abcddfefdbd解析:解析 在内存中,字符数据以 ASC码存储,它的存储形式与整数的存储形式类似。C 语言中,字符型数据和整型数据之间可以通用,也可以对字符型数据进行算术运算,此时相当于对它们的 ASC码进行算术运算,在
32、本题中,s+相当于 s=s+1,即让 s指向数组中的下一个元素。在函数 SS(char*s,char t)中,当*s=t 时,*s 通过运算变为大写,因此答案选择 B) 。26.以下叙述正确的是_。(分数:2.50)A.do.while语句构成的循环不能用其他语句构成的循环代替B.只有 do.while语句构成的循环能用 break语句退出C.用 do.while语句构成循环时,在 while后的表达式为零时不一定结束循环D.用 do.while语句构成循环时,在 while后的表达式为零时结束循环 解析:解析 do.while 语句构成的循环可以用其他语句构成的循环来代替。但要注意,for
33、和 while语句构成的循环,循环体是否执行取决于时循环控制条件的设置;而 do.while构成的循环不管循环控制的条件如何设置,循环体总要执行一次。无论是哪种循环,break 语句都可以退出循环。用 do.while语句构成的循环和 while语句构成的循环一样,都是在 while后的表达式为零时结束循环,非零时循环继续。27.若有以下程序: #include stdio.h void fun(int *s) static int j=0; do sj + =sj+1; while(+ +j2); main( ) int i,a10=1,2,3,4,5; for(i=1;i3;i+ +) f
34、un(a); for(i=1; i5; i+ + ) printf(“%d“,ai); printf(“/n“); 则程序运行后的输出结果是_。(分数:2.50)A.34756B.5745 C.5795D.35745解析:解析 本题主要考查 dowhile语句,执行 fun函数后,a 数组里面的元素变为 35745,输出后 4个字符,所以结果为 5745,选项 B正确。28.若有以下程序段 char str412=“aa“, “bbb“, “ccccc“, “d“), *strp4; int i; for(i=0; i4; i+)strpi=stri; 不能正确引用字符串的选项是_。(分数:2
35、.00)A.*strpB.str0C.strp3D.strp 解析:解析 strp 是字符串指针数组,不能作为字符串的引用。29.某二叉树的中序序列为 DCBAEFG,后序序列为 DCBGFEA,则该二叉树的深度(根节点在第 1层)为_。(分数:1.00)A.5B.4 C.3D.2解析:解析 深度,定义一棵树的根节点所在的层次为 1,其他节点所在的层次等于它的父节点所在的层次加 1,树的最大层次称为树的深度。二叉树遍历可以分为 3种:前序遍历(访问根节点在访问左子树和访问右子树之前)、中序遍历(访问根节点在访问左子树和访问右子树两者之间)、后序遍历(访问根节点在访问左子树和访问右子树之后)。二叉树的后序序列为 DCBGFEA,A 为根节点。中序序列为 DCBAEFC,可知 DCB为左子树节点,EFG 为右子树节点。同理 B为 C父节点,C 为 D父节点。根据分析,可画出左子树,同理 E为 F根节点,F 为 G根节点。根据分析,可画出右子树,观察得,树的深度为 4。故二叉树深度为4层,故 B选项正确。30.以下选项中可用作 C程序合法实数的是_。(分数:1.00)A1e0 B.3.0e0.2CE9D.9.12E解析:解析 C 语言中实数的指数计数表示格式为字母 e或者 E之前必须有数字,且 e或 E后面的指数必须为整数。所以选项 A正确。