2004年下半年软件设计师试题及答案

●内存按字节编址,地址从A4000H到CBFFFH,共有_(1)_字节。若用存储容量为32K*8bit的存储器芯片构成该内存,至少需要_(2)_ 片。

(1)A.80K   B.96K   C.160K   D.192K

(2)A.2    B.5    C.8     D.10

●中断响应时间是指_(3)_。

(3)A.从中断处理开始到中断处理结束所用的时间 B.从发出中断请求到中断处理结束所用的时间

C.从发出中断请求到进入中断处理所用的时间 D.从中断处理结束到再次中断请求的时间

●若指令流水线把一条指令分为取指、分析和执行三部分,且三部分的时间分别是t取指=2ns ,t分析=2ns,t执行=1ns。则100条指令全部执行完毕需_(4)_ns。

(4)A.163   B.183   C.193   D.203

●在单指令流多数据流计算机(SIMD)中,各处理单元必须 _(5)_。

(5)A.以同步方式,在同一时间内执行不同的指令 B.以同步方式,在同一时间内执行同一条指令

C.以异步方式,在同一时间内执行不同的指令 D.以异步方式,在同一时间内执行同一条指令

●单个磁头在向盘片的磁性涂层上写入数据时,是以_(6)_方式写入的。

(6)A.并行     B.并一串行    C.串行     D.串一并行

●容量为64块的Cache采用组相联方式映像,字块大小为128个字,每4块为一组。若主存容量为4096块,且以字编址,那么主存地址应为_(7)_位,主存区号应为_(8)_位。

(7)A.16      B.17       C.18      D.19

(8)A.5      B.6        C.7       D.8

●软件开发中的瀑布模型典型地刻画了软件生存周期的阶段划分,与其最相适应的软件开发方法是_(9)_。

(9)A.构件化方法  B.结构化方法   C.面向对象方法 D.快速原型方法

●下述任务中,不属于软件工程需求分析阶段的是_(10)_ 。

(10)A.分析软件系统的数据要求     B.确定软件系统的功能需求

C.确定软件系统的性能要求     D.确定软件系统的运行平台

●软件设计的主要任务是设计软件的结构、过程和模块,其中软件结构设计的主要任务是要确定_(11)_。

(11)A.模块间的操作细节        B.模块间的相似性

C.模块间的组成关系        D.模块的具体功能

●系统测试是将软件系统与硬件、外设和网络等其他因素结合,对整个软件系统进行测试。_(12)_不是系统测试的内容。

(12)A.路径测试  B.可靠性测试   C.安装测试    D.安全测试

●项目管理工具中,将网络方法用于工作计划安排的评审和检查的是_(13)_。

(13)A.Gantt图   B.PERT网图    C.因果分析图   D.流程图

●在结构化分析方法中,数据字典是重要的文档。对加工的描述是数据字典的组成内容之一,常用的加工描述方法_(14)_。

(14)A.只有结构化语言         B.有结构化语言和判定树

C.有结构化语言、判定树和判定表  D.有判定树和判定表

●CMM模型将软件过程的成熟度分为5个等级。在_(15)_使用定量分析来不断地改进和管理软件过程。

(15)A.优化级   B.管理级     C.定义级     D.可重复级

●在面向数据流的设计方法中,一般把数据流图中的数据流划分为_(16)_两种。

(16)A.数据流和事务流    B.变换流和数据流  C.变换流和事务流     D.控制流和事务流

●_(17)_属于第三层VPN协议。

(17)A.TCP     B.IPsec      C.PPOE      D.SSL

●下图所示的防火墙结构属于_(18)_。

(18)A.简单的双宿主主机结构        B.单DMZ防火墙结构

C.带有屏蔽路由器的单网段防火墙结构  D.双DMZ防火墙结构

●电子商务交易必须具备抗抵赖性,目的在于防_(19)_。

(19)A.一个实体假装成另一个实体    B.参与此交易的一方否认曾经发生过此次交易

C.他人对数据进行非授权的修改、破坏    D.信息从被监视的通信过程中泄漏出去

