《计算机等级考试二级C模拟题及答案详解.doc》由会员分享,可在线阅读,更多相关《计算机等级考试二级C模拟题及答案详解.doc(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、计算机等级考试二级C模拟题及答案详解一、选择题在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确的选项涂写在答题卡相应位置上,答在试卷上不得分。(1)算法的空间复杂度是指 A)算法程序的长度 B)算法程序中的指令条数 C)算法程序所占的存储空间 D)执行算法需要的内存空间(2)在结构化程序设计中,模块划分的原则是 A)各模块应包括尽量多的功能 B)各模块的规模应尽量大 C)各模块之间的联系应尽量紧密 D)模块内具有高内聚度、模块间具有低耦合度(3)下列叙述中,不属于测试的特征的是 A)测试的挑剔性 B)完全测试的不可能性 C)测试的可靠性 D)测试的经济性(4)下面关
2、于对象概念的描述中,错误的是 A)对象就是C语言中的结构体变量 B)对象代表着正在创建的系统中的一个实体 C)对象是一个状态和操作(或方法)的封装体 D)对象之间的信息传递是通过消息进行的(5)下列关于队列的叙述中正确的是 A)在队列中只能插入数据 B)在队列中只能删除数据 C)队列是先进先出的线性表 D)队列是先进后出的线性表(6)已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是 A)acbed B)decab C)deabc D)cedba(7)某二叉树中有n个度为2的结点,则该二叉树中的叶子结点数为 A)n+1 B)n-1 C)2n D)n/2(8)设有如
3、下三个关系表RSTABCABCm13m13nn13下列操作中正确的是 A) T=RS B) T=RS C) T=RS D) T=R/S(9)下列叙述中,正确的是 A)用E-R图能够表示实体集间一对一的联系、一对多的联系和多对多的联系 B)用E-R图只能表示实体集之间一对一的联系 C)用E-R图只能表示实体集之间一对多的联系 D)用E-R图表示的概念数据模型只能转换为关系数据模型(10)下列有关数据库的描述,正确的是 A)数据处理是将信息转化为数据的过程 B)数据的物理独立性是指当数据的逻辑结构改变时,数据的存储结构不变 C)关系中的每一列称为元组,一个元组就是一个字段 D)如果一个关系中的属性
4、或属性组并非该关系的关键字,但它是另一个关系的关键字,则称其为本关系的外关键字(11)C语言规定,在一个源程序中,main函数的位置 A)必须在最开始 B)必须在系统调用的库函数的后面 C)可以任意 D)必须在最后(12)以下叙述中错误的是 A)计算机不能直接执行用C语言编写的源程序 B)C程序经C编译程序编译后,生成后缀为.obj的文件是一个二进制文件 C)后缀为.obj的文件,经连接程序生成后缀为.exe的文件是一个二进制文件 D)后缀为.obj和.exe的二进制文件都可以直接运行(13)下列选项可以正确表示字符型常量的是 A)r B)a C)897 D)296(14)以下叙述中正确的是
5、A)构成C程序的基本单位是函数 B)可以在一个函数中定义另一个函数 C)main()函数必须放在其他函数之前 D)C函数定义的格式是K&R格式(15)设变量均已正确定义,若要通过scanf(%d%c%d%c,&a1,&c1,&a2,&c2);语句为变量a1和a2赋数值10和20,为变量c1和c2赋字符X和Y。以下所示的输入形式中正确的是(注:代表空格字符) A) 10X20Y B) 10X20Y C) 10X 20Y D) 10X 20Y(16)若有说明:int *p,m=5,n;,以下正确的程序段是 A)p=&n;scanf(%d,&p); B)p=&n;scanf(%d,*p) C)sca
6、nf(%d,&n);*p=n; D)p=&n;*p=m;(17)在执行下述程序时,若从键盘输入6和8,则结果为 main() int a,b,s; scanf(%d%d,&a,&b); s=a if(ab) s=b; s*=s; printf(%d,s); A)36 B)64 C)48 D)以上都不对(18)若执行下面的程序时,从键盘输入5和2,则输出结果是 main() int a,b,k; scanf(%d,%d ,&a,&b); k=a; if(a0 & n6)n-; printf(%d,n); 该程序的输出结果是 A)987 B)876 C)8765 D)9876(24)有以下程序 #
7、include main() int c; while(c=getchar()!=n) switch(c-2) case 0: case 1:putchar(c+4); case 2:putchar(c+4);break; case 3:putchar(c+3); case 4:putchar(c+3);break; printf(n) 从第一列开始输入以下数据代表一个回车符。 2743 程序的输出结果是 A)66877 B) C) D)(25)有以下程序 main() int x=0,y=0,i; for (i=1;+i) if (i%2=0) x+;continue; if (i%5=0)
8、 y+;break; printf ( %d,%d,x,y); 程序的输出结果是 A)2,1 B)2,2 C)2,5 D)5,2(26)有以下程序 main() int a44=l,4,3,2,8,6,5,7,3,7,2,5,4,8,6,1,i,j,k,t; for(i=0;i4;i+) for(j=0;j3;j+) for(k=j+1;kaki)t=aji;aji=aki;aki=t;/*按列排序*/ for(i=0;i4;i+)printf(%d,aii); 程序运行后的输出结果是 A)1,6,5,7, B)8,7,3,1, C)4,7,5,2, D)1,6,2,1,(27)有以下程序 i
9、nt f(int n) if(n=1)return 1; else return f(n-1)+1; main() int i,j=0; for(i=1;i3;i+)j+=f(i); printf(%dn,j); 程序运行后的输出结果是 A)4 B)3 C)2 D)1(28)当运行以下程序时,从键盘输入AhaMA(空格)Aha,则下面程序的运行结果是 #include main() char s80,c=a; int i=0; scanf(%s,s); while(si!= if(si=c)si-32; else if(si=c-32)si=si+32; i+; puts(s); A)ahaM
10、a B)AbAMa C)AhAMa空格ahA D)ahAMa空格ahA(29)下面程序输出的结果是 main() int i; int a33=1,2,3,4,5,6,7,8,9; for(i=0;i3;i+) printf(%d ,a2-ii); A)1 5 9 B)7 5 3 C)3 5 7 D)5 9 1(30)现有如下程序段 #include stdio.h main() int a56=23,3,65,21,6,78,28,5,67,25,435,76,8,22,45,7,8,34,6,78,32,4,5,67,4,21,1; int i=0,j=5; printf(%dn,*(&a
11、00+2*i+j-2); 则程序的输出结果为 A)21 B)78 C)23 D)28(31)请选出正确的程序段 A)int *p; scanf(%d,p); B)int *s, k; *s=100; C)int *s, k; char *p, c; s=&k; p=&c; *p=a; D)int *s, k; char *p, e; s=&k; p=&c; s=p; *s=1; (32)下面程序段的运行结果是 char a=lanuage,*p; p=a; while(*p!=u)printf(%c,*p-32);p+; A)LANGUAGE B)language C)LAN D)langUA
12、GE(33)以下程序的输出结果是 #include int a33=1,2,3,4,5,6,7,8,9,*p; main() p=(int*)malloc(sizeof(int); f(p,a); printf(%dn,*p); free(p); f(int *s, int p3) *s=p11; A)1 B)4 C)7 D)5(34)有以下程序 void f(int *q) int i=0; for(;i5; i+) (*q)+; main() int a5 =1,2,3,4,5, i; f(a); for(i=0;i5; i+) printf(%d, ai); 程序运行后的输出结果是 A)
13、2,2,3,4,5, B)6,2,3,4,5, C)1,2,3,4,5, D) 2,3,4,5,6,(35)以下合法的字符型常量是 A)x13 B) 081 C) 65 D)n(36)有以下语句,则对a数组元素的引用不正确的是 int a10=0,1,2,3,4,5,6,7,8,9,*p=a; A)ap-a B)*(&ai) C)pi D)*(*(a+i)(37)有以下程序 # include main() char p20=a, b, c, d, q=abc, r=abcde; strcat(p, r); strcpy(p+strlen(q), q); printf(%dn,strlen(p
14、); 程序运行后的输出结果是 A)9 B)6 C)11 D)7(38)在C语言中,变量的隐含存储类别是 A)auto B)static C)extern D)无存储类别(39)以下程序的输出结果是 main() int c=35; printf(%dn,c&c); A)0 B)70 C)35 D)1(40)有以下程序 #include main() FILE *fp; int i=20,j=30,k,n; fp=fopen(d1.dat,w); fprintf(fp,%dn,i);fprintf(fp,%dn,j); fclose(fp); fp=fopen(d1.dat,r); fscanf
15、(fp,%d%d,&k,&n); printf(%d %dn,k,n); fclose(fp); 程序运行后的输出结果是 A)20 30 B)20 50 C)30 50 D)30 20二、填空题请将每一个空的正确答案写在答题卡序号的横线上,答在试卷上不给分。(1)设一棵完全二叉树共有700个结点,则在该二叉树中有 【1】 个叶子结点。(2)常用的黑箱测试有等价类划分法、 【2】 和错误推测法3种。(3)数据库管理系统常见的数据模型有层次模型、网状模型和 【3】 3种。(4)通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为 【4】 。(5)数据库保护分为:安全性控制 、 【5】 、
16、并发性控制和数据的恢复。(6)执行以下程序后的输出结果是 【6】 。 main() int a=10; a=(3*5,a+4);printf(a=%dn,a); (7)以下程序的输出结果是 【7】 。 #include main() printf(%dn,strlen(IBMn0121);(8)已定义char ch=$; int i=1,j;,执行j!=ch&i+以后,i的值为 【8】 。(9)以下程序的运行结果是 【9】 。 #include long fib(int g) switch(g) case 0:return 0; case 1: case 2:return 1; return(
17、fib(g-1)+fib(g-2); main() long k; k=fib(5); printf(k=%5ldn,k);(10)下面程序的功能是输出数组s中最大元素的下标,请填空。 main() int k, p,s=1, -9, 7, 2, -10, 3; for(p=0, k=p; psk) 【10】 printf(%dn,k);(11)以下程序的功能是:求出数组x中各相邻两个元素的和依次存放到a数组中,然后输出。请填空。 main() int x10,a9,I; for(I=0; I10; I+) scanf(%d,&xI); for( 【11】 ; I10; I+ ) aI-1=x
18、I+ 【12】 ;. for(I=0; Inext=NULL),请填空。 #include struct list int data; struct list *next; struct list*creatlist() struct list *p,*q,*ph;int a;ph=(struct list *)malloc (sizeof(struct list); p=q=ph;printf(Input an integer number; entre-1 to end:n);scanf(%d,&a); while(a!=-1) p=(struct list*)malloc(sizeof(
19、struct list); 【14】 =a;q-next=p; 【15】 =p;scanf(%d,&a); p-next=0;return(ph); main() struct list * head; head=creatlist();答案详解:(1)D 【解析】 算法的复杂度主要包括算法的时间复杂度和算法的空间复杂度。所谓算法的时间复杂度是指执行算法所需要的计算工作量;算法的空间复杂度是指执行这个算法所需要的内存空间。(2)D 【解析】 在结构化程序设计中,一般较优秀的软件设计尽量做到高内聚、低耦合,这样有利于提高软件模块的独立性,也是模块划分的原则。(3)C 【解析】 软件测试的目标是在
20、精心控制的环境下执行程序,以发现程序中的错误,给出程序可靠性的鉴定。它有3个方面的重要特征,即测试的挑剔性、完全测试的不可能性及测试的经济性。其中,没有测试的可靠性这一说法。(4)A 【解析】 对象是由数据和容许的操作组成的封装体,与客观实体有直接的对应关系,对象之间通过传递消息互相联系,从模拟现实世界中不同事物彼此之间的联系,B)、C)、D)是正确的,对象的思想广泛应用于C+、Java等语言中,因此A)错误。(5)C 【解析】 队列是一种操作受限的线性表。它只允许在线性表的一端进行插入操作,另一端进行删除操作。其中,允许插入的一端称为队尾(rear),允许删除的一端称为队首(front)。队
21、列具有先进先出的特点,它是按先进先出的原则组织数据的。(6)D 【解析】 依据后序遍历序列可确定根结点为c;再依据中序遍历序列可知其左子树由deba构成,右子树为空;又由左子树的后序遍历序列可知其根结点为e,由中序遍历序列可知其左子树为d,右子树由ba构成,如下图所示,求得该二叉树的前序遍历序列为选项D)。 (7)A 【解析】 对于任何一棵二叉树T,如果其终端结点(叶子)数为n1,度为2的结点数为n2,则n1=n2+1,所以该二叉树的叶子结点数等于n+1。(8)C 【解析】 对于两个关系的合并操作可以用笛卡尔积表示。设有n元关系R和m元关系S,它们分别有p和q个元组,则R与S的笛卡儿积记为RS
22、它是一个m+n元关系,元组个数是pq由题意可得,关系T是由关系R与关系S进行笛卡尔积运算得到的。(9)A 【解析】 两个实体之间的联系实际上是实体集间的函数关系,这种函数关系可以有下面几种,即一对一的联系、一对多(或多对一)的联系和多对多的联系;概念模型便于向各种模型转换。由于概念模型不依赖于具体的数据库管理系统,因此,容易向关系模型、网状模型和层次模型等各种模型转换。(10)D 【解析】 数据处理是指将数据转换成信息的过程,故选项A)叙述错误;数据的物理独立性是指数据的物理结构的改变,不会影响数据库的逻辑结构,故选项B)叙述错误;关系中的行称为元组,对应存储文件中的记录,关系中的列称为属性,
23、对应存储文件中的字段,故选项C)叙述错误。(11)C 【解析】 不论main函数在整个过程中的位置如何,一个C程序总是从main函数开始执行的。(12)D 【解析】 一个C语言的源程序(后缀名为.c)在经过编译器编译后,先生成一个汇编语言程序,然后由编译程序再将汇编语言程序翻译成机器指令程序,即目标程序(后缀名为.obj),目标程序不可以直接运行,它要和库函数或其他目标程序连接成可执行文件(后缀名为.exe)后方可运行。(13)A 【解析】 C语言中,一个字符常量代表ASCII字符集中的一个字符,在程序中用单引号括起来作为字符常量,字符常量的的范围是0127。由于字符常量用单引号括起来,所以选
24、项B),C)错误,选项D)超过了字符常量的表示范围。(14)A 【解析】 本题考查C语言的综合基础知识。构成C程序的基本单位是函数,不论main函数在整个程序中的位置如何,一个C程序总是从main函数开始执行,C语言的函数定义都是互相平行、独立的,在定义函数时,一个函数内不能定义另一个函数。C函数定义的一般格式有两种:传统格式和现代格式。传统格式也称K&R格式,是早期编译系统使用的格式;现代格式又称ANSI格式,是现代编译系统使用的格式。(15)D 【解析】 本题中,scanf函数的格式控制没有空格,所以,对于选项A)、B)、C),输入的第一个空格会作为字符赋值给变量c1,而不会被解释成分隔符
25、。(16)D 【解析】 &是求址运算符,*是指变量说明符。选项A)、B)应改为scanf(%d,p);选项C)中指针变量p未指向一确定的内存单元,不能为其赋值,并且这样做很危险,建议不使用。(17)B 【解析】 本题中a的值为6,b的值为8,最后s的值为8,s*=s等价于s=s*s。(18)C 【解析】 本题考查简单的ifelse语句。先执行条件if(ab),显然不成立,在执行else语句。(19)A 【解析】 在C语言中,应当在定义函数时指定函数值的类型,凡不加类型说明的函数,一律按整型处理。在定义函数时,对函数值说明的类型一般应该和return语句中的表达式类型一致。如果函数值的类型和re
26、turn语句中的表达式类型不一致,则以函数类型为主,即函数类型决定返回值的类型。(20)D 【解析】 C语言中,字符数据参加运算时,实际上是其ASCII码参与运算。大写字母的ASCII码比其对应的小写字母的ASCII码小32。因此大写字母转化为小写字母只需将其加上32即可。所以选项B)、C)都符合条件,因为变量c中存储的是大写字母,所以c-A的值一定小于26,故选项A)与选项C)的含义相同。(21)D 【解析】 因为x的值为大于1的奇数,所以x除以2的余数等于1,因此,选项A)、C)中表达式的结果为真,不为0;对于选项B)来说,x除以2的商不会等于0;选项D)中表达式的结果为假,即等于0。(2
27、2)A 【解析】 因为变量的初始值分别为k=5,n=0,所以程序第一次进入循环时,执行default语句,这时k=4,执行case 4:这个分支,结果是n=2,k=3,打印出2;程序然后进行第二次循环,这时n=2,k=3,执行case 3:这个分支,结果是n=3,k=2,打印出3;程序进行第三次循环,这时n=3,k=2,执行case 2: case 4:这两个分支,结果是n=5,k=1,打印出5,这时因为n=5不满足n6可以知道,最后一次循环开始时,n的值应该为7,所以最后一次执行循环时,输出为6,由此可以排除选项C)。(24)A 【解析】 本题主要考查了字符输入输出函数getchar和put
28、char的使用。getchar函数用来从标准输入设备上读入一个字符,putchar(c)函数是将字符变量c中的字符输出到标准输出设备上,并且字符可以看作整数参与运算。(25)A 【解析】 本题考查了continue和break语句在循环语句中的作用。break语句的作用是结束本层循环,而continue语句的作用是结束本次循环直接进入到下次循环。(26)A 【解析】 本题利用多重 for循环的嵌套来实现对二维数组元素的按列排序。利用最外层循环来实现对列的控制。内部循环利用选择法对数组元素按照从小到大的顺序进行排列,最后输出对角线上的元素值。(27)B 【解析】 在main函数中,对f(1)和f
29、(2)的值进行了累加。 f(1)=1 f(2)=f(1)+1=2 最后,j的值为1+2=3(28)A 【解析】 本题主要考查的知识点是大写字母比它对应的小写字母ASCII码值小32,并且字符可以看作整数进行算术运算等操作。(29)B 【解析】 本题用循环的方法考查对数组概念的掌握。首先,当i=0时,数组中的位置是a20=7,当然,如果用排除法,就不用考虑后面的循环,因为在4个选项中,第1个数为7的选项只有B)。本题执行第2次循环时,i的值为1,则printf函数中的数组指向为a11=5,依次循环,可求出答案。(30)A 【解析】 通过地址来引用二维数组,若有以下定义:int a34,i,j;且
30、当0i3,0j4则可以有以下几种方式来引用数组中的第i行,第j列的元素:aij,*(ai+j),*(*(a+i)+j),(*(a+i)j,*(&a00+4*i+j)。表达式&a00+2*i+j-2相当于是地址&a00加上多少偏移量。(31)C 【解析】 本题的选项A)和B)犯了同样的错误,即指针变量在定义后并没有指向具体的变量。也就是说,指针变量中没有确定的地址值,它的值是不可预见的,所指的单元也是不可预见的,因此不能进行赋值操作。另外,在选项D)中,s是int型指针变量,p是char型指针变量,所指向的内存单元所占用的字节数是不同的,因而不能将字符指针变量p的值赋给整型指针变量s。(32)C
31、 【解析】 本段程序的作用是输出字符串lanuage中字母u之前的字符,并将其转化为大写字母。 注意:如果一个字符数组用来作为字符串使用,那么在定义该字符数组时,数组的大小就应该比它将要实际存放的最长字符多一个元素,以存放0。(33)D 【解析】 本题考查了二维数组元素引用的方法。题中用动态存储分配函数malloc分配了一个int型数据长度大小的内存,然后指针p指向了这段内存,函数f()中对p所指向的数据进行了赋值,p11为二维数组第二行第二列的元素,对应于实参a的元素5,所以输出结果为5。(34)B 【解析】 调用函数f()时,将数组a的地址传递给了指针q,此时q指向的就是数组a的第一个元素
32、a0。在5次循环过程中,q始终指向a0,因此a0的值增加了5。最后的输出结果为6,2,3,4,5。(35)A 【解析】 C语言的字符常量是用单引号(即撇号)括起来的一个字符。除此之外,在C语言中还允许用一个 开头的字符序列来表示字符常量。其中,形式ddd表示1到3位8进制数所代表的字符;形式xhh表示1到2位16进制数所代表的字符。在本题中,x13表示回车符,是一个字符常量;081用8进制数所代表的字符,但形式不正确,因为8进制数所代表的字符中不会出现数字8;65不是一个字符,而是一个十进制数字;n是用双引号括起来的一个字符,表示一个字符串,而不是字符常量。(36)D 【解析】 本题考查数组指
33、针的应用。选项D)第一层括号中为数组a中第i项元素的值,外面再加指针运算符没有意义。(37)B 【解析】 strcpy()函数的功能是将字符串q复制到从p3位置开始的存储单元,同时复制字符串结束标志0 到p6中。函数strlen()返回的是字符串中不包括0在内的实际长度,故本题答案为B)(38)A 【解析】 auto变量:无static声明的局部变量。用auto作存储类别的声明时,可以不写auto,存储类别隐含确定为auto(自动存储类别),是动态存储方式。大多数变量是自动变量。用static声明的局部变量是静态局部变量。函数调用结束后静态局部变量占据的内存存储单元空间不释放,局部变量保留原值
34、,下次调用时可以继续使用该值。用extern声明外部变量,外部变量即全局变量,可以用extern声明来改变全局变量的作用域,实际上,关键字auto 可以省略,auto不写则隐含确定为自动存储类别,属于动态存储方式。(39)C 【解析】 本题考查按位与&。因为1&1=1,0&0=0,所以任何数与自身按位与,结果仍为此数,不发生变化。(40)A 【解析】 本题中,最主要的是掌握几个有关文件函数的应用。 函数名:fopen 功能:打开一个文件 调用方式FILE *fp ; fp=fopen(文件名,使用文件方式); 函数名:fprintf 功能:传送格式化输出到一个文件中 调用方式:fprintf(
35、文件指针,格式字符串,输出表列); 函数名:fclose 功能:关闭一个文件 调用方式:fclose(文件指针); 函数名:fscanf 功能:从磁盘文件执行格式化输入 调用方式:fscanf(文件指针,格式字符串,输入列表)。二、填空题【1】 350 【解析】 完全二叉树中,设高度为n,则除h层外其它层结点数都到达最大,可以算出h=10,1至9层结点个数为29-1=511,最后一层结点个数为700-511=189个,189/2=95,除最后一层外共有结点2(9-1)-95=161个,所以所有的结点个数为:189+161=350个。【2】 边界值分析法 【解析】 黑箱测试法完全不考虑程序的内部
36、结构和内部特征,而只是根据程序功能导出测试用例。常用的黑箱测试有等价类划分法、边界值分析法和错误推测法3种。【3】 关系模型 【解析】 数据库管理系统是位于用户与操作系统之间的一层系统管理软件,属于系统软件是用户与数据库之间的一个标准接口,其总是基于某种数据模型,可以分为层次模型、网状模型和关系模型。【4】 软件生命周期 【解析】 软件产品从考虑其概念开始,到该软件产品不能使用为止的整个时期都属于软件生命周期。一般包括可行性研究与需求分析、设计、实现、测试、交付使用以及维护等活动。【5】 完整性控制 【解析】 安全性控制:防止未经授权的用户有意或无意存取数据库中的数据,以免数据被泄露、更改或破
37、坏;完整性控制:保证数据库中数据及语义的正确性和有效性,防止任何对数据造成错误的操作;并发控制:正确处理好多用户、多任务环境下的并发操作,防止错误发生;恢复:当数据库被破坏或数据不正确时,使数据库将其恢复到正确的状态。【6】 a=14 【解析】 本题考查的是表达式的优先级问题。先计算表达式3*5=15,再计算a+4=14,将数据14赋值给a,根据printf()函数内的输出格式控制串,最后的输出结果应为a=14。【7】 9 【解析】本题的字符串中共有9个字符,它们分别是I、B、M、n、 0、1、2、1、,其中,n表示换行,表示反斜杠字符,所以本题的最后输出结果为9。【8】 1 【解析】 在执行逻辑表达式j=!ch&i+时,首先判断j=!ch的值,因为ch=$不为0,所以j=!ch=0,编译系统便不再计算表达式i+的值,i的值不变,仍为1。【9】 k=5 【解析】 本题主要考查了函数的递归调用方法。g=0或g=1或g=2是递归的终止条件,然后用回代的方法从一个已知值推出下一个值,直到计算出最终结果。【10】 k=p; 【解析】 为寻找数组中最大元素的下标,需先预设1个临时最大元素的下标,并顺序逐一考查数组的元素,当发现当前元素比临时
限制150内