东北大学
2004年攻读硕士学位研究生试题
C语言程序设计部分
一、(20分,每小题5分)写出下列程序的运行结果(不必抄题,标明题号,答案另答在答卷纸上)
1.Int f(int  *x  int  y)
  { if  (*x<y )*x+=y;
  else y+=*x;
  return(*x+y);
}
void  main()
{ int a[3]={5,3,8},  *p=a;
*p=f(&a[1],a[2]);
*p+=f(&a[1],a[2]);
  printf(“%d%d%d\n”,a[0],a[1],a[2]);
}
2.  int main(intargc, char *argv[])
{FILE  *fp1, *fp2;
Int c;
If((fp1=fopen(argv[1], “r”))==NULL)
{  printf(“Cannot open %s\n”,argv[1]);    return(1);
}
if((fp2=fopen(argv[2], “a”))==NULL)
{  printf(“Cannot open %s\n”,argv[2]);    return(1);
}
c=fseek(fp2,0L,2);
while ((c=fgetc(fp1))!=EOF)  fputc(c,fp2);
fclose(fp1);    fclose(fp2);
}
3.  void  main()
  { int a[10],  *p;
c语言编写递归函数for (p=a;  p<(a+10); p++)
  scanf(“%d”,p);
for(; p<(a+10);p++)
printf(“%d”,*p);
}
4.void  main()
{ int I=9,j=0;
char  str[3]=”*#”, ch=str[0];
do
{  printf(“%c”,ch);
    if(I%5==0)
      j++;
}while  ((ch=str[j])||I--);
}
}
二、10分(不必抄题,标明题号,答案另答在答卷纸上)
  1.(5分)下面函数声明中有语法错误的是:
A)int f(float (*p)[],int n);                  B) int f(float  *p[], int n);
C) int f(float  p[], int n);                  D) int f(float p[ ][ ], int n );
2. (5) 分析下面的程序有没有错误,如果没有错误,写出程序运行的结果;如果有错误,指出存在的错误,并说明怎样改正。
Void  main()
{
char  str[5][20]={“Follow me ”,”BASIC”,”Great Wall”,”FORTRAN”,”Computer design”};
char *name[5],**p;
int I;
p=name;
for (I=0; I<5; I++)
*p++=str+I;
for (I=0;I<5; I++)
if (strchr(name[i], ‘ ’))
printf(“%s\n”,name[I]);
}
三、(15分)设有算术表达式,其中包含有大括号“{}”、中括号“[ ]”、小括号“()”,试编写一个递归函数,判断表达式中的括号是否匹配。
四、(15分)设有一个整数序列,有n个整数(0<n<100)。试编写程序,根据整数的大小,对其从小到大进行连续编号。要求:(1)不能改变序列的顺序;(2)相同的整数只保留一个。
例如:  输入序列为:5,3,5,7,8,3,5,10,6
        则输出为:    序列一  5,3,7,8,10,6
                      编号一  2,1,4,5,6,3
五、(15分)设有两个有序单链表,一为升序,一为降序。试编写程序,将这两个链表合并为一个有序链表。
                  数据结构部分
一、完成下列问题(20分)
1、(6分)对下面的关键字集{30,15,21,40,25,26,36,37,10,20},写出快速排序的每趟结果和最终结果
2、(6分)已知有一个10个顶点的连通图,顶点编号为1至10,其边的关系集合表示为{(1,2),(1,3),(1,8),(2,4),(3,9),(3,10),(5,7),(6,7),(7,8),(8,9)},试画出该连通图及以顶点①为根的深度优先生成树。
3、(8分)已知二叉树的存储结构为二叉链表,LinkListBiTree为已定义的指针类型,ListNode为已定义的结点类型,阅读下面算法并回答:
LinkList  L=NULL;
void inorder_list (BiTree T){
        LinkList  p;
        If (T){
          Inorder_list(T->lchild);
          If ((!T->lchild)&&(!T->rchild)){
            p=(ListNode  *)malloc (sizeof(ListNode));
            p->data=T->data;  p->next=L;
            L=p;
        }//if
          Inorder_list (T->rchild);
        }//if
      }//Inorder_list
(1)说明该算法的功能;
(2)对于一棵有8结点的完全二叉树(假设结点顺序为A、B、C、D、E、F、G、H),画出执行上述算法后所建成立的结构。
二、(20分)某商店有一批手机,按价格从高到低构成一个单链表,结点包括数量、价格、指针。现新到n台价格不同的手机,编写将新到手机插入到原链表中的算法。
三、(20分)假设哈希函数为H(key编写用链地址方法解决冲突的哈希表的插入和删除算法。
四、(15分)设用输入广义表表示的字符串来创建二叉链表结构的二叉树,具体规定如下:广义表的表名作为树的根结点,每个结点的左子树和右子树用逗号分隔,若仅有右子树,则逗号不能省略;以特殊符号‘$’表示广义表的结尾。
(1)若输入的字符串为A(B(C),D(E(,F),G)),画出所表示的二叉树。
(2)实现用上述方法创建二叉树的算法。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。