●知识产权一般都具有法定的保护期限,一旦保护期限届满,权利将自行终止,成为社会公众可以自由使用的知识。_(20)_权受法律保护的期限是不确定的,一旦为公众所知悉,即成为公众可以自由使用的知识。

(20)A.发明专利   B.商标      C.作品发表    D.商业秘密

●甲、乙两人在同一时间就同样的发明创造提交了专利申请,专利局将分别向各申请人通报有关情况,并提出多种解决这一问题的办法,不可能采用(21)_的办法。

(21)A.两申请人作为一件申请的共同申请人  B.其中一方放弃权利并从另一方得到适当的补偿

C.两件申请都不授予专利权      D.两件申请都授予专利权

● 《计算机软件产品开发文件编制指南》》(GB 8567-88)是_(22)_ 标准。

(22)A.强制性国家  B.推荐性国家  C.强制性行业   D.推荐性行业

●虚拟存储管理系统的基础是程序的_(23)_理论,这个理论的基本含义是指程序执行时往往会不均匀地访问主存储器单元。根据这个理论,Denning提出了工作集理论。工作集是进程运行时被频繁地访问的页面集合。在进程运行时,如果它的工作集页面都在_(24)_内,能够使该进程有效地运行,否则会出现频繁的页面调入/调出现象。(23)A.全局性    B.局部性    C.时间全局性   D.空间全局性

(24)A.主存储器   B.虚拟存储器   C.辅助存储器   D.u盘

●在UNIX操作系统中,若用户键入的命令参数的个数为1时,执行cat$1命令;若用户键入的命令参数的个数为2时,执行cat>>$2<$1命令。请将下面所示的Shell程序的空缺部分补齐。

case_(25)_in

1)cat$1;;

2)cat>>$2<$1;;

*)echo 'default...'

esac

(25)A.$$        B.$@       C.$#       D.$*

●进程PA不断地向管道写数据,进程PB从管道中读数据并加工处理,如下图所示。如果采用PV操作来实现进程PA和进程PB间的管道通信,并且保证这两个进程并发执行的正确性,则至少需要_(26)_。

(26)A.1个信号量,信号量的初值为0  B.2个信号量,信号量的初值分别为0、1

C.3个信号量,信号量的初值分别为0、0、1  D.4个信号量,信号量的初值分别为0、0、1、1

●假设系统中有三类互斥资源R1、R2和R3,可用资源数分别为9、8和5。在To时刻系统中有P1、P2、P3、P4和P5五个进程,这些进程对资源的最大需求量和已分配资源数如下表所示。如果进程按_(27)_序列执行,那么系统状态是安全的。

(27)A.P1→P2→P4→P5→P3     B.P2→P1→P4→P5→P3

C.P2→P4→P5→P1→P3     D.P4→P2→P4→P1→P3

●某一非确定性有限自动机(NFA)的状态转换图如下图所示,与该NFA等价的正规式是_(28)_,与该NFA等价的DFA是_(29)_。

(28) A.0*|(0|1)0   B.(0|10)*   C.0*((011)0)*   D.0*(10)*

A

●在UML提供的图中,可以采用_(30)_对逻辑数据库模式建模;_(31)_用于接口、类和协作的行为建模,并强调对象行为的事件顺序; _(32)_用于系统的功能建模,并具强调对象间的控制流。

(30)A.用例图   B.构件图   C.活动图    D.类图

(31)A.协作图   B.状态图   C.序列图    D.对象图

(32)A.状态图   B.用例图   C.活动图    D.类图

●在一棵完全二叉树中,其根的序号为1,_(33)_可判定序号为p和q的两个结点是否在同一层。

(33)A.Llog2P」=Llog2q」     B.log2P = log2q

C.Llog2P」+1=Llog2q」    D.Llog2P」=+Llog2q」+1

●堆是一种数据结构,_(34)_是堆。

(34)A.(10,50,80,30,60,20,15,18) B.(10,18,15,20,50,80,30,60)

C.(10,15,18,50,80,30,60,20) D.(10,30,60,20,15,18,50,80)

●_(35)_从二叉树的任一结点出发到根的路径上,所经过的结点序列必按其关键字降序排列。

