西南交通大学考研真题一计算机.docx
《西南交通大学考研真题一计算机.docx》由会员分享,可在线阅读,更多相关《西南交通大学考研真题一计算机.docx(14页珍藏版)》请在冰豆网上搜索。
西南交通大学考研真题一计算机
西南交通大学2008年硕士研究生入学考试试卷
试题代码:
921
试题名称:
程序设计与数据结构
考生注意:
1.本试题共6大题,共8页,考生请认真检查;
2.请务必将答案写在答卷纸上,写在试卷上的答案无效。
题号
一
二
三
四
五
六
七
八
九
十
总分
得分
签字
一、填空题(本大题共20个空,每空1分,共20分)
1、设有定义:
intx=1,y=2;则表达式:
2.0+x/y的值为:
。
2、在C语言中字符串的存放,其最后一个字符称为“空字符”,也叫字符串的结束符,对应的转义字符是,其值为。
3、设有宏定义:
#defineAA2-3,则3*AA的宏替换结果是。
4、设有定义:
inta=3,b=2,c=1,则表达式:
a>b>c的值是。
5、定义一个名为a的二维数组,并对数组元素赋初值,其值为下列矩阵,则对应的定义语句为:
。
1.03.82.6
3.35.09.8
6、设有定义:
chars[]=”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;intb;floatc;doubled:
则表达式a+b*c-d的值的类型是【】。
A.charB.intC.floatD.double
2、以下程序段中与语句k=a>b?
(b>c?
1:
0):
0;功能等价的是【】。
A.if((a>b)&&(b>c))k=1;elsek=0;B.if((a>b)||(b>c))k=1;elsek=0;
C.if(a<=b)k=0;elseif(b<=c)k=0;elsek=1;D.if(a>b)k=1;elseif(b>c)k=1;elsek=0;
3、若程序中定义了以下函数,并将其放在调用语句之后,则在调用前需对该函数进行说明,以下选项中错误的说明是【】。
doublemyadd(doublea,doubleb)
{return(a+b);}
A.doublemyadd(doublea,b);B.doublemyadd(double,double);
C.doublemyadd(doubleb,doublea);D.doublemyadd(doublex,doubley)
4、假定a和b均为int型变量,则执行以下程序段后,b的值是【】。
a=1;b=10;
do{b-=a;a++;}while(b--<0);
A.9B.-2C.-1D.8
5、语句:
printf(“%d”,strlen(“abc\n012\1\\”));的输出结果是【】。
A.9B.10C.11D.12
6、设有定义:
intn=0,*P=&n,**q=&p;则以下选项中,正确的赋值语句是【】。
A.p=1;B.*q=2;C.q=pD.*p=5
7、设有变量定义:
inta[10]={1,2,3,4,5,6,7,8,9,10},*P=&a[3],b;则执行赋值语句b=p[5];后b的值是【】
A.5B.6C.8D.9
8、在函数定义中未指定返回值类型,则其隐含的返回值类型是【】。
A.voidB.intC.floatD.编译出错
9、若有函数原型:
viodf(inta[]);和数组定义inta[10];则以下函数调用错误的是【】。
A.f(a)B.f(a+2)C.f(a[0])D.f(&a[0])
10、设k为整型变量,与表达式(!
k)值完全相同的表达式是【】。
A.k==0B.k==1C.k!
=0D.k!
=1
11、以下程序运行后,输出结果是【】。
intb;
voidMyFunc(inta,int*c)
{b=(a++)+(*c)++;}
voidmain(void)
{inta,c;
a=1;b=2;c=3;
MyFunc(c,&a);
printf(“%d%d%d”,a,b,c);
}
A.144B.243C.123D.143
12、以下函数的功能是【】。
intfun(char*s1,char*s2)
{inti=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、以下程序段是从键盘上依次输入数据给数组元素,程序的下划线处应填上【】。
voidmain(void)
{inta[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.0B.-1C.NULLD.非零值
15、在数据结构中,从逻辑上可以把数据结构分成【】。
A.动态结构和静态结构B.紧凑结构和非紧凑结构
C.线性结构和非线性结构D.内部结构和外部结构
16、在以下叙述中,正确的是【】。
A.线性表的顺序存储结构优于链式存储结构
B.二维数组是其数据元素为线性表的线性表
C.栈的操作方式是先进先出
D.队列的操作方式是先进后出
17、一个栈的入栈序列式a,b,c,d,e,则不可能的出栈序列是【】。
A.edcbaB.decbaC.dceabD.abcde
18、若已知一个栈的入栈序列是1,2,3,……,n,其输出序列为p1,p2,p3,……,pn,若p1=n,则p1为【】。
A.iB.n=IC.n-i+1D.不确定
19、循环队列用数组A[m]存放其元素值,已知其头尾指针分别是front和rear,则当前队列中的元素个数是【】。
A.(rear-front+m)%mB.rear-front+1C.rear-front-1D.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.BCDEFB.BCDEFGC.BCPQRSTD.BCDEFEF
21、设矩阵A是一个对称矩阵,为了节省存储空间,将其下三角部分按行序存放在一维数组B[n(n-1)/2]中,对下三角部分中任一元素ai,j(i≥j),在一维数组B中下标k的值是【】。
A.i(i-1)/2+j-1B.i(i-1)/2+jC.i(i+1)/2+j-1D.i(i+1)/2+j
22、设高度为h的二叉树上只有度为0和度为2的结点,则此类二叉树中所包含的结点数至少为【】。
A.2hB.2h-1C.2h+1D.h+1
23、在一个具有n个顶点的无向图中,要连通全部顶点至少需要【】条边。
A.nB.n+1C.n-1D.n/2
24、设哈希表长m=14,哈希函数H(key)=key%11.表中已有4个结点:
addr(15)=4,addr(38)=5,addr(61)=6,addr(84)=7,其余地址为空,如用线性探测在散列处理冲突,关键字为49的节点的地址是【】。
A.3B.4C.5D.6
25、哈希表长度为m,哈希函数H(K)=K%P,一般来说P应取小于m的最大【】。
A.奇数B.偶数C.素数D.合数
26、若用邻接矩阵表示一个有向图,则其中每一列包含的1的个数为【】。
A.图中顶点的入度B.图中顶点的出度
C.图中弧的条数D.图中连通分数的数目
27、在对n个关键字进行直接选择排序的过程中,每一趟都要从无序区选出最小关键字元素,则在进行第i趟排序之前,无序区中关键字元素的个数为【】。
A.iB.i+1C.n-iD.n-i+1
28、下列排序算法中,其时间复杂度和记录的初始排列无关的是【】。
A.插入排序B.堆排序C.快速排序D.冒泡排序
29、对20个有序记录进行折半查找,查找成功的平均查找长度为【】。
A.5B.37/10C.39/10D.41/10
30、当初始数据有序时,不应采用【】。
A.堆排序B.快速排序C.基数排序D.希尔排序
三、阅读程序,按提示给出结果(共5小题,每小题4分,共20分)。
1、下面的函数Func的功能是。
floatFunc(floata[],intN)
{inti,floats;
for(i=0,s=0;ireturns/N;
}
2、以下程序运行后的输出结果是。
voidmain(void)
{intx=1,y=0,a=0,b=0;
switch(x)
{case1:
switch(y)
{case0:
a++;break;
case1:
b++;break;
}
case2:
a++;b++;break;
}
printf(“%d%d\n”,a,b);
}
3、以下程序运行后的输出结果是。
voidmain(void)
{inti=0,s=0;
for(:
:
)
{i++;
if(i==3||i==5)continue;
if(i==6)break;
s+=i;
}
printf(“%d\n”,s);
}
4、下面程序运行时,若输入234,则输出结果是。
unsignedFunc(unsignedNum)
{unsignedk=1;
do{k*=Num%10;Num/=10;}while(Num);
returnk;
}
voidmain(void)
{unsignedn;
scanf(“%u”,&n);
printf(“%d”,Func(n));
}
5、下面程序运行时,若输入:
口口-893abc193,则输出结果是。
intIsDigit(charc)
{return(c<’0’||c>’9’)?
0:
1:
}
longFunc(chars[])
{longn;intSign;
for(:
*s==’口’:
s++);//口表示空格
Sign=(*s==’-’)?
-1:
1;
if(*s==’+’||*s==’-’)s++;
for(n=0L:
IsDigit(*s):
s++)n=10*n+(*s-‘0’);
returnn*Sign;
}
voidmain(void)
{chars[81];
gets(s);
printf(“%ld”,Func(s));
}
四、程序填空(本大题共10个空,每空2分,共20分)
1、以下程序从键盘输入数据到数组中,统计其中正数的个数,并计算它们之和。
请填空。
voidmain(void)
{inti,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中的所有数字字符,请填空。
voidDelSpace(char*s)
{intn=0,i;
for(i=0;s[i];i++)
if(【3】)s[n++]=s[i];
s[n]=【4】;
}
3、下面是折半查找算法,请填空。
intSearch_Bin(SSTableST,KeyTypekey)
{low=1;high=ST.length;//置区间初值
while(low<=high)
{mid=【5】;
if(ST.elem[mid].key=key)returnmid;//找到待查元素
elseif(key【6】;//继续在前半区间进行查找
elselow=【7】;//继续在后半区间进行查找
}
return0;//顺序表中不存在待查元素
}//Search_Bin
4、下面为直接插入排序的算法,请填空。
viodInsertSort(SqList&L){//对顺序表L作直接插入排序。
{for(i=2;i<=L.length;++i)
if(L.r[i].key【8】;//复制为监视哨
for(j=i-1;L.r[0].key【9】;//记录后移
【10】;//插入到正确位置
}
}//InsertSort
五、简要回答题(共5小题,每小题4分,共20分)
1、某二叉树的前序遍历节点访问顺序是abdgcefh,中序遍历的节点访问顺序是dgbaechf,则其后序遍历的节点访问顺序是什么?
2、在队列的顺序存储结构中,为什么要采用循环队列的形式?
3、在有向图的邻接矩阵中,如何判断入度或出度为零的顶点?
在有向图邻接表中,又如何判断出度为零的顶点。
4、为什么说线性表的顺序存储结构是一种随机存取结构?
5、请求解下图的最小生成树。
六、程序设计(本大题共4小题,每题10分,共40分)
1、请编写函数voidFunc(int*a,int*n);它的功能是:
求出1到1000之内能被7或11整除、但不能同时被7和11整除的所有整数并将它们放在a所指的数组中,通过n返回这些数的个数。
注:
假设a所指的数组有足够的空间存储满足条件的数。
2、编一个函数,用递归方法求n阶勒让德多项式的值。
其中:
多项式的值通过函数返回,多项式的阶n以及多项式的变量x通过函数参数传递。
递归公式如下:
3、有一个单链表,其结点的元素值以非递减有序排列,编写一个函数删除该单链表中多余的元素值相同的结点。
4、设一棵二叉树以二叉链表为存储结构,设计一个算法求二叉树的高度。
2008年真题参考答案(注意,此部分不包括程序设计答案,数据结构的详解请参考李春葆版《数据结构习题与解析》)
一、填空题
12.0
2\00
3-3
4true
5doublea[3][2]={1.0,3.8,2.6,3.3,5.0,9.8};
66\0
7a[3]的值a[0]的值加3
8.n-19.head->next==NULL10.200+10*12+6=32611.12.n2+1
13.114.n-115.顺序有序
二、单项选择题
1~14:
DCADADDBCCBDCD15~30:
CBCCADABCACADBBB
三、阅读程序,按提示给出结果
1求平均数
221
35
424
5-893
四、程序填空
1.&a[i]a[i]
2.s[i]>=’0’&&s[i]<=’9’‘\0’
3.(low+high)/2high=mid-1mid+1
4.L.r[0]=L.r[i]L.r[j+1]=L.r[j]L.r[j+1]=L.r[0]
五、简要回答题
1.gdbehfca
2.防止出现队列假溢出
3.1)入度:
该顶点所在行对应的元素全为0
2)出度:
该顶点所在列对应的元素全为0
3)度为零:
顶点的邻接点域为零。
4.顺序存储是以元素在计算机内“物理位置相邻”来表示线性表中数据元素之间的逻辑关系,因此,只要确定了存储线性表的起始位置,线性表中任一数据元素都可随机存取。
5.
六、程序设计
1~2:
略
3.voiddel(List&L)
{p=L->next;
if(p!
=NULL)
while(p->next!
=NULL)
{if(p->data!
=p->next->data)
p=p->next;
else
{
g=p->next;
p->next=g->next;
free(g);
}
}
}
4.intDepth(BiTree&T)
{
intm,n;
if(!
T)return0;
m=Depth(T->lchild);
n=Depth(T->rchild);
return(m>n?
m:
n)+1;
}