1、2012年 3月国家二级( C语言)笔试真题试卷及答案与解析 1 下列叙述中正确的足 ( A)循环队列是队列的一种链式存储结构 ( B)循环队列是队列的一种顺序存储结构 ( C)循环队列是非线性结构 ( D)循环队列是一种逻辑结构 2 下列叙述中工正确的是 ( A)栈是一种先进先出的线性表 ( B)队列是一种后进先出的线性表 ( C)栈与队列都是非线性结构 ( D)以上三种说法都不对 3 一棵二又树共有 25个结点 ,其中 5个是叶子结点 ,则度为 1的结点数为 ( A) 16 ( B) 10 ( C) 6 ( D) 4 4 在下列模式中 ,能够给出数据库物理存储结构与物理存取方法的是 ( A
2、)外模式 ( B)内模式 ( C)概念模式 ( D)逻辑模式 5 在满足实体完整性约束的条件下 ( A)一个关系中应该有一个或多个候选关键字 ( B)一个关系中只能有一个候选关键字 ( C)一个关系中必须有多个候选关键字 ( D)一个关系中可以没有候选关键字 6 有三个关系 R?S和 T如下 : 则由关系 R和 S得到关系 T的操作是 ( A)自然连接 ( B)并 ( C)交 ( D)差 7 软件生命周期中的活动不包括 ( A) 市场调研 ( B)需求分析 ( C)软件测试 ( D)软件维护 8 下面不属于需求分析阶段任务的是 ( A)确定软件系统的功能需求 ( B)确定软件系统的性能需求 (
3、 C)需求规格说明书评审 ( D)制定软件集成测试计划 9 在黑盒测试方法中 ,设计测试用例的主要根据是 ( A)程序内部逻辑 ( B)程序外部功能 ( C)程序数据结构 ( D)程序流程图 10 在软件设计中不适用的工具是 ( A)系统结构图 ( B) PAD图 ( C)数据流图 (DFD图 ) ( D)程序流程图 11 针对简单程 序设计 ,以下叙述的实施步骤顺序正确的是 ( A)编码 ?确定算法和数据结构 ?调试 ?整理文档 ( B)确定算法和数据结构 ?编码 ?调试 ?整理文档 ( C)整理文档 ?确定算法和数据结构 ?编码 ?调试 ( D)确定算法和数据结构 ?调试 ?编码 ?整理文
4、档 12 关于 C语言中数的表示 ,以下叙述中正确的是 ( A)只要在允许范围内整型数和实型数都能精确的表示 ( B)只有整型数在允许范围内能精确无误的表示 ,实型数会有误差 ( C)只有实型数在允许范围内能精确无误的表示 ,整型数会有误差 ( D)只有用八进制表示的数才不会有误 差 13 以下关于算法的叙述中错误的是 ( A)算法可以用伪代码 ?流程图等多种形式来描述 ( B)用流程图描述的算法可以用任何一种计算机高级语言编写成程序代码 ( C)一个正确的算法必须有输入 ( D)一个正确的算法必须有输出 14 以下叙述中错误的是 ( A)一个 C程序中可以包含多个不同名的函数 ( B)一个
5、C程序只能有一个主函数 ( C) C程序的主函数必须用 maim作为函数名 ( D) C程序在书写时 ,有严格的缩进要求 ,否则不能编译通过 15 设有以下语句 char ch1,ch2;scanf(“%c%c”, 若要为变量 ch1和 ch2分别输入字符 A和 B,正确的输入形式应该是 ( A) A和 B之间不能有任何间隔符 ( B) A和 B之间用空格间隔 ( C) A和 B之间可以用回车间隔 ( D) A和 B之间用逗号间隔 16 以下选项中非法的字符常量是 ( A) 019 ( B) 65 ( C) x ( D) 101 17 有以下程序 #include main() int a=0
6、,b=0,c=0; c=(a.=a-5);(a=b,b+=4); princf(“%d,%d,%d/n”,a,b,c); 程序运行后的输出结果是 ( A) 4.4.5 ( B) 4,4,4 ( C) 0,4,5 ( D) 0,0,0 18 设变量均已正确定义并赋值 ,以下与其他三组输出结果不同的一组语句是 ( A) x+;printf(“%dn”,x); ( B) +x;printf(“%dn”,x); ( C) n=x+;printf(“%dn”,n); ( D) n=+x;printf(“%dn”,n); 19 以下选项中 ,能表示逻辑值 “假 ”的是 ( A) 1 ( B) 0.0000
7、01 ( C) 100 ( D) 0 20 有以下程序 #include main() int a; scanf(“%d”, if(a+,则输出结果是 ( A) 11 ( B) 10 ( C) 9 ( D) 8 21 有以下程序 #include main() int s=0,n; for(n=0;n main() chara,b,c; b=1;c=A; for(a=0;a #defineN 5 void fun(int x【 N】 ) imm; for(m=N-1;m0;m-)scanf(“%d”,_); ( A) x+m ( B) k=1,m=8; p1= a=/*p1-m:b=*p1+*
8、p2+6; printf(“%d”,a);printf(“%dn”,b); 编译时编译器提示错误信息 ,你认为出错的语句是 ( A) b=*p1+*p2+6; ( B) a=/*p1-m; ( C) k=1,m=8; ( D) p1= 28 以下选项中有语法错误的是 ( A) char str310;str1=“guest”: ( B) char str【 10】 =“guest”); ( C) char str3;str1=“guest”: ( D) char str=“tguest”); 29 avg函数的功能是求整型数组中的前若干个元素的平均值 ,设数组元素个数最多不超过 10,则下列函
9、数说明语句错误的是 ( A) int avg(int*a,intn); ( B) int avg(int a10,int n); ( C) int avg(inta,int n); ( D) int avg(int a,int n); 30 有以下程序 #include #include main() printf(“%dn”,strlen(“ATSn0121”); 程序运行后的输出结果是 ( A) 3 ( B) 4 ( C) 8 ( D) 9 31 有以下程序 #include main() char a20,b20,c20; scanf(“%s%s”,a,b); gets(c); prin
10、tf(“%s%s%sn”,a,b,c); 程序运行时从第一列开始输入 :This is a cat! 则输出结果是 ( A) Thisisacat! ( B) Thisis a ( C) Thisisa cat ( D) Thisis a cat! 32 有以下程序 #include void fun(char C) if(cx)fun(c-1); printf(“%c”,c); main() fun(z); 程序运行后的输出结果是 ( A) wxyz ( B) xyz ( C) ZyNW ( D) zyx 33 有以下程序 #include voidfunc(int n) inti; for
11、(i=0;i void fun(int*S) smtic intj=0; dosj=sj+sj+1;while(+j #define S(x)(x)*x2 main() intk=5,j=2; printf(“%d,”,S(k+j);printf(“%d n”,S(k-j); 程序运行后的输出结果是 ( A) 98,18 ( B) 39,11 ( C) 98,11 ( D) 39,18 36 有以下程序 #include void exch(int t) t0=t5; main() int x10=1,2,3,4,5,6,7,8,9,10,i=0; while(icolor ( C) (*pt
12、r).color ( D) std-color 38 有以下程序 #include stmct stu int num;char name10;int age; voidfun(struct stu*p) printf(“%sn”,P-name);) main() struct stu x3=01,“Zhang”,20,02,“Wang”,19),03,“Zhao”,18); fun(x+2); 程序运行后的输出结果 是 ( A) Zhang ( B) Wang ( C) Zhao ( D) 19 39 有以下程序 #include main() int a=12,c; c=(a main()
13、 int a=37; a+=a%=9;printf(“%dn”,a); 48 设 a、 b、 c都是整型变量 ,如果 a的值为 1,b的值为 2,则执行 c=a+ b+;语句后变量 b的值是【 】。 49 有以下程序段 s=1.0: for(k=1;k main() char a,b; for(a=0;a main() char*ch4=“red”,“green”,“blue”; inti=0; while(chi) putchar(chi0);i+; 52 有以下程序 #include main() int arr=1,3,5,7,2,4,6,8,i,start; scanf(“%d” fo
14、r(i=0;i,则输出结果为【 】。 53 以下程序的功能是输出 a数组中所有字符串 ,请填空。 #include main() char*a=“ABC”,“DEFGH”,“IJ”,“KLMNOP”; inti=0: for(;i #inculde #inculde main() char*P,*q,*r; P=q=r=(char*)malloc(sizeof(char)*20): strcpy(p,“attaboy,welcome!”); printf(“%c%c%cn”,p11,q3,r4); free(p); 55 设文件 test.txt中原已写入字符串 Begin,执行以下程序后 ,
15、文件中的内容为【 】。 #include main() FILE*fp; fp=fopen(“test.txt”,“w+”); fputs(“test”,fp); fclose(fp); 2012年 3月国家二级( C语言)笔试真题试卷答案与解析 1 【正确答案】 B 【试题解析】 本题主要考查循环队列的概念 ,循环队列作为队列的一种也应该是线性结构。队列是一种逻辑结构 ,而循环队列是一种顺序存储结构的队列。 2 【正确答案】 D 【试题解析】 栈是先进后出的线性表 ,队列是先进先出的线性表 ,二者均为线性结构。 3 【正确答案】 A 【试题解析】 根据二叉树的性质 ,在任意二叉树中 ,度为
16、O的结点 (即叶子结点 )总是比度为 2的结点多一个 ,故此度为 l的结点个数 =总结点数一叶 子节点数一度为 2的节点数。 4 【正确答案】 B 【试题解析】 数据库有三层模式结构 ,逻辑模式是数据的全局逻辑结构的描述 ,外模式也称为子模式 ,是局部数据的逻辑结构描述 ,而内模式也称为存储模式 ,是数据库物理存储结构和存取方法的描述。 5 【正确答案】 A 【试题解析】 在关系数据库中 ,实体完整性的概念是主属性不能为空。在满足实体完整性的前提下 ,必须在关系中存在主属性 ,也就是在关系中应该有候选关键字。一个关系中可以有一个或者多个候选关键字。 6 【正确答案】 D 【试题解析】 由 关系
17、 T中的数据可以看出 ,其数据由属于关系 R但是不属于关系s的数据组成。所以关系 T是由关系 R和 s通过差运算得到的。 7 【正确答案】 A 【试题解析】 软件的生命周期描述了软件从产生到最终消亡的全过程 ,生命周期中的活动包括需求分析 ?软件设计 (分为概要设计和详细设计 )?软件实现 ?软件测试和软件维护 ,不包括市场调研。 8 【正确答案】 D 【试题解析】 在软件开发的过程中 ,应该尽早的制定测试计划 ,其中在需求分析阶段制定系统测试计划 ,在概要设计阶段制定集成测试计划 ,在详细设计阶段制定单元测试计划 。 9 【正确答案】 B 【试题解析】 黑盒测试法指的是根据程序的外部功能 ,
18、把程序本身看成一个黑盒子 ,设计测试用例来验证程序外部功能的正确性。 10 【正确答案】 C 【试题解析】 在软件开发的各个阶段经常会使用到一些图形工具 ,如在需求分析阶段使用数据流图 ,在概要设计阶段使用系统结构图 ,在详细设计阶段使用程序流程图 ?N-S图或者 PAD图等。 11 【正确答案】 B 【试题解析】 根据软件工程方法将软件生存周期分为软件定义 ?软件开发 ?运行维护三个时期。针对简单的程序 ,可以直接进入软件开发时期 ,即对软件进行结构设计 ,定义接口 ,定义数据结构 ;接着对每个模块进行设计 ?编码 ?测试 ;最后检查软件文档和代码是否齐全 ,整理维护职责 ,整理文档等。 1
19、2 【正确答案】 B 【试题解析】 在 C语言中 ,整型数值是以补码表示的。正整数的补码与原码相同 ,负数的补码是将该数的绝对值的 =进制形式按位取反再加 1。这样 ,在整型数的允许范围内能够精确的表示整数。与整型数据的存储方式不同 ,浮点型数据是按照指数形式存放的。系统把一个浮点型数据分成小数部分和指数部分 ,分别存放。由于浮点型数据是由有限 的存储单元组成的 ,因此能提供的有效数字总是有限的 ,在有效数字以外的数字将被舍去 ,由此可能会产生一些误差。 13 【正确答案】 C 【试题解析】 算法即计算机解决问题的方法和步骤。可以使用不同的方法表示 :自然语言 ?传统流程图 ?结构化流程图 ?
20、伪代码 ?PAD图等。每一种方法表示的算法都可以使用计算机语言来描述 ,如使用流程图描述的算法可以使用 C语言 ?java语言等各种语言编写成程序代码。一个算法有其特性 :有穷性 ?确定性 ?有零个或多个输入 ?有一个或多个输出 ?有效性。 14 【正确答案】 D 【试题解析】 本题考查的是 C语言程序的组成。 C语言程序是由一个或多个函数组成的 ,其中有且只有一个主函数 main()函数。故选项 A?B?c 正确。遵守严格的编程规范 ,注意缩进的 C语言程序具有更好的可维护性 ,但如果不遵守编程规范 ,也不会影响 C语言程序的编译。 15 【正确答案】 A 【试题解析】 本题考查的是字符型变
21、量的输入 ,两个字符型变量的连续输入不应该用其他字符间隔。选项 B给字符变量 chl和 ch2分别赋值 A和空格 ;选项 C给字符变量 ch1和 ch2分别赋值 A和回车 ;选项 D给字符变量 ch1和 ch2分别赋值 A和逗号。 16 【正确答案】 A 【试题解析】 本题考查的是转义字符。 ddd指 1到 3位八进制数所代表的字符 ,xhh指 1到 2位十六进制数所代表的字符。选项 A中 9不足正确的八进制数字。 17 【正确答案】 C 【试题解析】 本题考查的是运算符及其优先级。括号的优先级最高 ,先计算 (a-=a-5),赋值运算符的优先级低于算术运算符的优先级 ,故本算式相当于 a=a
22、-(a_5),a为 5;因此 ,c为 5。 (a=b,b+=4);是一个逗号运算 ,先计算第一个表达式的值 a为 0,再计算第二个表达式的值 b=b+4,b为 4。 18 【正确答案】 C 【试题解析】 “x+”表示先执行程序 ,再令 x的值加 1;而 “+x”表示令 x的值加 1,再执行程序。假设 x的初值为 9。选项 A中 x的计算结果为 10;选项 B中 x的计算结果为 10;选项 D中 ,n=+x,是执行 +x,后给变量 n赋值 ,n的计算结果为 10;选项 C中 ,n=x+,是先引用 x的值给变量 n赋值 ,然后再执行 x+运算 ,因此 ,n的计算结果为9,x的计算结果为 10,程序
23、输出结果与其他选项不同。 19 【正确答案】 D 【试 题解析】 在 C语言中 ,使用 0表示逻辑值假 ,使用非零数字表示逻辑值为真。 20 【正确答案】 B 【试题解析】 本题考查的是 ifelse 选择结构和变量自加 ?自减运算。从键盘输入 9回车后 ,a的值为 9,if语句中 ,先判断 a成员名。 38 【正确答案】 C 【试题解析】 本题考查结构体变量成员的引用 ,x+2指向结构体数组 x2,在 fun函数中输出其 name成员 ,即 “zhao”。 39 【正确答案】 A 【试题解析】 本题考查位元算中的左移运算 ,将一个数的各二进制位全部左移若干位。 A的二进制数为 “000011
24、00”,小括号的优先级最高 ,a2为二进制数“00110000”,然后在左移 1位 ,为二进制数 “01100000”,其十进制数为 96。 40 【正确答案】 C 【试题解析】 fwrite函数的功能是将一组数据写到磁盘文件上 ;fpute函数的功能是把一个字符写到磁盘文件上 ;fprintf函数的功能是格式化向磁盘文件写数据 :ftell函数的作用是得到流式文件中的当前位置。 41 【正确答案】 n-1 【试题解析】 在长度为 n的顺序线性表中删除一个元素 ,后面的元素要依次前移 ,最坏情况下也就是删除第一个元素 ,后面的 n-1个元素都需要移动。 42 【正确答案】 29 【试题解析】
25、循环队列的元素个数计算公式为 (rear-front+30)Mod 30。 43 【正确答案】 数据操纵语言 或 DML 【试题解析】 数据库管理系统是数据库的结构 ,它需要提供数据定义语言 DDL用于实现数据的定义 ;数据操纵语 言 DML用于实现对数据的增加 ?删除 ?修改和查询 ;数据控制语言 DcL用于实现访问权限的控制等。 44 【正确答案】 关系 【试题解析】 将 E-R图转换为关系模式时 ,实体和联系都可以表示为关系。 45 【正确答案】 面向对象方法 【试题解析】 数据流图 ?系统结构图等概念属于结构化方法 ,而类 ?对象 ?继承 ?封装 ?多态等概念属于面向对象方法。 46
26、【正确答案】 a=1,b=2 【试题解析】 本题考查 scanf函数格式化输入方法 ,如果在 “格式控制 ”字符串中除了格式说明以外还有其他字符 ,则 在输入数据时在对应位置应输入与这些字符相同的字符 ,所以本题应该写 a=1,b-2。 47 【正确答案】 2 【试题解析】 本题考查运算符的优先级。其中 “%”的优先级最高 ,“=”的优先级最低 ,根据赋值运算的右结合性 ,运算表达式可以整理为 :a=a+(a=a%9);,计算结果 a为2。 48 【正确答案】 2 【试题解析】 本题考查运算符的优先级 ,其中赋值运算符的优先级低于逻辑或 (11)的优先级 ,先执行 a+ b+,逻辑或 ( )运
27、算先判断第一个表达式 a+为 1(即逻辑真 ),则不再执行第二个表 达式 b+,所以 b的值没有改变 ,仍为 2。 49 【正确答案】 k=n 【试题解析】 该题考核 for循环和 while循环的循环条件 ,for的三个条件表达式分别为循环变量 k赋初值 ,循环条件中循环变量自增 1;对应到 while循环中 ,循环变量 k赋初值在 while循环之前 ,循环条件 k=n应该写在 while之后的括号中 ,在while循环体中实现循环变量 k自增 1。 50 【正确答案】 3 5 【试题解析】 本题考查 for循环语句和字符变量 ,当 a=0时 ,字符变量参与运算 ,先转换为其 ASCII整
28、型数据 ,然后再与整数进行运算 ,b=a%10=48,即字符 0,所以输出字符 “0”;依次类推 ,当 a=7时 ,输出字符 “7”;当 a=14时 ,输出字符 “4”;当 a=21时 ,循环终止。 51 【正确答案】 rgb 【试题解析】 本题考查指向数组的指针 ,ch是一个指针数组 ,每个元素都是一个指向字符串的指针 ,其中 ch0指向字符串 “red”,ch1指向字符串 “green”,ch2指向字符串 “blue”;在 While循环中 ,输出每个元素中字符串的第 0个元素 ,所以运算结果为rgb。 52 【正确答案】 572 【试题解析】 此题考查的是一维数组元素的引用 ,start
29、=10,当 i=0时 ,州(10+0)%8=arr【 2】 =5;当 i=1时 ,州 (10+1)%8=arr【 3】 =7;当 i=2时 ,arr(10+2)%8=arr【 4】 =2;当 i=3时 ,循环终止。 53 【正确答案】 ai或者 a+i 【试题解析】 本题考查的是指针数组 ,指针数组的每一个元素都是一个指向字符串的指针 ,要输出所有的字符串 ,只需要找到指向字符串的指针即可 ,即为 ai或者a+i。 54 【正确答案】 cab 【 试题解析】 本题考查指向字符串的指针 ,p?q?r三个指向字符串的指针 ,通过malloc分配空间函数指向同一个 20个长度的字符串 ,通过 strcpy函数为 p字符串赋值 ,则 q和 r也指向该字符串 ,所以 p11?q3?r4分别为 c?a?b。 55 【正确答案】 test 【试题解析】 本题考查的是 C语言中的文件操作 ,其中文件使用方式 “w+”(读写 )指的是为读写建立一个新的文本文件 ,所以在本题中 ,新建立的 test文本文件会覆盖原先的 test文件成为一个新文件 ,并写入 “test”。