2008 年 9 月全国计算机二级 C 语言考试真题及答案
(考试时间 90 分钟,满分 100 分)
一、选择题
下列各题 A)、B)、C)、D)四个选项中,只有一个选项是正确的。请将正确选项涂写在答题
卡相应位置上,答在试卷上不得分。
(1)一个栈的初始状态为空。现将元素 1、2、3、4、5、A、B、C、D、E 依次入栈,然后再
依次出栈,则元素出栈的顺序是
A)12345ABCDE
B)EDCBA54321
C)ABCDE12345
D)54321EDCBA
(2)下列叙述中正确的是
A)循环队列有队头和队尾两个指针,因此,循环队列是非线性结构
B)在循环队列中,只需要队头指针就能反应队列中元素的动态变化情况
C)在循环队列中,只需要队尾指针就能反应队列中元素的动态变化情况
D)循环队列中元素的个数是由队头和队尾指针共同决定
(3)在长度为 n 的有序线性表中进行二分查找,最坏情况下需要比较的次数是
A)O(N)
B)O(n2)
C)O(log2n)
D)O(n log2n)
(4)下列叙述中正确的是
A)顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的
B)顺序存储结构只针对线性结构,链式存储结构只针对非线性结构
C)顺序存储结构能存储有序表,链式存储结构不能存储有序表
D)链式存储结构比顺序存储结构节省存储空间
(5)数据流图中带有箭头的线段表示的是
A)控制流
B)事件驱动 C)模块调用
D)数据流
(6)在软件开发中,需求分析阶段可以使用的工具是
A)N-S 图
B)DFD 图
C)PAD 图
D)程序流程图
(7)在面向对象方法中,不属于“对象”基本特点的是
A)一致性
B)分类性
C)多态性
D)标识唯一性
(8)一间宿舍可住多个学生,则实体宿舍和学生之间的联系是
1
A)一对一
B)一对多
C)多对一
D)多对多
(9)在数据管理技术发展的三个阶段中,数据共享最好的是
A)人工管理阶段 B)文件系统阶段
C)数据库系统阶段
D)三个阶段相同
(10)有三个关系 R、S 和 T 如下:
C
3
T
A
m
R
A
m
n
B
1
3
B
1
S
B
1
2
C
3
5
由关系 R 和 S 通过运算得到关系 T,则所使用的运算为
A)笛卡尔积
B)交
C)并
D)自然连接
(11)以下叙述中正确的是
A)C 程序的基本组成单位是语句
B)C 程序中每一行只能写一条语句
C)简单 C 语句必须以分号结束
D)C 语句必须在一行内写完
(12)计算机能直接执行的程序是
A)源程序 B)目标程序 C)汇编程序
D)可执行程序
(13)以下选项中不能作为 C 语言合法常量的是
A)’cd’
B)0.1e+6
C)”\a”
D)”\011”
(14)以下选项中正确的定义语句是
A)double
a;b;
B)double
a=b=7;
C)double
a=7,b=7;
D)double
,a,b;
(15) 以下不能正确表示代数式 的 C 语言表达式是
A)2*a*b/c/d
B)a*b/c/d*2
C)a/c/d*b*2
D)2*a*b/c*d
(16)C 源程序中不能表示的数制是
A)二进制
B) 八进制
C) 十进制
D) 十六进制
(17) 若有表达式(w)?(--x):(++y),则其中与 w 等价的表达式是
2
A) w=
=1
B) w=
=0
C)w!=1
D) w!=0
(18) 执行以下程序段后,w 的值为
int
w=’A’,x=14,y=15;
w=((x||y)&&(w<’a’));
A)-1
B)NULL
C)1
D) 0
(19)若变量已正确定义为 int 型,要通过语句 scanf(“%d,%d,%d ”,&a,&b,&c);给 a 赋
值 1,给 b 赋值 2, 给 c 赋值 3, 以下输入形式中错误的是(u 代表一个空格符)
A)uuu1,2,3<回车>
B)1u2u3<回车>
C)1,uuu2,
uuu3<回车>
D)1,2,3<回车>
(20) 有以下程序段
int
a,b,c;
a=10;
b=50;
c=30;
if(a>b)a=b,b=c;c=a;
printf(“a=%d
b=%d
c=%d
\n”,a,b,c);
程序的输出结果是
A)
a=10
b=50
c=10
B)
a=10
b=50
c=30
C)
a=10
b=30
c=10
D)
a=50
b=30
c=50
(21) 若有定义语句:int
m[]={5,4,3,2,1},i=4;,则下面对 m 数组元素的引用中错误
的是
A) m[--i]
B)m[2*2]
C)m[m[0]]
D)m[m]
(22)下面的函数调用语句中 func 函数的实参个数是
func(f2(v1,v2),(v3,v4,v5),(v6,max(v7,v8)));
A)3
B) 4
C)5
D)8
(23)若有定义语句:double
x[5]={1.0,2.0,3.0,4.0,5.0},*p=x;则错误引用 x 数组元
素的是
A)*p
B)x[5]
C)*(p+1)
D)*x
(24) 若有定义语句:char
s[10]= “1234567\0\0 ”;,则 strlen(s)的值是
A)7
B)8
C)9
D)10
(25)以下叙述中错误的是
A) 用户定义的函数中可以没有 return 语句
3
B)用户定义的函数中可以有多个 return 语句,以便可以调用一次返回多个函数值
C)用户定义的函数中若没有 return 语句,则应当定义函数为 void 类型
D)函数的 return 语句中可以没有表达式
(26)以下关于宏的叙述中正确的是
A)宏名必须用大写字母表示
B)宏定义必须位于源程序中所有语句之前
C)宏替换没有数据类型限制
D)宏调用比函数调用耗费时间
(27)有以下程序
#include
main()
{
int
i,j;
for(i=3;i>=1;i--)
{
for(j=1;j<=2;j++)
printf("%d",i+j);
printf("\n
")
}
}
程序的运行结果是
A)
2
3
4
B) 4
3
2
C) 2
3
D) 4
5
3
4
5
5
4
3
3
4
3
4
4
5
2
3
(28) 有以下程序
#include
main()
{
}
int
x=1,y=2,z=3;
if(x>y)
if(y程序的运行结果是
A)331
B)41
C)2
D)1
(29)有以下程序
#include
main()
{
int
i=5;
do
{
if(i%3==1)
if(i%5==2)
{
printf(“*%d”,i);
break;
}
i++;
}
while(i!=0);
printf(“\n”);
}
程序的运行结果是
A) *7
B)*3*5
C)*5
D)*2*6
(30)有以下程序
#include
int fun(int
a,int
b)
{
if(b==0)
return
a;
else
return(fun(--a,--b));
}
main()
{
printf("%d\n",
fun(4,2));}
程序的运行结果是
A) 1
B)2
C)3
D)4
(31) 有以下程序
#include
#include
int
fun(int
n)
5
{
int
*p;
p=(int*)malloc(sizeof(int));
*p=n;
return
*p;
}
main()
int
a;
a
=
fun(10);
printf("%d\n",a+fun(10));
{
}
程序的运行结果是
A)0
B)10
C)20
D)出错
(32)有以下程序
#include
void
fun(
int
a,
int
b)
int
t;
t=a;
a=b;
b=t;
{
}
main()
{
int
c[10]={1,2,3,4,5,6,7,8,9,0},
i;
for(i=0;i<10;i+=2)
fun(c,
c[i+1]);
for(i=0;i<10;i++)
printf("%d," ,c);
printf("\n");
}
程序的运行结果是
A)1,2,3,4,5,6,7,8,9,0
B)2,1,4,3,6,5,8,7,0,9
C)0,9,8,7,6,5,4,3,2,1
D)0,1,2,3,4,5,6,7,8,9
(33) 有以下程序
#include
struct
st
{
int
x,
y;} data[2]={1,10,2,20};
main()
6
struct
st
*p=data;
printf("%d,",p->y);
printf("%d\n",(++p)->x);
{
}
程序的运行结果是
A)10,1
B)20,1
C)10,2
D)20,2
(34) 有以下程序
#include
void
fun(int
a[],
int
n)
int
i,t;
for(i=0;i
#define
N
4
void
fun(int
a[][N],
int
b[])
int
i;
for(i=0;iprintf("\n");
}
程序的运行结果是
A)1,2,3,4,
B)1,0,7,0,
C)1,4,5,9,
D)3,4,8,10,
(36) 有以下程序
#include
int fun(int
(*s)[4],int n,
int
k)
{
int
m,i;
m=s[0][k];
for(i=1;im)m=
s[k];
return
m;
}
main()
{
int
a[4][4]={{1,2,3,4},{11,12,13,14},{21,22,23,24},{31,32,33,34}};
printf("%d\n",fun(a,4,0));
}
程序的运行结果是
A)4
B)34
C)31
D)32
(37) 有以下程序
#include
main()
{
}
struct
STU
{
char
name[9];
char
sex;
double
score[2];};
struct
STU
a={"Zhao",'m',85.0,90.0},b={"Qian",'f',95.0,92.0};
b=a;
printf("%s,%c,%2.0f,%2.0f\n",
b.name,
b.sex,
b.score[0],
b.score[1]);
程序的运行结果是
A)
Qian,f,95,92
B)
Qian,m,85,90
C)
Zhao,f,95,92
D)
Zhao,m,85,90
(38) 假定已建立以下链表结构,且指针 p 和 q 已指向如图所示的结点:
8