中国科学院软件研究所 一九九五年招收硕士学位研究生入学考试试题答案 试题名称:软件基础 一. 1.邻接矩阵: 2.邻接表 1 1 0 1 0 0 0 2 0 0 1 3 1 0 0 0 4 3.逆邻接表 4.十字链表 1 2 3 4 二.解决该问题的一个C语言程序如下: main() { int M[100]; int yi,zi,j,y,z; M[0]=1; j=1; y=3; yi=0; z=4; zi=0; for(j=1;j<100;j++) { if (y<z) { M[j]=y; yi++; y=2*M[yi]+1; } else if (y==z) { M[j]=y; yi++; zi++; y=2*M[yi]+1; z=3*M[zi]+1;} else { /* (y>z) */ M[j]=z; zi++; z=3*M[zi]+1;} } for (j=0;j<100;j++) printf(“%d ”,M[j]); } ?三.1.对半查找程序只适用于以向量(数组)做存储结构的有序表。 2.程序A和B正确,C错误。 程序B的效率更高一些。 四.快速排序的非递归程序用PASCAL语言描述如下,要排序的元素n个。 type index = 0..n; type item = record key : integer; 其它项; end //----------------------procedure START----------------------------------- procedure quicksort const m = 12; /* 栈大小 */ var i,j,l,r :index; x,w :item; s :0..m; stock :array [1..m] of record l , r : index end; a : array [1..n] of item; begin s:=1; stack[2].l:=1; stack[1].r:=n; repeat l:=stack[s].l; r:=stack[s].r; s:=s-1; repeat i:=1; j:=r; x:=a[(l+r) div 2]; repeat while a[i].key < x.key do i:=i+1; while x.key < a[j].key do j:=j-1; if i<=j then begin w:=a[i]; a[i]:=a[j]; a[j]:=w; i:=i+1; j:=j-1; end until i>j; if i<r then begin s:=s+1; stack[s].l:=i; stack[s].r:=r end r:=j until l>=r until s=0 end {quicksort} 五. 六.1.S:无符号数, I:无符号整数, R:无符号实数, W:无符号实数的小数点前面部分,F:无符号实数的小数点后面部分。 2.当第一个终结符是d时,不知应把d归约成I呢,还是空归约成W。 七. S’ S print(S.val) S L1.L2 S.val:=L1.val+L2.val/2 S L S.val:=L.val L L1B L.val:=L1.val*2 + B.val; L.length:=L1.length + 1 L B L.val:=B.val L.length:=2 B 1 B.val:=1 B 0 B.val:=0 八.1.(简单回答) 根据C的存储分配特点,被调用过程总能知道第一个实参的位置,printf 的实现是从第一个参数分析还有几个参数。 2.执行前常数区是 cp1 cp2 ↓ ↓ 12345\0abcdefghij\0 strcpy执行后,该区域变成了: abcdefghij\0fghij\0 ↑ ↑ cp1 cp2 九.1.多道程序设计通过将用户的CPU请求和I/O请求重叠起来的办法,提高 了CPU的使用效率。 2.它使用直接存取的大容量磁盘作为缓冲,将一个可共享的磁盘空间,改 造成若干台输入设备和输出设备,并使得I/O设备与CPU并行操作。 3.OPEN:告诉系统所指定的文件将变成活跃,其文件说明(或文件目录) 复制到内存中; CLOSE:告诉系统,用户不再使用指定的文件,其文件说明不需保存在 内存中 4.空闲文件目录,空闲盘块链,位示图,成组链接法。 5.死锁是指在系统中,有二个后多个进程无限期的等待永远不会发生的条 件的一种系统状态。 对待死锁的对策有:死锁的预防、避免、死锁的检测和解除。 十. prec结构,含常用信息,常驻内存; PCB( user结构,含进程运行时所用信息,可调入/调出内存。 目的:节省内存空间。 名号 : 含文件名及编号i; FCB( 小结点: 对应i的其它文件控制信息。 目的: 加快检索速度,便于文件的共享。 十一.1.解决了存储器零头(碎片)问题。 2.实现要点: a.存储器等分为块,称之为存储块(页架),是分配的单位,其大 小为 。 b.作业地址空间分页,页与块的大小相等。 c.页表、作业在物理空间上不要求连续存放,存放页表表目,建立 页与块的对应关系。 d.地址变换机构,动态地实现逻辑地址到物理地址的映射。 十二.a.读者之间同时读;读者与写者之间互斥进行;写者之间互斥进行。 设置 mutex1:各读者进程使用计数器rc时的互斥信号量; mutex2:写者之间、写者与读者之间互斥使用文件所用的互斥 信号量。 b.用类Pascal语言描述算法如下: begin mutex1:=1; mutex2:=1; rc:=0; cobegin ┇ reader: begin P(mutex1); rc:=rc+1; if rc=1 then P(mutex2); V(mutex1); Reading the file: P(mutex1); rc:=rc-1; if rc=0 then V(mutex2); V(mutex1); end; ┇ writer: begin P(mutex2); Writing the file; V(mutex2); end; ┇ coend; end. c.增加一个信号量WW,用以写进程到时封锁后续的读者。相应的算法改 为: begin mutex1:=1; mutex2:=1; WW:=1; rc:=0 cobegin ┇ reader: begin P(WW); P(mutex1); rc:=rc+1; if rc=1 then P(mutex2); V(mutex1); V(WW); Reading the file; P(mutex1); rc:=rc-1; if rc=0 then V(mutex2); V(mutex1); end; writer: begin P(WW); P(mutex2); Writing the file; V(mutex2); V(WW): end; coend; end。