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.软件测试应该由程序开发者来完成
B.程序经调试后一般不需要再测试
C.软件维护只包括对程序代码的维护
D.以上三种说法都不对
(4)按照“后进先出”原则组织数据的数据结构是
A.队列
B.栈
C.双向链表
D.二叉树
(5)下列叙述中正确的是
A.线性链表是线性表的链式存储结构
B.栈与队列是非线性结构
1
C.双向链表是非线性结构
D.只有根结点的二叉树是线性结构
(6)对如下二叉树
ABDECF
进行后序遍历的结果为
A.ABCDEF
B.DBEAFC
C.ABDECF
D.DEBFCA
(7)在深度为 7 的满二叉树中,叶子结点的个数为
A.32
B.31
C.64
D.63
(8)“商品”与“顾客”两个实体集之间的联系一般是
A.一对一
B.一对多
C.多对一
D.多对多
(9)在 E-R 图中,用来表示实体的图形是
A.矩形
B.椭圆形
2
C.菱形
D.三角形
(10)数据库 DB、数据库系统 DBS、数据库管理系统 DBMS 之间的关系是
A.DB 包含 DBS 和 DBMS
B.DBMS 包含 DB 和 DBS
C.DBS 包含 DB 和 DBMS
D.没有任何关系
(11)以下不合法的用户标识符是
A.j2_KEY
B.Double
C.4d
D._8_
(12)以下不合法的数值常量是
A.011
B.1e1
C.8.0E0.5
D.0xabcd
(13)以下不合法的字符常量是
A.′\018′
B.′\"′
C.′\\′
D.′\xcc′
(14)表达式 3.6-5/2+1.2+5%2 的值是
A.4.3
B.4.8
C.3.3
D.3.8
3
(15)以下能正确定义字符串的语句是
A.char str[]={′\064′};
B.char str="kx43";
C.char str=";
D.char str[]="\0";
(16)以下数组定义中错误的是
A.int x[][3]={0};
B.int x[2][3]={{l,2},{3,4},{5,6}};
C.int x[][3]={{l,2,3},{4,5,6}};
D.int x[2][3]={l,2,3,4,5,6};
(17)若要求从键盘读入含有空格字符的字符串,应使用函数
A.getc()
B.gets()
C.getchar()
D.scanf()
(18)以下四个程序中,完全正确的是
A.#include
B.#include
main();main()
{/*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)
4
B.switch((int)x);
{case 1.0:printf("*\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(int 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.(E>0‖E<0)
5
C.(E==0)
D.(E!=0)
(22)要求通过 while 循环不断读入字符,当读入字母 N 时结束循环。若变量已正确定义,以
下正确的程序段是
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.while((ch=getchar())==′N′)printf("%c",ch);
(23)已定义以下函数
int fun(int *p)
{return *p;)
fun 函数返回值是
A.不确定的值
B.一个整数
C.形参 P 中存放的值
D.形参 P 的地址值
(24)若有说明语句:double *p,a;则能通过 scanf 语句正确给输入项读入数据的程序段是
A.*p=&a; scanf("%1f",p);
B.*p=&a; scanf("%f",p);
C.p=&a; scanf("%1f",*p);
D.p=&a; scanf("%1f",p);
(25)现有以下结构体说明和变量定义,如图所示,指针 p、q、r 分别指向一个链表中连续的
三个结点。
struct node
{char data;
struct node *next; }*p,*q,*r;
现要将 q 和 r 所指结点交换前后位置,同时要保持链表的连续,以下不能完成此操作的语句
是
6
A.q->next=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->next=r;
D.r->next=q;p->next=r;q->next=r->next;
(26)有以下程序段
struct st
{int x;int *y;}*pt;
int a[]={l,2},b[]={3,4};
struct st c[2]={10,a,20,b};
pt=c;
以下选项中表达式的值为 11 的是
A.*pt->y
B.pt->x
C.++pt->x
D.(pt++)->x
(27)设 fp 为指向某二进制文件的指针,且已读到此文件末尾,则函数 feof(fp)的返回值为
A.EOF
B.非 0 值
C.0
D.NULL
(28)设有以下语句
int a=1,b=2,c;
c=a^(b<<2);
执行后,C 的值为
A.6
B.7
C.8
D.9
7
(29)有以下程序
#include
main()
{char c1,c2,c3,c4,c5,c6;
scanf("%c%c%c%c",&c1,&c2,&c3,&c4);
c5=getchar(); c6=getchar();
putchar(c1);putchar(c2);
printf("%c%c\n",c5,c6);
}
程序运行后,若从键盘输入(从第 1 列开始)
123<回车>
45678<回车>
则输出结果是
A.1267
B.1256
C.1278
D.1245
(30)有以下程序
main()
{int y=10;
while(y--);printf("y=%d\n",y);
}
程序执行后的输出结果是
A.y=0
B.y=-1
C.y=1
D.while 构成无限循环
8