中国科学院软件研究所 一九九六年招收硕士学位研究生入学考试试题 试题名称:软件基础 一.(10分) 1.给出下列表达式的逆波兰表示(后缀式):(各1分) a+b*c; a≦b+c∧a>d∨a+b≠e 2.写出下列语句的逆波兰式表示(后缀式):(各1分) ﹤变量﹥:=﹤表达式﹥ IF ﹤表达式﹥ THEN ﹤语句1﹥ ELSE ﹤语句2﹥ 3.写出算术表达式 A+B*(C-D)+E/(C-D)**N 的四元式、三元式和间接三元式序列。(各2分) 二.(10分)写一文法,使其语言是偶数的集合,但不允许有以0居首的偶 整数。 三.(10分)LRU算法的基本思想是什么?有什么缺点?给出该算法的流程图。 四.(10分)设有一个具有n个信息元素的环形缓冲区,A进程顺序地把信息写 入缓冲区,B进程依次地从缓冲区读出信息,回答下列问题: 叙述A、B两进程的相互制约关系; 判别下列用P、V操作表示的同步算法是否正确?如果不正确,试说明 理由,并修改成正确算法。 var buffer:array 0..N-1 of T; in,out: 0..N-1; var S1,S2:Semaphore; S1:==0; s2:=N; in:=out:=0; Procedure A: begin repeat 生产数据m; P(S2); buffer(in):=m; in:=(in+1) mod N; V(S1); forever end Procedure B: begin repeat V(S2); m:=buffer(out); 消费m; out:=(out+1) mod N; P(S1); forever end 五.(10分)试简述UNIX的文件读写过程。 六.(10分)试给出运算变量均为整数的简单算术表达式所需最少临时单元个 数的算法(假定不许用代数规则变更表达式的计值顺序)。 例如:A+B*C需要一个临时单元为(B*C);(A+B)*(C+D)+E则 需要两个临时单元,一个为C+D,另一个既为A+B又为(A+B)*(C+D)。 七.(10分)已知三维空间(直角坐标系)有n个点,请编写一个函数过程, 求通过某一特定平面的点数。 八.(13分)编写一过程,对一个n×n矩阵,通过行变换,使其每行元素的平 均值按递增顺序排列。 九.(17分)请编写一过程,对具有n个整数的序列进行二叉树排序。