1、2006 年 4 月全国计算机等级考试二级 C 语言笔试试卷及标准解析2006 年 4 月全国计算机等级考试二级 C 语言笔试试卷及标准解析一、选择题(1) 一(10) 每题 2 分,(11)一(50) 每题 1 分,共 60 分)下列各题 A)、 B)、C)、D) 四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。(1)下列选项中不属于结构化程序设计方法的是A)自顶向下 B)逐步求精C)模块化 D)可复用(2)两个或两个以上模块之间关联的紧密程度称为A)耦合度 B)内聚度C)复杂度 D)数据传输特性(3)下列叙述中正确的是A)软件测试应该由程序开发者来完
2、成B)程序经调试后一般不需要再测试C)软件维护只包括对程序代码的维护D)以上三种说法都不对(4)按照“后进先出”原则组织数据的数据结构是A)队列 B)栈C)双向链表 D)二叉树(5)下列叙述中正确的是A)线性链表是线性表的链式存储结构B)栈与队列是非线性结构C)双向链表是非线性结构D)只有根结点的二叉树是线性结构(6)对如下二叉树ABDECF进行后序遍历的结果为A)ABCDEFB)DBEAFCC)ABDECFD)DEBFCA(7)在深度为 7 的满二叉树中,叶子结点的个数为A)32B)31C)64D)63(8)“商品”与“顾客”两个实体集之间的联系一般是A)一对一 B)一对多C)多对一 D)多
3、对多(9)在 E-R 图中,用来表示实体的图形是A)矩形 B)椭圆形C)菱形 D)三角形(10)数据库 DB、数据库系统 DBS、数据库管理系统 DBMS 之间的关系是A)DB 包含 DBS 和 DBMSB)DBMS 包含 DB 和 DBSC)DBS 包含 DB 和 DBMSD)没有任何关系(11)以下不合法的用户标识符是A)j2_KEYB)DoubleC)4dD)_8_(12)以下不合法的数值常量是A)011B)1e1C)8.0E0.5D)0xabcd(13)以下不合法的字符常量是A) 018B) “ C)D)xcc(14)表达式 3.6-52+1.2+5 2 的值是A)4.3B)4.8C)
4、3.3 D)3.8(15)以下能正确定义字符串的语句是A)char str=064; B)char str=“kx43“;C)char str=“; D)char str=“0“;(16)以下数组定义中错误的是A)int x 3=0;B)int x2 3=l,2,3,4,5 ,6;C)int x 3=l,2,3, 4,5,6;D)int x2 3=l,2,3,4,5,6;(17)若要求从键盘读入含有空格字符的字符串,应使用函数A)getc()B)gets()C)getchar()D)scanf()(18)以下四个程序中,完全正确的是A)#include B)#include main();ma
5、in()/*programming*/*/ programming /*/printf(“programming!n“); printf(“programming!n“);C) #include D) include main()main()/*/*programming*/*/*programming*/printf(“programming!n“); printf(“programming!n“);(19)若有定义:float x=1.5;int a=1,b=3,c=2;则正确的 switch 语句是A)switch(x)B)switch(int)x);case 1.0:printf(“*
6、 n“); case 1:printf(“*n“);case 2.0:printf(“*n“); case 2:printf(“*n“); C)switch(a+b) D)switch(a+b)case 1: printf(“*n“);case 1:printf(“*n“);case 2+1:printf(“*n“);case c:printf(“*n“);(20)若各选项中所用变量已正确定义,函数 fun 中通过 return 语句返回一个函数值,以下选项中错误的程序是A)main()B)float fun(int a,int b) x=fun(2,10);main()float fun(i
7、nt a, int b) x=fun(i,j);C)float fun(int,int); D)main()main() float fun(int i,int j) ;x=fun(2,10); x=fun(i,j); float fun(int a, int b)float fun(int a,int b) (21)在以下给出的表达式中,与 while(E)中的(E)不等价的表达式是A)(!E=0)B)(E0Enext=r-next;p-next=r;r-next=q;B)p-next=r;q-next=r-next;r-next=q;C)q-next=r-next;r-next=q;p-n
8、ext=r;D)r-next=q;p-next=r;q-next=r-next;(26)有以下程序段struct stint x;int *y;)*pt;int a=l,2,b=3,4 ;struct st c2=10 ,a,20,b;pt=c;以下选项中表达式的值为 11 的是A)*pt-yB)pt-x C)+pt-x D)(pt+)-x(27)设 fp 为指向某二进制文件的指针,且已读到此文件末尾,则函数 feof(fp)的返回值为A)EOFB)非 0 值C)0 D)NULL(28)设有以下语句int a=1,b=2,c;c=a(bmain()char c1,c2,c3 ,c4 ,c5,c
9、6;scanf(“cccc“,printf(“d,d,d,dn“,a,b,c,d);程序输出A)0,1 ,2,0B)0,0 ,0,3C)1,1,2,0D)编译有错(32)有以下程序main()int i,j,x=0 ;for(i=0; imain()FILE *fp;char *s1=“Fortran“,*s2=“Basic“;if(fp=fopen(“test.txt“,“wb”)=NULL)printf(“Cant open test.txt filen“) ;exit(1);fwrite(s1,7,1,fp); /*把从地址 s1 开始的 7 个字符写到 fp 所指文件中*fseek(f
10、p,0L , SEEK_SET); *文件位置指针移到文件开头*fwrite(s2,5,1,fp);fclose(fp);A)BasicanB)BasicFortranC)Basic D)FortranBasic(44)以下叙述中错误的是A)C 语言源程序经编译后生成后缀为 .obj 的目标程序B)C 程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件C)用 C 语言编写的程序称为源程序,它以 ASCII 代码形式存放在一个文本文件中D)C 语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令(45)以下叙述中错误的是A)算法正确的程序最终一定会结束B)算法正确
11、的程序可以有零个输出C)算法正确的程序可以有零个输入D)算法正确的程序对于相同的输入一定有相同的结果(46)以下叙述中错误的是A)C 程序必须由一个或一个以上的函数组成B)函数调用可以作为一个独立的语句存在C)若函数有返回值,必须通过 return 语句返回D)函数形参的值也可以传回给对应的实参(47)设有以下定义和语句char str20=“Program“,*p ;p=str;则以下叙述中正确的是A)*p 与 str0的值相等B)str 与 p 的类型完全相同C)str 数组长度和 p 所指向的字符串长度相等D)数组 str 中存放的内容和指针变量 p 中存放的内容相同(48)以下叙述中错
12、误的是A)C 程序中的#include 和#define 行均不是 C 语句B)除逗号运算符外,赋值运算符的优先级最低C)C 程序中,j+;是赋值语句D)C 程序中,+、-、*、号是算术运算符,可用于整型和实型数的运算(49)以下叙述中正确的是A)预处理命令行必须位于 C 源程序的起始位置B)在 C 语言中,预处理命令行都以 “#“开头C)每个 C 程序必须在开头包含预处理命令行: #includeD)C 语言的预处理不能实现宏定义和条件编译的功能(50)以下叙述中错误的是A)可以通过 typedef 增加新的类型B)可以用 typedef 将已存在的类型用一个新的名字来代表C)用 typed
13、ef 定义新的类型名后,原有类型名仍有效D)用 typedef 可以为各种类型起别名,但不能为变量起别名二、填空题(每空 2 分,共 40 分)请将每一个空的正确答案写在答题卡【1】至【20】序号的横线上,答在试卷上不得分。(1)对长度为 10 的线性表进行冒泡排序,最坏情况下需要比较的次数为 【1】 。(2)在面向对象方法中, 【2】描述的是具有相似属性与操作的一组对象。(3)在关系模型中,把数据看成是二维表,每一个二维表称为一个【3】 。(4)程序测试分为静态分析和动态测试。其中【4】是指不执行程序,而只是对程序文本进行检查,通过阅读和讨论,分析和发现程序中的错误。(5)数据独立性分为逻辑
14、独立性与物理独立性。当数据的存储结构改变时,其逻辑结构可以不变,因此,基于逻辑结构的应用程序不必修改,称为【5】 。(6)若变量 a,b 已定义为 int 类型并赋值 21 和 55,要求用 printf 函数以 a=21,b=55 的形式输出,请写出完整的的输出语句【6】 。(7)以下程序用于判断 a、b、c 能否构成三角形,若能,输出 YES,否则输出 NO。当给a、b、c 输入三角形三条边长时,确定 a、b、c 能构成三角形的条件是需同时满足三个条件:a+bc,a+cb ,b+ca 。请填空。main()float a,b,c;scanf(“f ff“, scanf(“%lf”,p)表示
15、用键盘输入的数给变量 p 地址中。(25)D)解析:r-next=q,这时 r 指向的节点为 q; p-next=r, 这时 p 指向的节点为 r; q-next=r-next,因为 r 节点已经指向 q,所以执行这个语句后 q 又指向 q,所以不对。(26)C)解析:-的运算优先级比 +高,此时,pt-=10,执行自加运算后为 11。(27)B)解析:函数 feof 的功能是:测试 fp 所指的文件的位置是否已达到文件尾,如果达到文件尾,则函数返回非 0 值,否则返回 0,表示文件尚未结束。(28)D)解析:为按位异或运算符; 只是其中的一个文件,并不说每次预处理命令都用此文件。(50)A)
16、解析:关键字 typedef 的作用只是将 C 语言中的已有的数据类型作了置换,并不是增加新的类型。二、填空题(1) 【1】45解析:对长度 n 为 10 的线性表进行冒泡排序,最坏情况下需要比较的次数为 n(n-1)/2=5945。(2) 【2】类解析:在面向对象方法中, 类(class) 描述的是具有相似属性与操作的一组对象,而一个具体对象则是其对应类的一个实例(Instance)。(3) 【3】关系解析:在关系模型中,把数据看成是二维表,每一个二维表称为一个关系 。(4) 【4】静态分析(静态测试)解析:原则上讲,可以将软件测试方法分为两大类,即静态测试和动态测试。静态测试无须执行被测代
17、码,而是借助专用的软件测试工具评审软件文档或程序,度量程序静态复杂度,检查软件是否符合编程标准,借以发现编写的程序的不足之处,减少错误出现的概率。动态测试,是使被测代码在相对真实环境下运行,从多角度观察程序运行时能体现的功能、逻辑、行为、结构等的行为,以发现其中的错误现象。程序测试分为静态测试和动态测试。静态测试一般是指人工评审软件文档或程序,借以发现其中的错误。由于被评审的文档或程序不必运行,所以称为静态测试。(5) 【5】物理独立性解析:当数据的存储结构改变时,其逻辑结构可以不变,因此,基于逻辑结构的应用程序不必修改,称为物理独立性。当数据库总体逻辑结构改变,不需要修改应用程序,这是数据的
18、逻辑独立性。(6) 【6】printf(“a=%d,b=%d” ,a,b);解析:printf 是格式化输出函数。(7) 【7】(a+bc)&(a+cb)&(b+ca)解析:三角形的条件是两边之和大于第三边。要用“& ”指令连接三个条件,表示三个条件都要满足。(8) 【8】30解析:程序运行后的结果是 a0 0+a0 2+a1 1+a1 1+a2 2+a2 0=1+9+4+4+7+5=30(9) 【9】a*b*c*d*解析:在子程序中,如果条件成立,则执行下面的语句,如果不成立,跳过。最后的输出结果是 a*b*c*d*。(10) 【10】11解析:此题涉及函数的调用和 if 语句。程序先执行第二个 if 语句,然后在执行第一个 if 语句,最后用 return 返回数值。(11) 【11】!knahT解析:此程序是一道次序颠倒题,即输入“Thank!”,则输出 “!knahT”。(12) 【12】p+n解析:n+ 到一定数值,就找到所指的字符,返回 c 的地址。(13) 【13】inext解析:NULL 的 ASCII 码的值和0的 ASCII 码的值相等,条件到 NULL 停止循环。把下一个节点的地址赋给 p,这样循环