《2016年3月份全国计算机等级考试二级C语言_题库(全).docx》由会员分享,可在线阅读,更多相关《2016年3月份全国计算机等级考试二级C语言_题库(全).docx(208页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2016年3月份全国计算机等级考试二级C语言 题库(全)一、选择题在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确的选项涂写在答题卡相应位置上,答在试卷上不得分。(1)为了避开流程图在描绘程序逻辑时的灵敏性,提出了用方框图来代替传统的程序流程图,通常也把这种图称为 A)PAD图B)N-S图 C)构造图 D)数据流图(2)构造化程序设计主要强调的是 A)程序的规模 B)程序的效率 C)程序设计语言的先进性 D)程序易读性 (3)为了使模块尽可能独立,要求 A)模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强 B)模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱
2、 C)模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱 D)模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强 (4)需求分析阶段的任务是确定 A)软件开发方法 B)软件开发工具 C)软件开发费用 D)软件系统功能(5)算法的有穷性是指 A)算法程序的运行时间是有限的 B)算法程序所处理的数据量是有限的 C)算法程序的长度是有限的 D)算法只能被有限的用户运用 (6)对长度为n的线性表排序,在最坏状况下,比拟次数不是n(n-1)/2的排序方法是 A)快速排序 B)冒泡排序 C)干脆插入排序 D)堆排序 (7)假设进栈序列为e1,e2,e3,e4,则可能的出栈序列是 A)e3,e1,e4,
3、e2 B)e2,e4,e3,e1 C)e3,e4,e1,e2 D) 随意依次 (8)将E-R图转换到关系形式时,实体与联络都可以表示成 A)属性 B)关系 C)键 D)域(9)有三个关系R、S和T如下:RB C D a 0 k1 b 1 n1 SB C D f 3 h2 a 0 k1 n 2 x1 TBCDa0k1由关系R和S通过运算得到关系T,则所运用的运算为 A)并 B)自然连接 C)笛卡尔积 D)交(10)下列有关数据库的描绘,正确的是 A)数据处理是将信息转化为数据的过程 B)数据的物理独立性是指当数据的逻辑构造变更时,数据的存储构造不变 C)关系中的每一行称为元组,每一个列称为属性
4、D)假设一个关系中的属性或属性组并非该关系的关键字,但它是另一个关系的关键字,则称其为本关系的外关键字 (11)以下叙述中正确的是 A)用C程序实现的算法必需要有输入和输出操作 B)用C程序实现的算法可以没有输出但必需要有输入 C)用C程序实现的算法可以没有输入但必需要有输出 D)用C程序实现的算法可以既没有输入也没有输出 (12)下列可用于C语言用户标识符的一组是 A)void, define, WORD B)a3_3,_123,Car C)For, -abc, IF Case D)2a, DO, sizeof 标识符由数字、字母、下划线组成,开头不能为数字(13)以下选项中可作为C语言合法
5、常量的是 A)-80 B)-080 C)-8e1.0 D)-80.0e e后为整数(14)若有语句:char *line5;,以下叙述中正确的是 A) 定义line是一个数组,每个数组元素是一个基类型为char为指针变量 B) 定义line是一个指针变量,该变量可以指向一个长度为5的字符型数组 C) 定义line是一个指针数组,语句中的*号称为间址运算符 D) 定义line是一个指向字符型函数的指针 (15)以下定义语句中正确的是 A)int a=b=0; B)char A=65+1,b=b; C)float a=1,*b=&a,*c=&b; D)double a=00;b=1.1; (16)
6、有以下程序段 char ch; int k; ch=a;k=12; printf(%c,%d,ch,ch,k); printf(k=%d n,k);已知字符a的ASCII码值为97,则执行上述程序段后输出结果是 A)因变量类型与格式描绘符的类型不匹配输出无定值 B)输出项与格式描绘符个数不符,输出为零值或不定值 C)a,97,12k=12 D)a,97,k=12 (17)有以下程序 main() int i,s=1; for (i=1;i=2& c=2&c=2& cb)a=b; c=a; if(c!=a)c=b; printf(%d,%d,%dn,a,b,c); 其输出结果是 A)程序段有语法
7、错 B)3,5,3 C)3,5,5 D)3,5,7 (20)有以下程序 #include main() int x=1,y=0,a=0,b=0; switch(x) case 1: switch(y) case 0:a+; break; case 1:b+; break; case 2:a+; b+; break; case 3:a+; b+; printf(a=%d,b=%dn,a,b); 程序的运行结果是 A)a=1,b=0 B)a=2,b=2 C)a=1,b=1 D)a=2,b=1 (21)下列程序的输出结果是 #include stdio.h main() int i,a=0,b=0;
8、 for(i=1;i10;i+) if(i%2=0) a+; continue; b+; printf(a=%d,b=%d,a,b); A)a=4,b=4 B)a=4,b=5 C)a=5,b=4 D)a=5,b=5 (22)已知 #int t=0; while (t=1) . 则以下叙述正确的是 A)循环限制表达式的值为0 B)循环限制表达式的值为1 C)循环限制表达式不合法 D)以上说法都不对 (23)下面程序的输出结果是 main() int a10=1,2,3,4,5,6,7,8,9,10,*p=a; printf(%dn,*(p+2); A)3 B)4 C)1 D)2 (24)以下错误
9、的定义语句是 A)int x3=0,1,1,2,3; B)int x43=1,2,3,1,2,3,1,2,3,1,2,3; C)int x4=1,2,3,1,2,3,1,2,3,1,2,3; D)int x3=1,2,3,4; (25)有以下程序 void ss(char *s,char t) while(*s) if(*s=t)*s=t-a+A; s+; main() char str1100=abcddfefdbd,c=d; ss(str1,c); printf(%sn,str1); 程序运行后的输出结果是 A)ABCDDEFEDBD B)abcDDfefDbD C)abcAAfefAbA
10、 D)Abcddfefdbd (26)有如下程序 main() char ch25=6937,8254,*p2; int i,j,s=0; for(i=0;i2;i+)pi=chi; for(i=0;i0;j+=2)s=10*s+pij-0; printf(%dn,s); 该程序的输出结果是 A)69825 B)63825 C)6385 D)693825 (27)有定义语句:char s10;,若要从终端给s输入5个字符,错误的输入语句是 A)gets(&s0); B)scanf(%s,s+1); C)gets(s); D)scanf(%s,s1); (28)以下叙述中错误的是 A)在程序中但
11、凡以#开场的语句行都是预处理嘱咐行 B)预处理嘱咐行的最终不能以分号表示完毕 C)#define MAX 是合法的宏定义嘱咐行 D)C程序对预处理嘱咐行的处理是在程序执行的过程中进展的 (29)设有以下说明语句 typedef struct int n; char ch8; PER; 则下面叙述中正确的是 A)PER 是构造体变量名 B)PER是构造体类型名 C)typedef struct 是构造体类型 D)struct 是构造体类型名 (30)以下叙述中错误的是 A)gets函数用于从终端读入字符串 B)getchar函数用于从磁盘文件读入字符 C)fputs函数用于把字符串输出到文件 D
12、)fwrite函数用于以二进制形式输出数据到文件 (31)以下能正确定义一维数组的选项是 A)int a5=0,1,2,3,4,5; B)char a=0,1,2,3,4,5,0; C)char a=A,B,C; D)int a5=0123; (32)有以下程序 #include main() char p=a, b, c,q10= a, b, c; printf(%d%dn,strlen(p),strlen(q); 以下叙述中正确的是 A) 在给p和q数组置初值时,系统会自动添加字符串完毕符,故输出的长度都为3 B) 由于p数组中没有字符串完毕符,长度不能确定,但q数组中字符串长度为3 C)
13、 由于q数组中没有字符串完毕符,长度不能确定,但p数组中字符串长度为3 D) 由于p和q数组中都没有字符串完毕符,故长度都不能确定 (33)有以下程序 #include #include void fun(char *s,int n) char *t; int i,j; for(i=0;in-1;i+) for(j=i+1;jstrlen(sj) t=si;si:sj;sj=t; main() char *ss=bcc,bbcc,xy,aaaacc,aabcc; fun(ss,5); printf(%s,%sn,ss0,ss4); 程序的运行结果是 A)xy,aaaacc B)aaaacc,x
14、y C)bcc,aabcc D)aabcc,bcc (34)有以下程序 #include int f(int x) int y; if(x=0|x=1) return(3); y=x*x-f(x-2); return y; main() int z; z=f(3); printf(%dn,z); 程序的运行结果是 A)0 B)9 C)6 D)8 (35)下面程序段的运行结果是 char str=ABC,*p=str; printf(%dn,*(p+3); A)67 B)0 C)字符C的地址 D)字符C (36)若有以下定义: struct link int data; struct link
15、*next; a,b,c,*p,*q; 且变量a和b之间已有如下图所示的链表构造: 指针p指向变量a,q指向变量c。则可以把c插入到a和b 之间并形成新的链表的语句组是: A)a.next=c; c.next=b; B)p.next=q; q.next=p.next; C)p-next=&c; q-next=p-next; D)(*p).next=q; (*q).next=&b; (37)对于下述程序,在方式串分别承受wt和wb运行时,两次生成的文件TEST的长度分别是 #include void main() FILE *fp=fopen(TEST,); fputc(A,fp);fputc(
16、n,fp);fputc(B,fp);fputc(n,fp);fputc(C,fp); fclose(fp); A)7字节、7字节 B)7字节、5字节 C)5字节、7字节 D)5字节、5字节 (38)变量a中的数据用二进制表示的形式是01011101,变量b中的数据用二进制表示的形式是11110000。若要求将a的高4位取反,低4位不变,所要执行的运算是 A)ab B)a|b C)a&b D)a4(39)下面的程序段运行后,输出结果是 int i,j,x=0; static int a88; for(i=0;i3;i+) for(j=0;j3;j+) aij=2*i+j; for(i=0;i8;
17、i+) x+=aij; printf(%d,x); A)9 B)不确定值 C)0 D)18 (40)下列程序执行后的输出结果是 void func(int *a,int b) b0=*a+6; main() int a,b5; a=0; b0=3; func(&a,b); printf(%dn,b0); A)6 B)7 C)8 D)9 二、填空题请将每一个空的正确答案写在答题卡序号的横线上,答在试卷上不给分。(1)测试的目的是暴露错误,评价程序的牢靠性;而 【1】 的目的是觉察错误的位置并改正错误。(2)某二叉树中度为2的结点有18个,则该二叉树中有 【2】 个叶子结点。 (3)当循环队列非空
18、且队尾指针等于队头指针时,说明循环队列已满,不能进展入队运算。这种状况称为 【3】 。(4)在关系模型中,把数据看成一个二维表,每一个二维表称为一个 【4】 。 (5)在计算机软件系统的体系构造中,数据库管理系统位于用户和 【5】 之间。(6)以下程序的输出结果是 【6】 。 main() char c=z; printf(%c,c-25); (7)阅读下面语句,则程序的执行结果是 【7】 。 #include stdio.h main() int a=-1,b=1,k; if(+a0)&!(b-4) printf(%dn,i); break; printf(%dn,i+);(9)以下程序的定
19、义语句中,x1的初值是 【9】 ,程序运行后输出的内容是 【10】 。 #include main() int x=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,*p4,i; for(i=0;i4;i+) pi=&x2*i+1; printf(%d,pi0); printf(n);) (10)以下程序的输出结果是 【11】 。 #include void swap(int *a, int *b) int *t; t=a; a=b; b=t; main() int i=3,j=5,*p=&i,*q=&j; swap(p,q); printf(%d %dN,*p,*
20、q) (11)以下程序的输出结果是 【12】 。 main() char s=ABCD, *p; for(p=s+1; p=2&c=6)的整型变量c的值是2,3,4,5,6。当变量c的值不为2,4,6时,其值只能为3或5,所以表达式c!=3和c!=5中至少有一个为真,即不管c为何值,选项B中的表达式都为真。(19)B 【解析】 两个if语句的推断条件都不满意,程序只执行了c=a这条语句,所以变量c的值等于3,变量b的值没能变更,程序输出的结果为3,5,3。所以正确答案为B)。(20)D 【解析】 本题考察switch语句,首先,x=1符合条件case 1,执行switch(y)语句,y=0符合
21、case 0语句,执行a+并跳出switch(y)语句,此时a=1。因为case 1语句后面没有break语句,所以向后执行case 2语句,执行a+,b+,然后跳出switch(x),得a=2,b=1。(21)B 【解析】continue语句的作用是跳过本次循环体中余下尚未执行的语句,接着再一次进展循环条件的断定。当能被2整除时,a就会增1,之后执行continue语句,干脆执行到for循环体的结尾,进展i+,推断循环条件。(22)B 【解析】t=1是将t赋值为1,所以循环限制表达式的值为1。推断t是否等于1时,应用t=1,留意=与=的用法。(23)A 【解析】 在C语言中,数组元素是从0开
22、场的。指针变量p指向数组的首地址,(p+2)就会指向数组中的第3个元素。题目中要求输出的是元素的值。(24)C 【解析】 本题考察的是二维数组的定义和初始化方法。C语言中,在定义并初始化二维数组时,可以省略数组第一维的长度,但是不能省略第二维的长度。故选项C)错误。(25)B 【解析】 在内存中,字符数据以ASCII码存储,它的存储形式与整数的存储形式类似。C语言中,字符型数据和整型数据之间可以通用,也可以对字符型数据进展算术运算,此时相当于对它们的ASCII码进展算术运算,在本题中,s+相当于s=s+1,即让s指向数组中的下一个元素。(26)C 【解析】 该题略微难一点。主要要搞清晰以下几点
23、:定义了一个指针数组char *p2后,程序中第一个循环for(i=0;i0 是指pij中的字符只要不是字符串完毕标记0就接着循环,语句j+=2;是使下标j每次增加2,也即一个隔一个地从pi所指向的字符串中取出字符。经过上述解析后,不难看出,该程序首先从p0所指向的字符串6937中一个隔一个地取出字符,分别是6和3,然后从p1所指向的字符串8254中一个隔一个地取出字符,分别是8和5,同时经过转换和相加运算后,结果s中的值应当是6385。(27)D 【解析】 在格式输入中,要求给出的是变量的地址,而D)答案中给出的s1是一个值的表达式。(28)D 【解析】 C语言中的预处理嘱咐以符号#开头,这
24、些嘱咐是在程序编译之前进展处理的,选项D)的描绘错误。(29)B 【解析】 本题中,typedef声明新的类型名PER来代替已有的类型名,PER代表上面指定的一个构造体类型,此时,也可以用PER来定义变量。(30)B 【解析】 getchar函数的作用是从终端读入一个字符。(31)B 【解析】 选项A)中,定义的初值个数大于数组的长度;选项C)中,数组名后少了中括号;选项D)中,整型数组不能赐予字符串。(32)A 【解析】 在给p和q数组赋初值时,系统会自动添加字符串完毕符,从题目中可以看出数组p和q都有3个字符,所以长度均为3。(33)A 【解析】 函数fun(char *s,int n)的
25、功能是对字符串数组的元素根据字符串的长度从小到大排序。在主函数中执行fun(ss,5)语句后,*ss=xy, bcc, bbcc, aabcc, aaaacc,ss0,ss4的输出结果为xy,aaaacc。(34)C 【解析】 函数int f(int x)是一个递归函数调用,当x的值等于0或1时,函数值等于3,其他状况下y=x2-f(x-2),所以在主函数中执行语句z=f(3)时,y=3*3-f(3-2)=9-f(1)=9-3=6。(35)B 【解析】 考察指向字符串的指针变量。在该题中,指针变量p指向的应当是该字符串中的首地址,p+3指向的是字符串完毕标记0的地址,因此*(p+3)的值为0。
26、(36)D 【解析】 本题考察链表的数据构造,必需利用指针变量才能实现,即一个结点中应包含一个指针变量,用它存放下一结点的地址。(37)B 【解析】 以wt方式写入的是字符文件,转义字符n被看作两个字符来处理。而wb方式写入的是二进制文件,转义字符n是一个字符。(38)A 【解析】 本题考察的是位运算的学问,对于任何二进制数,和1进展异或运算会让其取反,而和0进展异或运算不会产生任何变更。(39)C 【解析】 本题主要考察的是用二维数组首地址和下标来引用二维数组元素的方法。通过分析可知,程序中的双重循环定义了一个如下的二维数组:0 1 22 3 44 5 6由于数组的下标是从0开场的,所以二维
27、数组元素aij表示的是二维数组a的第i+1行、第j+1列对应位置的元素。 (40)A 【解析】 函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针型。它的作用是将一个变量的地址传递到另一个函数中。当数组名作参数时,假设形参数组中的各元素的值发生变更,实参数组元素的值也将随之发生变更。二、选择题(1)【1】调试 【解析】 软件测试的目的是在细心限制的环境下执行程序,以觉察程序中的错误,给出程序牢靠性的鉴定;调试也称排错,它是一个与测试既有联络又有区分的概念。具体来说,测试的目的是暴露错误,评价程序的牢靠性,而调试的目的是觉察错误的位置,并改正错误。(2)【2】19 【解析】 在随意一棵二
28、叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个。(3)【3】 上溢 【解析】 入队运算是指在循环队列的队尾参加一个新元素。这个运算有两个根本操作:首先将队尾指针进一(即rear=rear+1),并当rear=m+1时,置rear=1;然后将新元素插入队尾指针指向的位置。当循环队列非空(s=1)且队尾指针等于队头指针时,说明循环队列已满,不能进展入队运算,这种状况称为上溢。(4)【4】 关系 【解析】 在关系模型中,把数据看成一个二维表,每一个二维表称为一个关系。表中的每一列称为一个属性,相当于记录中的一个数据项,对属性的命名称为属性名;表中的一行称为一个元组,相当于记录值。(5)【
29、5】 操作系统或OS 【解析】 数据库管理系统是数据库的机构,它是一种系统软件,负责数据库中的数据组织、数据操纵、数据维护、限制及疼惜和数据效劳。位于用户和操作系统之间。(6)【6】 a 【解析】 z的ASCII码值为122,经过c-25运算后,得97,以字符形式输出是a。(7)【7】 1,0 【解析】 与运算两边的语句必需同时为真时,结果才为真。当执行完if(+a0)&!(b-=0)时,a,b的值已经发生了变更。(8)【8】 1 3 5 【解析】 本题考察了for循环语句的运用,break语句用在本题中是完毕for循环干脆跳出循环体外。当i=1时,因为if语句条件不满意,所以干脆执行prin
30、tf(%dn,i+);输出1,同时i自加1;执行第二次for循环时,i=3;同样的if语句条件不满意,所以干脆执行printf(%dn,i+);输出3,同时i自加1;执行第三次for循环时,i=5,if语句条件满意,所以执行printf(%dn,i),输出5,然后break语句跳出了for循环。(9)【9】 2 【10】 2 4 6 8 【解析】 在主函数中根据整型数组x的定义可知,x1的初值等于2。在for循环语句中,当i=0时,p0=&x1,p00=2; 当i=1时,p1=&x3,p10=4;当i=2时,p2=&x5,p20=6;当i=3时,p3=&x7,p30=8,所以程序输出的结果为2
31、、4、6、8。(10)【11】 35 【解析】 函数swap(int *a,int *b)的功能是实现*a和*b中两个数据的交换,在主函数中调用swap(p,q)后,形参指针变量a和b分别指向i和j,在swap(int *a,int *b)执行完后,指针变量a和b分别指向j和i,而指针变量p,q所指向变量的值没有发生变更,所以输出结果为35。(11)【12】 BCD CD D 【解析】 本题考察指向字符串的指针的运算方法。指针变量p首先指向字符串中的第一个字符A,执行p=s+1后,p指向字符串中的第二个字符B,然后输出值BCD并换行,依次执行循环语句。(12)【13】 9 【解析】 本题考察函数的综合学问。首先,我们可以利用强迫转换类型转换运算符,将一个表达式转换成所需类型。如:(double)a是将a转换成double类型;(int)(x+y)是将x+y的值转换成整型。 本题可按部就班地逐步运算: fun(int)fun(a+c,b),a-c) fun(int)fun(10