中国科学院计算技术研究所
一九九六年招收硕士学位研究生入学考试试题
试题名称:软件基础
(10分)已知序列17,31,13,11,20,35,25,8,4,11,24,40,27。请画出该序列的二叉排序树,并分别给出下列操作后的二叉树;
①插入数据9; ②删除结点17; ③再删除结点13。
(15分)请编写一个程序,生成如下序列的前n项。
1,2,1,2,3,2,1,2,3,4,3,2,1,2,3,4,5,4,3,2,1, 2,……
(15分)已知平面上(直角坐标系)的n个点,请编一个函数,求同一条直线所能通过的最多点数。
(10分)下面的文法产生a的个数和b的个数相同的非空a,b串。
S aB | bA
B bS | aBB | b
A aS | bAA | a
其中非终结符B推出b比a的个数多1个的串,A则反之。
说明该文法是二义的。
对上述文法略作修改,使之非二义,并产生同样的语言。略作修改的含义是:不增加非终结符。
(10分)某些语言允许给出名字表的一个属性表,也允许声明嵌在另一个声明里面,下面文法抽象这个问题。
D attrlist namelist | attrlist(D)
namelist id,namelist | id
attrlist A,attrlist | A
A decimal | fixed | float | real
D attrlist(D)的含义是:在括号中的声明提到的所有名字有attrlist
中给出的属性,而不管声明嵌套多少层。写一个翻译方案,它将每个名字
的属性个数填入符号表。
(10分)下面是一个C语言程序及其运行结果。从运行结果看函数func中四个局部变量i1,j1,f1,e1的地址间隔和它们类型的大小不一致,试分析不一致的原因。
#include <stdio.h>
func(i , j , f , e )
short i , j ; float f1 , e1;
{
short i1, j1; float f1, e1;
i1 = i; j1 = j; f1 = f; e1 = e;
printf(“Addresses of i, j, f, e = %d, %d, %d, %d\n”, &i, &j, &f, &e);
printf(“Addresses of i1, j1, f1, e1 = %d, %d, %d, %d\n”, &i1, &j1, &f1, &e1);
printf(“Size of short, int, long, float, double = %d, %d, %d, %d, %d\n” ,
sizeof(short), sizeof(int), sizeof(long), sizeof(float), sizeof(double));
}
main()
{
short i, j; float f, e;
i = j = 1; f = e = 1.0;
func(i , j , f , e);
}
运行结果:
Addresses of i, j, f, e = -268438178, -268438174, -268438172, -268438164;
Addresses of i1, j1, f1, e1 = -268438250, -268438252, -268438256, -268438260;
Size of short , int , long , float , double = 2, 4, 4, 4, 8
(5分)在UNIX系统中,对换区的功能是什么?UNIX系统V是如何对对换区进行管理的?
(5分)UNIX系统V为进程之间的通信提供了哪些工具?各用于什么场合?
(5分)操作系统中的文件共享有几种形式?它们是如何实现的?各有什么特点?
(5分)Dijkstra(1965)提出的银行家算法的主要思想是什么?它能够用来解决实际中的死锁问题吗?为什么?
(10分)有五个批处理的作业(A,B,C,D,E)几乎同时到达一个计算中心,估计的运行时间分别为2,4,6,8,10分钟,它们的优先数分别为1,2,3,4,5(1为最低优先级)。对下面的每种调度算法,分别计算作业的平均周转时间。
①最高优先级优先;
②时间片轮转(时间片为2分钟);
③FIFO(作业到达的顺序为C,D,B,E,A);
④短作业优先。