(35)A.二叉排序树 B.大顶堆    C.小顶堆    D.平衡二叉树

●若广义表L=((1,2,3)),则L的K度和深度分别为_(36)_。

(36)A.1和1    B.1和2     C.1和3     D.2和2

●若对27个元素只进行三趟多路归并排序,则选取的归并路数为_(37)_。

(37)A.2     B.3      C.4      D.5

●_(38)_是多媒体内容描述接口标准。

(38)A.MPEG-1   B.MPEG-2    C.MPEG-4    D.MPEG-7

●未经压缩的数字音频数据传输率的计算公式为_(39)_。

(39)A.采样频率(Hz)*量化位数(bit)*声道数*1/8  B.采样频率(Hz)*量化位数(bit)*声道数

C.采样频率(Hz)*量化位数(bit)*1/8  D.采样频率(Hz)*量化位数(bit)*声道数*1/16

●彩色打印机中所采用的颜色空间是_(40)_。

(40)A.RGB彩色空间 B.CMY彩色空间 C.YUV彩色空间 D.HSL彩色空问

●MPEG视频中的时间冗余信息可以采用_(41)_的方法来进行压缩编码。

(41)A.帧间预测和变换编码     B.霍大曼编码和运动补偿

C.变换编码和行程编码     D.帧间预测和运动补偿

●假定每一车次具有唯一的始发站和终点站。如果实体“列车时刻表”属性为车次、始发站、发车时间、终点站、到达时间,该实体的主键是_(42)_;如果实体“列车运行表”属性为车次、日期、发车时间、到达时间,该实体的主键是_(43)_。通常情况下,上述“列车时刻表”和“列车运行表”两实体型间_(44)_联系。

(42)A.车次    B.始发站    C.发车时间  D.车次,始发站

(43)A.车次    B.始发站    C.发车时间  D.车次,日期

(44)A.不存在   B.存在一对一  C.存在一对多 D.存在多对多

●关系模式R(U,F),其中U=(W,X,Y,Z),F={WX→Y,W→X,X,→Z,yVw}。关系模式R的候选码是_(45)_,_(46)_是无损连接并保持函数依赖的分解。

(45)A.W和Y    B.WY      C.WX     D.WZ

(46)A.ρ={R1(WY),R2(XZ)}     B.ρ={R1(WZ),R2(XY)}

C.ρ={R1(WXY),R2(XZ)}     D.ρ={R1(WX),R2(YZ)}

●类的实例化过程是一种实例的合成过程,而不仅仅是根据单个类型进行的空间分配、初始化和绑定。指导编译程序进行这种合成的是_(47)_。

(47)A.类层次结构 B.实例的个数 C.多态的种类 D.每个实例的初始状态

●重置的基本思想是通过_(48)_机制的支持,使得子类在继承父类界面定义的前提下,用适合于自己要求的实现去置换父类中的相应实现。

(48)A.静态绑定  B.对象引用   C.类型匹配  D.动态绑定

●OMT定义了三种模型来描述系统。_(49)_可以用状态图来表示;_(50)_可以用数据流图来表示。_(51)_为上述两种模型提供了基本的框架。

(49)A.对象模型  B.功能模型   C.动态模型  D.类模型

(50)A.对象模型  B.功能模型   C.动态模型  D.类模型

(51)A.对象模型  B.功能模型   C.动态模型  D.类模型

●采用动态规划策略求解问题的显著特征是满足最优性原理,其含义是_(52)_。

(52)A.当前所做出的决策不会影响后面的决策

B.原问题的最优解包含其子问题的最优解

C.问题可以找到最优解,但利用贪心法不能找到最优解

D.每次决策必须是当前看来最优的决策才可以找到最优解

●下面函数中渐进时间最小的是_(53)_。

(53)A.T1(n)=n+nlogn        B.T2(n)=2n+nlogn 

C.T3(n)=n2—logn        D.T4(n)=n+100logn

●下面的程序段违反了算法的_(54)_原则。

Void sam()  {

int n=2;

while(!odd(n))

n+=2;

printf(n);

}

(54)A.有穷性    B.确定性   C.可行性    D.健壮性

