东北大学计算机专业研究生入学考试2007年真题原题

2007年攻读硕士学位研究生试题

东北大学

考试科目:C语言程序设计与数据结构

《C语言程序设计》部分(共75分)

一、写出下列程序的运行结果(答案写在答卷上,共20分,每小题5分)

1.

int f(int *a)

{

return(*a)++;

}

void main()

{

int a=2;

int s=0;

{

int a=5;

s+=f(&a);

}

s+=f(&a);

printf(“%d\n”,s);

}

2

void f(int y,int *x)

{

y=y+*x; *x=*x+y;

}

void main()

{

int x=2,y=4;

f(y,&x);

printf(“%d %d\n”,x,y);

}

3

void f(int a[],int i,int j)

{

int t;

If(i

{

t=a[i];a[i]=a[j];a[j]=t;

f(a,i+1,j-1);

}

}

void main()

{

int i,a[5]={1,2,3,4,5}; f(a,0,4);

for(i=0;i<5;i++);

printf(“%d,”,a[i]);

printf(“\n”);

}

4.

void main()

{

Char*p[2][3]={“Hello”,”world”,”student”,”computer”,”end”,”the”};

printf(“%c\n”,***(p+1));

printf(“%c\n”,**p[0]);

printf(“%c\n”,(*(*(p+1)+1))[2]);

printf(“%c\n”,*(p[1][2]+1));

printf(“%s\n”,**(p+1));

}

二、回答下列问题(答案写在答卷上,共20分,每小题5分)

1. 下面结构声明中是否有语法错误?如果有错误,请改正过来;

struct a{

int x;

char y;

struct a z;

struct a *p;

};

2. 下面程序中是否存在错误?如果有错误,请改正过来;

void setmemory(char **p,int num)

{

*p=(char *)malloc(num);

}

void main()

{

char *str;

setmemory(&str,100);

strcpy(str,”hello”);

printf(“%s”,str);

}

3.下面程序的功能是求两个整数中较大者,并输出结果。程序设计中是否存在错误?如果

有错误,请改正过来;

void big(int x,int y,int z)

{

z=x>y?x:y;

}

void main()

{

int a,b,c;

scanf(“%d,%d”,&a,&b);

big(a,b,c);

pirntf(“%d”,c);

}

3. 下面程序中是否存在错误?如果有错误,请改正过来:

void main()

{

char str[]=”Hello world!”;

for(;*str!=’\0’;str++)

printf(“%c”,*str);

}

三、(17分)设有一个已排序的英文词典文件,每一个词条的格式为:

词语/词性/例句

例如:book/n./This is abook.

student/n./I am a student.

……

试编写一个程序,根据二分查找的原理,在文件中查找指定的单词的词条,并输出词条信息。

四、(18分)n个人围成一圈,从第1个人开始计数,凡是数到1、2、4、8…2k … 的人退

出圈子。试编写一个程序,输出这n个人退出圈子的顺序。要求使用链表结构实现。

 

 

 

《数据结构》部分(共75分)

一、请简要回答下列问题(25分,请将答案写在答题纸上):

1.(6分)内存中一片地址从1到m连续空间,提供给两个栈S1和S2使用,怎样分配这两个栈,才能充分利用这部分存储空间.请画出分配结构示意图,并写出判别栈空和栈满的条件。

2.(4分)有向图的拓扑排序能否用图的深度优先搜索算法来实现?若能,请简述方法,若不能,请简述原因。

3.(5分)判别以下序列是否是堆,如果不是,则把它调整为堆。(12,70,33,65,24,56,48,92,86,33)

4.(10分)设有向图G=,其中V={V1,V2,V3,V4},

E={,,,,,,}试按下列要求画出其存储结构图。

(1)邻接矩阵 (2)逆邻接表 (3)十字链表

二、(15分)设有n个结点的平衡二叉树的每个结点都标明了平衡因子b,设计结点存储结构,并编写求平衡二叉树的高度的算法(要求算法的时间复杂度为O(log2(n))。

三、(20分)设有向图G有n结点(用1,2,……n表示),e条边,给出邻接表的结点结构,编写算法建立G的邻接表,并根据G的邻接表生成G的逆邻接表。

四、(15分)编写将两个二叉排序树合并为一个二叉排序树的算法。(假设两个二叉排序树中没有重复关键字。要求用最少的时间和辅助空间)

 

你可能感兴趣的:(C,数据结构)