武汉大学
2003年攻读硕士学位研究生入学考试试题
科目名称:程序设计 科目代码:780
注意:所有的内容必须答在答题纸上,凡答在试题上的一律无效。
指定参考书:
一 名词解释(15=5*3’)
1.机器语言,汇编语言,高级语言
2.堆栈
3.立即寻址
4.算法
5.指针
二 简答题(20=5*4’)
1.汇编语言的特点。
2.在汇编语言程序中,程序设计的基本方法有哪些?
3.C语言的特点。
4.条件编译。
5.内部函数和外部函数。
三 阅读程序,写出运行结果(20=5*4’)
1.阅读下列程序,写出程序运行后BUF的内容。
STACK SEGMENT STACK
DB 200 DUP(0)
STACK ENDS
DATA SEGMENT
BUF DB 31H,12H,35H,20H,51H,7FH,60H,0,0FFH
N=$-BUF
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
BEGIN: MOV AX,DATA
MOV DS,AX
MOV SI,1
LOPI: MOV DI,SI
INC DI
MOV AL,[BUF+SI-1]
LOPJ: CMP AL,[BUF+DI-1]
JBE NEXT
XCHG [BUF+DI-1],AL
MOV [BUF+SI-1],AL
NEXT: INC DI
CMP DI,N
JBE LOPJ
INC SI
CMP SI,N-1
JBE LOPI
MOV AH,4CH
INT 21H
CODE ENDS
END BEGIN
2.main()
{ int i,j,k;
for(i=0;i<=3;i++)
{ for(j=0;j<=2-i;j++)
printf(“ ”);
for(k=0;k<=2*i;k++)
printf(“#”);
printf(“n”);
}
for(i=0;i<=2;i++)
{ for(j=0;j<=i;j++)
printf(“ ”);
for(k=0;k<=4-2*i;k++)
printf(“#”);
printf(“n”);
}
}
3.sub1(int *p1,int *p2)
{ int temp;
temp=*p1;
p1=p2;
*p2=temp;
}
main()
{ int a,b;
int *pointer1,*pointer2;
scanf(“%d,%d”,&a,&b);
pointer1=&a;pointer2=&b;
if(a
printf(“n%d,%dn”,a,b);
}
设a=10,b=5
4.#define N 7
main()
{ int i,j,a[N][N];
for(i=0;i
{ a[i][i]=1;
a[i][1]=1;
}
for(i=3;i
for(j=2;j<=i-1;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=1;i
{ for(j=1;j<=i;j++)
printf(“%6d”,a[i][j]);
printf(“n”);
}
printf(“n”);
}
5.main()
{ unsigned a,b,c,d;
scanf(“%o”,&a);
b=a>>4; c=~(~0<<4); d=b&c;
printf(“%o,%dn%o,%dn”,a,a,d,d);
}
设a=331
四 分别完成下列各题(20=5*4’)
1. a%=(n%=2),其中a=12,n=5,求该表达式的值。
2.画出N-S流程图的几种基本流程图符号。
3.举例说明动态链表的建立过程。
4.简要说明C源程序上机的步骤和运行过程。
5.设计一个C语言函数,使给出的一个数的原码,能得到该数的补码。
五 完成下列各题,画出流程图(45=5*9’)
1.写一个用矩形法求定积分的通用函数。分别求:
∫01 sin x dx, ∫-11 cos x dx, ∫02 ex dx
2.用指向指针的方法对15个字符串排序并输出。
3.将一个链表按倒序排列,即将链头当链尾,链尾当链头。
4.有两个磁盘文件,其中一个文件中存放一行数字,另一个文件中存放一行字母,要求把这两个文件中的信息合并(按数字在前字母在后,并按0…9a…z的顺序排列),输出到一个新文件中。
5.阅读下列程序,说明其功能:
main()
{ int i;
char *p[10],str[10][20];
for(i=0;i<10;i++)
p[i]=str[i];
for(i=0;i<10;i++)
scanf(“%s”,p[i]);
sort(p);
for(i=0;i<10;i++)
printf(“%sn”,p[i]);
}
sort(char *p[]
{ int i,j;
char *temp;
for(i=0;i<9;i++)
for(j=0;j<9-i;j++)
if(strcmp(*(p+j),*(p+j+1))>0)
{ temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
六 完成下列各题(30=5*6’)
1. C语言程序调试时,常出现的错误类型有几种,怎样解决?
2. C语言程序构成特点是什么?有什么优点?
3. 设以下各数均为有符号数的补码表示,请比较它们的大小:
327H与0A521H;80H与32H;8000H与0AF3BH;72H与31H。
4. CPU与外设之间常用的数据传送方式有哪几种?对于外设与CPU不同步且外设速度很慢的情况,采用哪种方式传送数据合适?
5.简要说明C++的特点。 |