●拉斯维加斯(Las Vegas)算法是一种常用的_(55)_算法。

(55)A.确定性    B.近似    C.概率     D.加密

●在分支-限界算法设计策略中,通常采用_(56)_搜索问题的解空间。

(56)A.深度优先   B.广度优先  C.自底向上   D.拓扑序列

●在下列算法设计方法中,_(57)_在求解问题的过程中并不从整体最优上加以考虑,而是做出在当前看来是最好的选择。利用该设计方法可以解决 _(58)_问题。

(57)A.分治法    B.贪心法   C.动态规划方法 D.回溯法

(58)A.排序     B.检索    C.背包     D.0/1背包

●以关键字比较为基础的排序算法在最坏情况下的计算时间下界为O(nlogn)。下面的排序算法中,最坏情况下计算时间可以达到O(nlogn)的是_(59)_;该算法采用的设计方法是_(60)_。

(59)A.归并排序 B.插入排序 C.选择排序 D.冒泡排序

(60)A.分治法 B.贪心法 C.动态规划方法 D.回溯法

●以太网100BASE-TX标准规定的传输介质是_(61)_ 。

(61)A.3类UTP    B.5类UTP   C.单模光纤   D.多模光纤

●许多网络通信需要进行组播,以下选项中不采用组播协议的应用是 _(62)_。在IPv4中把_(63)_类地址作为组播地址。

(62)A.VOD      B.Netmeeting C.CSCW     D.FTP

(63)A.A       B.B      C.D       D.E

●将双绞线制作成交叉线(一端按EIA/TIA 568A线序,另一端按EIA/TIA 568B线序),该双绞线连接的两个设备可为_(64)_。

(64)A.网卡与网卡         B.网卡与交换机

C.网卡与集线器   D.交换机的以太口与下一级交换机的UPLINK口

●以下不属于中间件技术的是 _(65)_ 。

(65)A.javaRMI    B.CORBA   C.DCOM      D.JavaApplet

●Networks can be interconnected by different devices in the physical layer networks can be connected by _(66)_ or hubs .which just move the bits from one network to an identical network. One layer up we find bridges and switches which operate at data link layer. They can accept _(67)_ examine the MAC address and forward the frames to a different network while doing minor protocol translation in the process in me network layer ,we have routers that can connect two networks, If two networks have _(68)_ network layer, the router may be able to translate between the packer formats. In the transport layer we find transport gateway, which can interface between two transport connections Finally, in the application layer, application gateways translate message _(69)_ .As an example, gateways between Internet e-mail and X.400 e-mail must _(70)_ the e-mail message and change various header fields.

(66)A.reapers   B.relays    C.packages   D.modems

(67)A.frimes              B.packets  C.packages   D.cells

(68)A.special   B.dependent C.similar     D.dissimilar

(69)A.syntax    B.semantics C.language   D.format

(70)A.analyze   B.parse   C.delete    D.create

● The purpose of the requirements definition phase is to produce a clear, complete, consistent, and testable _(71)_ of the technical requirements for the software product.During the requirements definition phase, the requirements definition team uses an iterative process to expand a broad statement of the system requirements into a complete and detailed specification of each function that the software must perform and each _(72)_ that it must meet. The starting point is usually a set of high level requirements from the _(73)_ that describe the project or problem.  In either case, the requirements definition team formulates an overall concept for the system and then defines _(74)_ showing how the system will be operated publishes the system and operations concept document and conducts a system concept review (SCR).  Following the SCR, the team derives _(75)_ requirements for the system from the high level requirements and the system and operations concept. using structured or object-oriented analysis. the team specifies the software functions and algorithms needed to satisfy each detailed requirement.

(71)A.function   B.definition   C.specification  D.statement

(72)A.criterion   B.standard    C.model      D.system

(73)A.producer   B.customer    C.programmer    D.analyser

(74)A.rules     B.principles   C.scenarios    D.scenes

(75)A.detailed   B.outlined    C.total      D.complete


试题一(15分)

