A[i][j]=i*j;
A . O(m2)
B . O(n2)
C . O (m*n)
D . O (m+n)
3 .在待排数据已基本有序的情况下, ———— 效率最高。
A . 直接选择排序
B . 直接插入排序
C . 快速排序
D . 归并排序
4 . n 个英文单词,每个单词长度基本相等,为 m ,当 n>>50,m<5 时,时间复杂度最佳的为 ———— :
A . 快速排序
B .归并排序
C .基数排序
D.直接插入排序
5 .顺序查找长度为 n 的顺序表,查找成功的平均检索长度为 ———— :
A . n
B . n/2
C.(n-1)/2
D . (n+1)/2
6 .一颗二叉树,头序序列为 ABCDEFG ,中序序列为 CBDAEGF ,后序为 ————
A . CDBGFEA
B . CDBFGEA
C . CDBAGFE
D . BCDAGFE
7 .一颗度为 3 的树,度为 3 的节点为三个,度为 2 的节点为 1 个,度为 1 的节点 1 个,度为 0 的节点 ———— 个(考试大)。
A . 6
B . 7
C . 8
D . 9
8 .m 阶 B— 树中,某一节点插入一个新关键字引起破裂,则该节点原有关键字 ———— 个。
A.|—m/2—|
B.|—m/2—|-1
C.m
D.m-1
E.|—m/2—|
F.|—m/2—|-1
9 .两个长度为 n 的递增有序表,合并成一个长度为 2n 的递增有序表,最少需要进行关键字比较 ———— 次。
A . 1
B . n-1
C . n
D . 2n
10 .有向图 G, n 个顶点,邻接矩阵存储于二维数组中,顶点 i 的度为 ———— .
A.(i=0 n-1)∑A[i][j]
B.(j=0 n-1)∑A[i][j]
C.(i=0 n-1)∑A[i][j]+(j=0 n-1)∑A[i][j]
D.(j=0 n-1)∑(A[i][j]+A[j][i])
二、问答题
1. ( 6 ) n 阶对称阵( aij ) n × n ,采用压缩存储存放于一维数组 F[m] 中,从 F[0] 开始存储,给出矩阵的压缩存储方式及任一矩阵元素 aij ( 0<=i,j<=n-1 )的地址计算公式,并求算 m .
2. ( 5 )顺序队列如何解决假溢出问题。
3. ( 8 )已知一组关键字( 10 , 26 , 14 , 25 , 17 , 36 , 37 , 44 , 27 , 34 , 60 )设哈希函数 H ( x ) =x ,表长 m=13 ,请写出用线性探测法处理冲突构造所得的哈希表。
并求出在等概率情况下,查找成功时的平均检索长度。
4. ( 6 )给定一个由 n 个关键字不同的记录构成的序列,你能否用比 2n-3 少的比较次数找出 n 个元素中的最大值和最小值?
如果有,请描述你的方法。
最快需要多少次比较?
(无需写算法)
三 、用类 C 语言完成设计
1.( 15 )什么是堆?
设计算法判定给定的存于数组 r[] 中的 n 个数据是否为堆。
2.( 15 )设 u 、 v 是有向图的两个顶点,设计算法判读有向图中是否存在从顶点 u 到 v 的长度为 k 的简单路径。
要求给出图的存储形式及其类型定义。
3. ( 10 )设二叉树以二叉链表形式存放。
一颗二叉树的繁茂程度定义为各层节点数的最大值与树的高度的乘积。
试设计一个高效算法,求二叉树的繁茂程度。
2007年电子科技大学计算机专业基础试题
考研_考试大 [2007/12/9] 保存本文
第一部分数据结构(共75分)
一、单项选择题(每题2分,共10分)
1.表头表尾均为空表的广义表是()。
①()②(())③((),())④((()))
2.对下列4个序列,以第一个关键字为基础进行用快速排序算法进行排序,在第一趟过程中移动记录次数最多的是()
①92,96,100,110,42,35,30,88
②92,96,88,42,30,35,110,100
③100,96,92,35,30,110,88,42
④42,30,35,92,100,96,88,110
3.实现图的广度优先搜索算法时,使用的数据结构是()
①栈
②队列
③十字链表
④三元组
4.在有向图G的邻接矩阵中,顶点Vi的度是()。
①邻接矩阵中第i行元素之和
②邻接矩阵中第i列元素之和
③邻接矩阵中第i行和第i列元素之和
④邻接矩阵中第i行元素之和与第i列元素之和的最大值
5.能有效缩短关键路径长度的方法是()
①缩短任意一个活动的持续时间
②缩短关键路径上任意一个关键活动的持续时间
③缩短多条关键路径上共有的任意一个关键活动的持续时间
④缩短所有关键路径上共有的任意一个关键活动的持续时间
二、填空题(每空2分,共8分)
1.由一棵二叉树的后序序列和可唯一确定这棵二叉树。
2.二叉树结点数n与边数e的关系为。
3.在各种查找算法中,平均查找长度与关键字个数n无关的方法是。
4.若希望得到树高较矮的生成树,则采用图的遍历算法。
三、判断题(用√表示对,用×表示错。
每题2分,共12分)
1.循环队列中不存在队列满的问题。
()
2.将一个新结点插入到二叉排序树中,该结点一定成为叶结点。
()
3.用单链表示的有序表可以使用折半查找方法来提高查找速度。
()
4.若有向图中每个顶点的入度和出度均为1,则该有向图必有回路。
()
5.已知二叉排序树的先序序列,能唯一确定该二叉排序树。
()
6.交换完全二叉树所有结点的左右子树,得到的二叉树仍是完全二叉树。
()
四、简答题(每题6分,共30分)
1.若一个有向图的邻接矩阵中主对角线以下的元素均为0,则该图一定不存在回路。
该说法是否正确?
为什么?
2.在完全二叉树中,设结点数为n,
(1)如何断定该完全二叉树中度为1的结点数n1?
(2)给定结点x的编号m,又如何根据该编号断定x是否为叶结点?
3.当查找表有既能较快查找又能适应动态变化的需求时,选用什么查找方法最适合?
并简述其理由。
4.在某个通信系统中,报文的字符集为a,b,c,d,e,f,g,h八种,其出现频率分别为6,28,8,9,13,22,4和1,试为各字符设计二进制编码,使得报文编码长度最短。
给出各字符的二进制编码和报文编码长度。
5.设L是不带头结点单链表的头指针,P是指向链表中某个结点的指针,该结点既不是第一个结点,也不是最后一个结点,S是指向待插入新结点的指针,用下面①--⑦选项完成A、B功能。
A.在P所指结点前面插入S所指结点的语句序列是();
B.在第一个结点前面插入S所指结点的语句序列是();
①P↑.next:
=S;
②Q:
=P;
③L:
=S;
④P:
=L;
⑤WHILE(P↑.next<>Q)DOP:
=P↑.next;
⑥S↑.next:
=P↑.next;
⑦S↑.next:
=L↑.next;
五、算法题(共15分)
1.设p,q分别指向两个不带头结点的单循环链表中的某个结点,试编写一个算法,用O
(1)时间将这两个单链表合并为一个,并令p指向p和q两者data域值较小的结点。
(5分)
PROCxyz(p,q);
{p,q分别指向两个不带头结点的单循环链表中的某个结点,结点结构为数据域data和指针域next}
ENDP;
2.设二叉树采用二叉链表存储,结点结构为lchild、data和rchild,试编写输出二叉树中从根结点到每个叶结点的路径的算法。
设二叉树最长路径结点个数小于m,可以使用队列S[1:
m],初始时S.rear=S.front=1。
(10分)
PROCRootToLeaf(bt:
bitreptr);
{bt为二叉树根指针,S[1:
m]为队列,初始时S.rear=S.front=1}
ENDP;{RootToLeaf}
∙南京林业大学2003年C程序设计考研试题
考研
推荐给好友
收藏本页
2006/11/21
保存本文
一. 选择题(40分)
1..当c的值不为0时,在下列选项中能正确将c的值赋给变量a、b的是______
A c=b=a; B (a=c)‖(b=c);
C (a=c)&&(b=c); D a=c=b;
2.在C语言中,不正
确的int类型的常数是________
A 32768 B 0 C 037 D 0xAF
3.以下程序的输出结果是________
main( )
{ int a= -1,b=1,k;
if((++a<0)&& !
(b-- <=0))
printf("%d %d\n",a,b);
else
printf("%d %d\n",b,a);}
A -1 1 B 0 1 C 1 0 D 0 0
4.在C语言类型中,int ,char, short等类型的长度是_________
A.固定的 B.由用户自己定义 C.任意的 D.与机器字长有关
5.设a=1,b=2,c=3,d=4,则表达式:
a
A 4 B 3 C 2 D 1
6. 下列说法错误的是______________
A.结构体变量可以被整体赋值.
B. 可以取结构体变量的地址
C. 可以取结构体变量成员的地址
D. 结构体类型的成员可以定义成该结构体类型的指针类型
7.设有如下定义:
int x=l,y=-1;,则语句:
printf("%d\n",(x--&++y));的输出结果是____
A 1 B 0 C -1 D 2
8. . 设有程序段:
t=6;a=7;b=8; if(a=b)t=a;,这段程序执行后,t的结果是______
A. 6 B.7 C.8 D.0
9.下列描述中不正确的是________
A)字符型数组中可以存放字符串
B)可以对字符型数组进行整体输入、输出
C)可以对整型数组进行整体输入、输出
D)不能在赋值语句中通过赋值运算符"="对字符型数组进行整体赋值
10.若a为二维数组,它有m列,则a[i][j]在数组中的位置是_________
A. i*m+j B. j*m+i C. i*m+j-1 D. i*m+j+1
11. 下列语句中符合C语言语法的赋值语句是__________
A a=7+b+c=a+7; B a=7+b++=a+7;
C ) a=7+b,b++,a+7 D a=7+b,c=a+7;
12. 若a为二维数组,则a[1][3]等价于_________
A. *((a+1)+3) B. *(a[1]+3) C. (*(a+1)+3) D. &a[1]+3
13.下面程序段不是死循环的是_____________
A. int j=100;
while
(1){j=j%100+1;if(j>100)break;}
B. for( ; ; );
C. int k=0; do{ ++k;}while(k>=0);
D. int s=36; while(s);--s;
14.下列表达式中,错误的是______.
A.2>1 ?
a:
b B.i+++j C.4.0%2.0 D.x*=y+8
15.a,b为整数且b!
=0,则表达式(a/b)*b+a%b的值为______的值.
A.a B.b C.a被b除的余数部分 Da被b除商的整数部分
16.若以数组元素作为函数的实参,则实参向形参传送的是______.
A.数组元素的地址 B.数组元素的值 C.数组的首地址 B.数组名
17.设有如下的共用体定义:
union data
{int i;
long b;
float f;}a;
则a所占的内存单元为______个字节.
A.4 B.6 C.8 D.10
18.语句:
printf("%d",(a=2)&&(b= -2);的输出结果是________
A 无输出 B 结果不确定 C -1 D 1
19.下列选项中不是C语言main函数正确表达形式的是________?
A.main(int argc,char *argv[]);
B.main(ac,av) int ac;char **av;
B.main(c,v) int c;char *v[];
D.main(argc,argv) int argc;char argv[];
20.执行for(j=1;j++<4;);语句后变量j的值是_________
A. 3 B. 4 C. 5 D.不定
二.填充(20分)
1. C语言的数据类型中,构造类型包括:
数组,__________和__________.
2.设x,y,z,t均为int型变量,则执行以下语句后,t的值为_________
x=y=z=1;
t=++x||++y&&++z;
3.C语言的运算符要确定的两个方面分别是__________和__________.
4. 在函数内使用static是_________,在函数外使用static是________。
5.对于语句:
scanf("%3d%3d",&a,&b);,若输入123456,则a和b的值分别为_______和_______.
6.设有二维数组 inta[2][2],*p;,则a[I][j]三种其他表示是______________,
____________,___________。
7.字符串的长度是_________________,它的存储空间大小是_______。
8.静态变量赋初值是________赋值,动态变量赋初值是___________赋值。
9.链表中每个结点至少应包括二个部分,它们是__________和__________.
10.用数组名作函数参数时,形参和实参的结合是采用__________,因为数组名是
数组的__________.
三.程序分析题(20分)
1. 阅读下面程序,给出输出结果。
main( )
{ int i, j, k;
for(i=1; i<10; i++)
{ printf(“\n”);
if(i<=5)
{for(j=1; j<=i; j++)
{ for(k=1;k<=5-i;k++)
printf(“ ”);
printf(“* “); }
else
for (j=1; j<=10-i;j++)
{for(k=1;k<=i-5;k++)
printf(“ ”);
printf(“* ”);}}}
2. 阅读下面程序,指出函数所实现的功能。
void ins(char s[ ], int start, char t[ ])
{ int m, n,i,k;
n=0;m=0;
for(i=0;s[i]!
=’\0’;i++) m++;
for(i=0;t[i]!
=’\0’;i++) n++;
for(k=1 ; k
for(k=start;k
s[k]=t[k-start];
s[m+n]=’\0’;
}
3. 阅读下面程序,指出下面程序所完成的功能
void st(char *a [ ],int n )
{ int i,j,k;
char *m;
for(i=1; i
{ m=a[i]; k=i;
for (j=i+1; j<=n; j++)
if (strcmp(a[k],a[j])>0), k=j;)
m=a[i]; a[i]=a[k]; a[k]=m; }
for(i=1; i<=n; i++)
printf(“%s”, a[i]);}
4.分析以下程序:
#include “string.h”;
main()
{char c,string[81];
int i,a=0,b=0;
gets(string);
for(i=0;(c=string[i])!
=’\0’;i++)
if (c==’ ’)a=0;
else if (a==0)
{a=1;b++;}
printf("%d\n",b);
}
该程序的作用是_________________.若输入:
a b c,则程序运行后,输出结果为______,
且c的值为______,a的值为______.
5. 阅读下面程序,指出函数所实现的功能。
void lnsort(int L[ ],int n)
{int i,j;
for( i=2;i<=n;i++)
{L[0]=L[i];
j=i-1;
while(L[0]
{L[j+1]=L[j];
j--;
}
L[j+1]=L[0];
}
}
四.完成下列程序(20分)
1. 下面程序是查找学生的成绩,完成该程序。
main( )
{ void search (float (*p) [3], int i );
float score [4][3]={{75,78,82},{66,72,77},{85,90,81},{74,89,68}};
while
(1)
{ scanf (“%d” &i );
if(___1____)break;
search(_____2_______);}}
void search (float (*p)[3],int i )
{ int k;
print (“The score of No %d are \n”,i );
for(_____3_______)
printf( “%5.2f”,_____4_________);}
2. 已知两个线性表的元素按非递减排列,合并两表得到一新表,仍然是按
非递减排列,两个线性表以-1为结束标志。
以函数来完成该操作,函数如下,
完成所缺语句。
void