2008 年四川西南交通大学程序设计与数据结构
一、填空题(本大题共 20 个空,每空 1 分,共 20 分)
1、设有定义:int x=1, y=2; 则表达式:2.0+x/y 的值为:
。
2、在 C 语言中字符串的存放,其最后一个字符称为“空字符”,也叫字符串的结束符,
对应的转义字符是
,其值为
。
3、设有宏定义:#define AA
2-3 ,则 3*AA 的宏替换结果是
4、设有定义:int a=3, b=2, c=1 ,则表达式:a>b>c 的值是
。
。
5、定义一个名为 a 的二维数组,并对数组元素赋初值,其值为下列矩阵,则对应的定
义语句为:
。
1.0
3.3
3.8
5.0
2.6
9.8
6、设有定义:char
s[]=”SWJTU”; 则数组占用的内存为
字节,s[5]的值
为
。
7、若有定义: inta[5],*p=a ;则*(p+3)表示
;*p+3 表示
。
8、在具有 n 个元素单元的循环队列中,若采用少用一个元素来解决队空队满时都有头
尾指针相等的问题,队满时共有
个元素。
9、带一个头结点的单链表 head 为空的条件是
。
10、二维数组 A[10][20]采用列序为主序存储,每个元素占一个存储单元,并且 A[0][0]
的存储地址是 200,则 A[6][12]的地址是
。
11、深度为 k 的完全二叉树至少有
个结点,至多有
个结点。
12、在一棵二叉树中,度数为零的结点个数为 n0,度数为 2 的结点个数为 n2,则有
n0=
。
13、在无向图 G 的邻接矩阵 A 中,若 A[i][j]等于 1,则 A[j][i]等于
14、对 n 个元素的序列进行冒泡排序时,最少的比较次数是
。
。
15 、 以 折 半 查 找 方 法 查 找 一 个 线 性 表 时 , 此 线 性 表 必 须 是
存 储 的
表。
二、单项选择题(本大题共 30 小题,每小题 1 分,共 30 分。在每小题列出的四个选项中只
有一个选项是符合题目要求的答案)
1、若有以下定义语句: char ;
int b ;float c ;double d:则表达式 a+b*c-d 的值的
类型是【 】。
A.char
B.int
C.float
D.double
2、以下程序段中与语句 k=a>b?(b>c?1:0):0;功能等价的是【 】。
A.if((a>b)&&(b>c)) k=1; else k=0;
B.if((a>b)||(b>c))
k=1; else
k=0;
C.if(a<=b) k=0 ;else if(b<=c) k=0 ;else k=1; D.if(a>b) k=1 ;else if(b>c)
k=1 ;else k=0;
3、若程序中定义了以下函数,并将其放在调用语句之后,则在调用前需对该函数进行说明,
以下选项中错误的说明是【 】。
double myadd(double a,double b)
{
return (a+b) ;}
A.double
myadd (double a,b);
B.double myadd (double ,double);
C.double
myadd (double b,double a);
D.double myadd (double x, double y)
4、假定 a 和 b 均为 int 型变量,则执行以下程序段后, b 的值是【 】。
a=1;
b=10;
do{b-=a ;a++ ;}
while (b--<0);
A.9
B.-2
C.-1
D.8
5、语句: printf(“%d” ,strlen(“abc\n012\1\\”)); 的输出结果是【 】。
A.9
B.10
C.11
D.12
6、设有定义:int n=0,*P=&n , **q=&p ;则以下选项中,正确的赋值语句是【 】。
A.p=1;
B.*q=2;
C.q=p
D.*p=5
7、设有变量定义: int a[10]={1,2,3,4,5,6,7,8,9,10}, *P=&a[3],b;则执行赋值语句
b=p[5];后 b 的值是【 】
A.5
B.6
C.8
D.9
8、在函数定义中未指定返回值类型,则其隐含的返回值类型是【 】。
A.void
B.int
C.float
D.编译出错
9、若有函数原型: viod f( int a[ ]); 和数组定义 int a[10];则以下函数调用错误的
是【 】。
A.f(a)
B.f(a+2)
C.f(a[0])
D.f(&a[0])
10、设 k 为整型变量,与表达式 (!k)值完全相同的表达式是【 】。
A.k==0
B.k==1
C.k!=0
D.k!=1
11、以下程序运行后,输出结果是【 】。
int b ;
void
MyFunc( int
a,int
*c)
{b=(a++) + (*c)++; }
void main(void)
{
int a, c ;
a=1 ;b=2
;c=3 ;
MyFunc (c, &a);
printf(“%d%d%d”,a ,b ,c );
}
A.144
B.243
C.123
D.143
12、以下函数的功能是【 】。
int
fun(char *s1 ,char *s2)
{
int i=0 ;
while(s1[i]=s2[i]&&s2[i]!=’\0’)i++;
return(s1[i]==’\0’&&s2[i]==’\0’);
}
A.将 s2 所指字符串赋给 s1
B.比较 s1 和 s2 所指字符串的大小,若 s1 比 s2 的大,函数值为 1,否则函数值为 0
C.比较 s1 和 s2 所指字符串是否相等,若相等,函数值为 1,否则函数值为 0
D.比较 s1 和 s2 所指字符串的长度,若 s1 比 s2 的长,函数值为 1,否则函数值为 0
13、以下程序段是从键盘上依次输入数据给数组元素,程序的下划线处应填上【 】。
void
main (void)
{ int a[20] ,i=0;
while(i<20) scanf(“%d”,
);
}
A.&a[i]
B.&a[i+1]
C.&a[i++]
D.&a[i]++
14、若文件型指针 fp 已指向某文件的末尾,则函数 feof(fp)的返回值是【 】。
A.0
B.-1
C.NULL
D.非零值
15、在数据结构中,从逻辑上可以把数据结构分成【 】。
A.动态结构和静态结构
B.紧凑结构和非紧凑结构
C.线性结构和非线性结构
D.内部结构和外部结构
16、在以下叙述中,正确的是【 】。
A.线性表的顺序存储结构优于链式存储结构
B.二维数组是其数据元素为线性表的线性表
C.栈的操作方式是先进先出
D.队列的操作方式是先进后出
17、一个栈的入栈序列式 a ,b ,c ,d ,e ,则不可能的出栈序列是【 】。
A.edcba
B.decba
C.dceab
D.abcde
18、若已知一个栈的入栈序列是 1, 2, 3, ……, n ,其输出序列为 p1 ,p2 , p3, …… ,pn,
若 p1=n,则 p1 为【 】。
A.i
B.n=I
C.n-i+1
D.不确定
19、循环队列用数组 A[m]存放其元素值,已知其头尾指针分别是 front 和 rear,则当前队
列中的元素个数是【 】。
A.(rear-front+m)%m
B.rear-front+1
C.rear-front -1
D.rear-front
20 、 设 串 s1=””ABCDEFG, s2=”PQRST”, 函 数 con(x,y) 返 回 x 和 y 串 的 连 接 串 ,
subs(s ,I ,j)返回串 s 的从序号 i 的字符开始的 j 个字符组成的子串 , len(s)返回串 s
的长度,则 con(subs(s1 ,2 , len(s2)), subs(s1 ,len (s2),2 )))的结果串是【 】。
A.BCDEF
B.BCDEFG
C.BCPQRST
D.BCDEFEF
21、设矩阵 A 是一个对称矩阵,为了节省存储空间,将其下三角部分按行序存放在一维数组
B[n(n-1)/2]中,对下三角部分中任一元素 ai,j(i≥j),在一维数组 B 中下标 k 的值是【 】。
A.i(i-1)/2+j-1
B.i(i-1)/2+j
C.i(i+1)/2+j-1
D.i(i+1)/2+j
22、设高度为 h 的二叉树上只有度为 0 和度为 2 的结点,则此类二叉树中所包含的结点数至
少为【 】。
A.2h
B.2h-1
C.2h+1
D.h+1
23、在一个具有 n 个顶点的无向图中,要连通全部顶点至少需要【 】条边。
A.n
B.n+1
C.n-1
D.n/2
24、设哈希表长 m=14,哈希函数 H(key)=key%11.表中已有 4 个结点: addr(15)=4,
addr(38)=5,addr(61)=6,addr(84)=7,其余地址为空,如用线性探测在散列处理冲突,关
键字为 49 的节点的地址是【 】。
A.3
B.4
C.5
D.6
25、哈希表长度为 m,哈希函数 H(K)=K%P,一般来说 P 应取小于 m 的最大【 】。
A.奇数
B.偶数
C.素数
D.合数
26、若用邻接矩阵表示一个有向图,则其中每一列包含的 1 的个数为【 】。
A.图中顶点的入度
B.图中顶点的出度
C.图中弧的条数
D.图中连通分数的数目
27、在对 n 个关键字进行直接选择排序的过程中,每一趟都要从无序区选出最小关键字元素,
则在进行第 i 趟排序之前,无序区中关键字元素的个数为【 】。
A.i
B.i+1
C.n-i
D.n-i+1
28、下列排序算法中,其时间复杂度和记录的初始排列无关的是【 】。
A.插入排序 B.堆排序
C.快速排序
D.冒泡排序
29、对 20 个有序记录进行折半查找,查找成功的平均查找长度为【 】。
A.5
B.37/10
C.39/10
D.41/10
30、当初始数据有序时,不应采用【 】。
A.堆排序 B.快速排序
C.基数排序
D.希尔排序
三、阅读程序,按提示给出结果(共 5 小题,每小题 4 分,共 20 分)。
1、下面的函数 Func 的功能是
float Func (float a[ ], int
N)
{
int
i, float s;
for(i=0,s=0; i
case 1:b++;break;
}
case 2:a++;b++;break;
}
printf(“%d %d\n”,a ,b);
}
3、以下程序运行后的输出结果是
。
void main (void)
{
int i=0,s=0;
for(::)
{ i++;
if(i==3||i==5) continue;
if(i==6)
break;
s+=i;
}
printf(“%d\n”,s);
}
4、下面程序运行时,若输入 234,则输出结果是
。
unsigned
Func (unsigned Num)
{
unsigned k=1;
do{k*=Num%10;Num/=10;}while (Num);
return
k;
}
void main(void)
{
unsigned n;
scanf(“%u”,&n);
printf(“%d”,Func(n));
}
5、下面程序运行时,若输入: 口口-893abc193,则输出结果是
。
int
IsDigit (char c)
{
return
(c<’0’||c>’9’)?0:1:}
long Func(char s[ ])
{
long n; int Sign ;
for(:*s==’口’:s++); //口 表示空格
Sign=(*s==’-’)?-1:1;
if(*s==’+’||*s==’-’)s++;
for(n=0L:IsDigit(*s) :s++)
n=10*n+(*s-‘0’);
return
n*Sign;
}
void main (void)
{
char
s[81];
gets(s);
printf(“%ld”,Func(s));
}
四、程序填空(本大题共 10 个空,每空 2 分,共 20 分)
1、以下程序从键盘输入数据到数组中,统计其中正数的个数,并计算它们之和。请填空。
void main(void)
{
int i,a[20],sum,count;
sum=count=0;
for(i=0;i<20;i++)
scanf(“%d”,
【1】
) ;
for(i=0;i<20;i++)
{
if(a[i]>0)
{
count++;
sum+=
【2】
;
}
}
printf(“Count=%d ,Sum=%d”,count,sum);
}
2、以下函数的功能是删除字符串 s 中的所有数字字符,请填空。
void DelSpace (char *s)
{
int
n=0,i;
for(i=0; s[i]; i++)
if(
【3】
)
s[n++]=s[i];
s[n]=
【4】
;
}
3、下面是折半查找算法,请填空。
int Search_Bin (SSTable ST , KeyType
key)
{
low =1 ;high=ST.length;
//置区间初值
while(low<=high)
{ mid=
【5】
;
if(ST.elem[mid].key=key)
return mid ;
//找到待查元素
else
if(key