阅读下列说明和数据流图,回答问题1至问题3,将解答填入答题纸的对应栏内。 某图书管理系统的主要功能是图书管理和信息查询。对于初次借书的读者,系统自动生成读者号,并与读者基本信息(姓名、单位、地址等)一起写入读者文件。 系统的图书管理功能分为四个方面:购入新书、读者借书、读者还书以及图书注销。

1、购入新书时需要为该书编制入库单。入库单内容包括图书分类目录号、书名、作者、价格、数量和购书日期,将这些信息写入图书目录文件并修改文件中的库存总量(表示到目前为止,购入此种图书的数量)。

2、读者借书时需填写借书单。借书单内容包括读者号和所借图书分类目录号。系统首先检查该读者号是否有效,若无效,则拒绝借书;若有效,则进一步检查该读者已借图书是否超过最大限制数(假设每位读者能同时借阅的书不超过5本),若已达到最大限制数,则拒绝借书;否则允许借书,同时将图书分类目录号、读者号和借阅日期等信息写入借书文件中。

3、读者还书时需填写还书单。系统根据读者号和图书分类目录号,从借书文件中读出与该图书相关的借阅记录,标明还书日期,再写回到借书文件中,若图书逾期,则处以相应的罚款。

4、注销图书时,需填写注销单并修改图书目录文件中的库存总量。 系统的信息查询功能主要包括读者信息查询和图书信息查询。其中读者信息查询可得到读者的基本信息以及读者借阅图书的情况;图书信息查询可得到图书基本信息和图书的借出情况。  图书管理系统的顶层图如图1-1所示;图书管理系统的第0层DFD图如图1-2所示 其中,加工2的细化图如图1-3所示。

【数据流图1-1】

图1-1图书管理系统顶层图

【数据流图1-2】

图1-2图书管理系统第0层DFD图

【数据流图1-3】

【问题1】(2分)

数据流图1-2中有两条数据流是错误的,请指出这两条数据流的起点和终点。

起点:读者文件终点,登记读者信息或3        

起点:处理查询请求或2        

终点:读者文件

【问题2】(6分)

数据流图1-3中缺少三条数据流,请指出这三条数据流的起点和终点。

起点:图书目录文件终点:图书信息查询或2.2        

起点:借书文件终点:读者信息查询或2.1        

起点:借书文件终点:图书信息查询或2.2

【问题3】(7分)

根据系统功能和数据流图填充下列数据字典条目中的(1)和(2):

查洵请求信息=[查询读者请求信息|查询图书请求信息]

读者情况=读者号+姓名+所在单位+{借书情况}

管理工作请求单=__(1)__  入库单=__(2)__

(1)[入库单|借书单|还书单|注销单]  

(2)分类目录号+书名+作者+价格+数量+购书日期

试题二(15分)

阅读下列说明和E-R图,回答问题1至问题3,将解答填入答题纸的对应栏内。

【说明】

某网上订书系统的E-R图(已消除了不必要的冗余)如图2-1所示(图中没有标出主码)。图中实体的说明如表2-1所示。相关属性说明如表2-2所示。

一个顾客可以在同一天填写多张购书单,每张购书单上可填写多种图书,每种图书可以订购多本,bid相同的图书在同一张购书单上不能出现多次。

注:为简化起见,不考虑信用卡号码泄漏所带来的安全性等问题。

【图2-1】

【问题1】(9分)

根据E-R图中给出的词汇,按照“有关模式名(属性,属性,...)”的格式,将此E-R图转换为4个关系模式,并指出每个关系模式中的主码和外码,其中模式名根据需要取实体名或联系名。

Customers(cid,cname,adderss,cardnum),主码:cid  

orders(Ordernum,Orderdate,cid) 主码:Ordernum ;外码:cid  

Books

注:以上四个关系模式和每个模式中的属性可按任意次序书写。

[问题2](2分)

创建Customers表时,cid使用INTEGER数据类型,cname使用CHAR(80)数据类型,address使用CHAR(200)数据类型,cardnum使用CHAR(16)数据类型并且要求此列值惟一。请在下列用于创建表Customers的SQL语句空缺处填入正确的内容。

