中国科学院软件研究所
一九九五年招收硕士学位研究生入学考试试题
试题名称:软件基础
一.(6分)请给出下图的邻接矩阵、邻接表、逆邻接表和十字链表。
二.(12分)编一个程序,按递增次序生成集合M的最小的100个数。M的定
义如下:
(a)数1属于M;
(b)如果x属于M,则y=2*x+1和z=3*x+1也属于M;
(c)再没有别的数属于M。 (M={1,3,4,7,9,10……})
三.(8分)使用对半查找程序的限制条件是什么?下列的三种对半查找程序
(Pascal语言),哪些是正确的,哪个效率高一些?假定N>0,以及下列变
量已经定义。
var i,j,k :integer;
a :array [1..N] of T;
x :T;
程序A:
i:=1; j:=N;
repeat
k:=(i+j) div 2
if a[k]<x then i:=k else j:=k;
until (a[k]=x) ∨(i≧j)
程序B:
i:=1; j:=N;
repeat
k:=(i+j) div 2;
if x≦a[k] then j:=k-1;
if a[k]≦x then i:=k+1;
until i>j;
程序C:
i:=1; j:=N;
repeat
k:=(i+j) div 2;
if x<a[k] then j:=k else i:=k+1;
until i≧j
四.(14分)用高级语言(C或Pascal)设计一个非递归的快速排序程序。
五.(6分)将下面的DFA化成最简DFA(注意,大写C和小写c是不同符号)
六.(7分)文法G的产生式如下:
S I|R I d|Id R WpF
W ε|Wd F d|Fd
令d表示任意数字,p表示十进制小数点,那么非终结符S,I,R,W
和F在程序设计语言中分别表示什么?
该文法是LR(1)文法吗?为什么?
七.(10分)有文法:
S L.L|L
L LB|B
B 0|1
给此文法配上语义动作子程序(或者说为此文法写一个语法制导定义),它
输出S产生的二进制数的值。例如,输入101.101时,输出5.625。
八.(7分)
下面C语言程序中,函数printf的调用仅含一个参数。该程序输出三个
整数。试从存储分配和printf的实现来分析,为什么此程序仍有三个整
数输出。
main(){ printf(“%d,%d,%d\n”) }
考虑下面的C程序
main()
{
char *cp1,*cp2;
cp1:= “12345”;
cp2=“abcdefghij”;
strcpy(cp1,cp2);
printf(“cp1=%s\ncp2=%s\n”,cp1,cp2);
}
该程序运行的结果是:
cp1=abcdefghij
cp2=ghij
试分析,为什么cp2所指向的串被修改了?
九.简答题:(2分×5)
采用多道程序设计的主要优点是什么?
什么是SPOOLing技术?
叙述“打开(OPEN)”和“关闭(CLOSE)”文件操作的意义。
有哪些对空闲盘块的管理方案?UNIX系统采用的是什么?
什么是死锁?对死锁问题有哪些对策?
十.(5分)在UNIX系统中,将进程控制块(PCB)和文件控制块(FCB)
各分解为哪二个部分?为什么?
十一.(6分)分页存储管理有效的解决了什么问题?试叙述其实现原理。
十二.(9分)多个进程共享一个文件,其中只读文件的称之为读者,其余只写
的称之为写者,读者可以同时读,但是写者只能独立地写。请
说明进程间得相互制约关系;应设置哪些信号量;
用P、V操作写出其同步算法;
修改上述的同步算法,使得它对写者优先,即一旦有写者到达,后续
的读者都必须等待,而无论是否有读者在读文件。