CREATE TABLE Customers(

cid INTEGER NOT NULL,

cname  CHAR(80) NOT NULL,

address CHAR(200),

cardnum CHAR(16) NOT NULL,

__(1)__,

__(2)__

(1)PRIMARY KEY(cid)  (2)UNIQUE(cardnum)  注;(1)和(2)的次序可以颠倒。

【问题3】(4分)

如下的SQL语句是书店用于查询“所有订购了bid为‘123-456’图书的用户订购其他图书的情况”的不完整语句,请在空缺处填入正确的内容。

Select bid  From orderlist A  Where not exists(

Select * from Orders B  where A. ordernum = B.ordernum and B.cid __(3)__  (

Select bid from orderlist C,orders D  where __(4)__.bid='123-456'  and __(5)__=D.ordernum

)

)

(3)not in  (4)c  (5)C.ordernum

试题三(15分)

阅读下列说明和数据流图,回答问题1和问题3,将解答填入答题纸的对应栏内。

【说明】

某指纹门禁系统结构如图3-1所示,其主要部件有:主机(MainFrname)、锁控器(LockController)、指纹采集器(FingerReader)和电控锁(Lock)。

(1) 系统中的每个电控锁都有一个惟一的编号。锁的状态有两种:“已锁住”和“未锁住”。

(2) 在主机上可以设置每把锁的安全级别以及用户的开锁权限。只有当用户的开锁权限大于或等于锁的安全级别并且锁处于“已锁住”状态时,才能将锁打开。

(3) 用户的指纹信息、开锁权限以及锁的安全级别都保存在主机上的数据库中。

(4) 用户开锁时,只需按一下指纹采集器。指纹采集器将发送一个中断事件给锁控器,锁控器从指纹采集器读取用户的指纹并将指纹信息发送到主机,主机根据数据库中存储的信息来判断用户是否具有开锁权限,若有且锁当前处于“已锁住”状态,则将锁打开;否则系统报警。

该系统采用面向对象方法开发,系统中的类以及类之间的关系用UML类图表示,图3-2是该系统类图的一部分;系统的动态行为采用UML序列图表示,图3-3是用户成功开锁的序列图。

【问题1】(6分)

图3-2是该系统类图的一部分,依据上述说明中给出的术语,给出类Look的主要属性。

锁的编号、安全级别、锁的当前状态

【问题2](5分)

依据上述说明中给出的词语,将图3-3中的(1)~(5)处补充完整。

(1)中断事件 (2)读取用户指纹 (3)读取用户开锁权限  (4)读取锁的安全级别 (5)判断用户是否有权限开锁或用户是否可以开锁

【问题3】(4分)

组装(Composition)和聚集(Aggregation)是UML中两种非常重要的关系。请说明组装和聚集分别表示什么含义?两者的区别是什么?

组装和聚集都表示实例之间的整体/部分关系。组装是聚集的一种形式。  

聚集是概念性的,只是区分整体与部分。  

组装具有很强的归属关系,而且整体与部分的对象生存周期是一致的。  

或者回答:如果没有成分对象,组装对象也不存在;在任何时候,每个给定的成分对象只能是组装对象的组成部分。

试题四(15分)

阅读下列说明和数据流图,回答问题1和问题3,将解答填入答题纸的对应栏内。

【说明】

在并发系统设计中,通过对信号量s的P、V操作实现进程的同步与互斥控制。

P(S):S:=S-1,若S≥0,则执行P操作的进程继续执行;若S<0,则置该进程为阻塞状态,并将其插入阻塞队列。  V(S):S:=S+1,若S>0,则执行V操作的进程继续执行;若S≤0,则从阻塞队列唤醒一个进程,并将其插入就绪队列,然后执行V操作的进程继续执行。

【问题1】(4分)

在某并发系统中,有一个发送进程A、一个接收进程B、一个环形缓冲区BUFFER、信号量S1和S2。发送进程不断地产生消息并写入缓冲区BUFFER,接收进程不断地从缓冲区BUFFER取消息。假设发送进程和接收进程可以并发地执行,那么,当缓冲区的容量为N时,如何使用P、V操作才能保证系统的正常工作。发送进程A和接收进程B的工作流程如图4-1所示。请在图4-1中的空(1)~(4)处填入正确的内容。

(1)P(S1) (2)V(S2) (3)P(S2) (4)V(S1)

【问题2】(5分)

若系统中有多个发送进程和接收进程,进程间的工作流程如图4-2所示,其中空(1)~(4)的内容与图4-1相同。发送进程产生消息并顺序地写入环形缓冲区BUFFER,接受者进程顺序地从BUFFER中取消息,且每条消息只能读取一次。为了保证进程间的正常通讯,增加了信号量SA和SB。

① 请说明信号量SA和SB的物理意义,并在图4-2中的空(5)和空(6)处填入正确的内容。

② 请从图4-2的(a)~(1)中选择四个位置正确地插入P(SA)、V(SA)、P(SB)、V(SB)。

【图4-2]】

(5)1,表示允许同时对缓冲区进行写操作的进程数量(0.5分)   

(6)1,表示允许同时对缓冲区进行读操作的进程数量(0.5分)  

解法1:P(SA)插入位置(b),V(SA)插入位置(f),P(SB)插入位置(h)(若将P(SB)插入位置 (g),则扣0.5分),V(SB)插入位置(k);  

解法2:P(SB)插入位置(b),V(SB)插入位置(f),P(SA)插入位置(h)(若将P(SA)插入位置 (g),则扣0.5分),V(SA)插入位置(k);

【问题3】(6分)

设系统中只有进程A和进程B,除了互斥地使用CPU和打印机R外,进程A和B不使用其他资源。另外,进程B的优先级比A高,而进程A先于B准备好。进程A和B的执行情况如图4-3所示,其中粗实线表示进程在执行中,细实线表示打印机R在使用中。(每个进程具有三种状态:运行,就绪和阻塞)

请说明进程A和B在图4-3所示的T1、T2、T3、T4时刻所处的状态;若是阻塞状态,请说明阻塞原因。

【图4-3】

试题五(15分,每空3分)

阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。

【说明】

函数int Toplogical (LinkedWDigraph G)的功能是对图G中的顶点进行拓扑排序,并返回关键路径的长度。其中图G表示一个具有n个顶点的AOE-网,图中顶点从1~n依次编号,图G的存储结构采用邻接表表示,其数据类型定义如下:

typedef struct Gnode{     /*邻接表的表结点类型*/

int adjvex;        /*邻接顶点编号*/

int weight;        /*弧上的权值*/

struct Gonde*nextare;    /*指示下一个弧的结点*/

}Gnode;

  typedef struct Adjlist{    /*邻接表的头结点类型*/

char vdata;          /*顶点的数据信息*/

struct Gnode*Firstadj;   /*指向邻接表的第一个表结点*/

}Adjlist;

  typedef struct LinkedWDigraph{  /*图的类型*/

int n ,e;          /*图中顶点个数和边数*/

struct Adjlist head;     /*指向图中第一个顶点的邻接表的头结点*/

}LinkedWDigraph;

例如,某AOE-网如图5-1所示,其邻接表存储结构如图5-2所示。


【函数】

int Toplogical(LinkedWDigraph G)

{Gnode *p;  

int j,w,top=0;  

int Stack,ve,*indegree;  

ve=(int )mallloc(G.n+1)*sizeof(int));  

indegree=(int*)malloc((G.n+1)*sizeof(int)); /*存储网中个顶点的入度*/  

Stack=(int*)malloc((G.n+1)*sizeof(int));   /*存储入度为0的顶点的编号*/  

If (!ve||!indegree||!Stack)           

exit(0);  

for (j=1;j<=G.n;j++){

ve[j]=0;indegree[j]=0;

}                /*for*/

for (j=1;j<=G.n;j++) {      /*求网中各顶点的入度*/  

p=G.head[j].Firstadj;  

while (p) {

__(1)__;         

p=p->nextarc;

}               /*while*/

}         /*for*/

for (j=1;j<=G.n;j++)                         /求网中入度为0的顶点并保存其编号*/

if (!indegree[j]) Stack[++top]=j;

while (top>0){

w=__(2)__;

printf(“%c”,G.head[w].vdata);

p=G.head[w].Firstadj;

while (p) {

__(3)__;

if (!indegree[p->adjvex])

Stack[++top]=p->adjvex;

If(__(4)__)

Ve[p->adjvex]=ve[w]+p->weight;

P=p->nextarc;

}/*while*/

return(5);

}       /*Toplogical*/

(1)indegree[p->adjvex]++,及其等价形式  

(2)Stack [top--],及其等价形式  

(3)indegree[p->adjvex]--,及其等价形式  

(4)ve[w]+p->weight>ve[p->adjvex],及其等价形式  

(5)ve[w),及其等价形式

试题六(15分,每空3分)

阅读下列函数说明和C++代码,将应填入(__n__)处的字句写在答题纸的对应栏内。

【说明】

通常情况下,用户可以对应用系统进行配置,并将配置信息保存在配置文件中,应用系统在启动时首先将配置文件加载到内存中,这些内存配置信息应该有且仅有一份。

下面的代码应用了单身模式(Singleton)以保证Configure类只能有一个实例。这样,Configure类的使用者无法定义该类的多个实例,否则会产生编译错误。

【C++代码】

#include

class Configure {

__(1)__;

Configure() {};            //构造函数

Public;

Static Configure*Instance();

Public;

Int GetConfigureData() {return data;} //获取配置信息

Int SetConfigureDate(int m_data)

{ data=m_data;       return data; }   //设置配置信息

private:

static Configure*_instance;

int data;                          //配置信息

};

__(2)__=NULL;

Configure * Configure;;Instance() {

If (_instance= =NULL) {

_instance=__(3)__;   //加载配置文件并设置内存配置信息,此处省略

}

return__(4)__;

}

void main() {

Configure*t=NULL;

t=__(5)__;

int d=t->GetConfigureData();   //获取配置信息后进行其它工作,此处省略

}

(1) private  

(2) Configure *Configure::_inStance  

(3) new Configure  

(4) _inStance  

(5) Configure::Instance()

试题七(15分,每空3分)

【说明】

类Queue表示队列,类中的方法如下表所示。

类Node表示队列中的元素;类emptyQueueException给出了队列操作中的异常处理操作。

【JAVA代码】

public class testmain { //主类

               public static viod main (string args[]){

                              Queue q= new queue;

                              q.enqueue(“first!”);

                              q.enqueue(“second!”);

                              q.enqueue(“third!”);

                              __(1)__  {

                              while(true)

                                             system.out.println(q.dequeue());

                              }

                              catch(__(2)__){}

               }

               public class queue {   //队列

                              node m_firstnode;

                              public queue(){m_firstnode=null;}

                              public Boolean isempty(){

                                             if (m_firstnode= =null) return true;

                                             else return false;

                              }

                              public viod enqueue(object newnode){  //入队操作

                                             node next = m_firstnode;

                                             if (next = = null) m_firstnode=new node(newnode);

                                             else {

                                                            while(next.getnext()!=null) next=next.getnext();

                                                            next.setnext(new node(newnode));

                                             }

                              }

               public object dequeue() __(3)__ {      //出队操作

                              object node;

                              if (is empty())

                                             __(4)__;                 //队列为空,抛出异常

                              else {

                                             node =m_firstnode.getobject();

                                             m_firstnode=m_firstnode.getnext();

                                             return node;

                              }

               }

}

public class node{

                object m_data;

                node m_next;

               public node(object data)     {m_data=data;  m_next=null;}

               public node(object data,node next)   {m_data=data;  m_next=next;}

               public void setobject(object data)   {m_data=data; }

               public object getobject(object data)  {return m_data;}

               public void setnext(node next)   {m_next=next;}

               public node getnext()     {return m_next;}  }

               public class emptyqueueexception extends   (5)  {

               public emptyqueueexception() {  

                              system.out.println(“队列已空!”);

                }

}

(1) try  

(2) Exception e 或者:EmptyQueueException e,e是对象名,可用任意合法标识符替换(3分)  

(3) throws EmptyQueueException  

(4) throw (new EmptyQueueException())  

(5) Exception

你可能感兴趣的:(2004年下半年软件设计师试题及答案)