1、计算机水平考试中级软件设计师 2005 年下半年下午真题及答案解析(总分:102.00,做题时间:90 分钟)一、B试题一/B(总题数:3,分数:15.00)1.问题 1 经过进一步分析,设计人员决定定义一个类 Items on loan,以表示类 Book 和 CD 的共有属性和方法。请采用图 1-2 中属性和方法的名称给出类 Items_on_loan 应该具有的属性和方法(注意:不同名称的属性和方法表示不同的含义,如 CD 中的 composer 与 Book 甲的 author 无任何关系)。(分数:5.00)_2.问题 2 为了记录每种图书或唱碟租借的历史记录,引入类 Circula
2、tionHistory,类中存储的信息是图 1-1 中所表示的内容。请采用 UML 表示法将下列四个类间的关系表示出来。 (分数:5.00)_3.问题 3 现需了解十大最畅销(借出次数最多)图书或唱碟。为此,引入 TenPopulate 类以存储所有十大畅销图书或 CD 的名称及其被借出的次数。下列顺序图描述了某类图书或唱碟被借出后成为十大畅销图书或唱碟时对象间的消息交互。系统在一次运行过程中,应有U (1) /U个 TenPopulate 实例对象最合适,一个 TenPopulate 类实例对象最多需要和U (2) /U个 Items_on_loan 实例对象交互。 (分数:5.00)_二、
3、B试题二/B(总题数:3,分数:15.00)4.问题 1 根据题意,补充图 2-3 中(a)处的空缺,即货物关系模式的属性。(分数:5.00)_5.问题 2 根据题意,补充图 2-5 中缺失的联系和联系的类型,使其成为完善的实体联系图。其中,联系名分别取名为联系 1,联系 2,联系 3,。(分数:5.00)_6.问题 3 写出每种关系模式的主键。(分数:5.00)_三、B试题三/B(总题数:4,分数:12.00)7.问题 1 请在下列选项中选择合适的答案,填入图 3-1、图 3-2 的方框 a 和方框 b。 B 的公钥,B 的私钥,摘要算法,A 的私钥,A 的公钥,会话密钥(分数:3.00)_
4、8.问题 2 请在下列选项中选择合适的答案,填入图 3-2 的方框 c 至方框 f。 B 的公钥,B 的私钥,摘要算法,A 的私钥,A 的公钥,会话密钥(分数:3.00)_9.问题 3 按照图 3-2 中的方法发送邮件时,使用不同的密码体制加密消息和消息摘要,请用 150 字以内文字简要说明这样做的理由。(分数:3.00)_10.问题 4 请从下面关于摘要函数的说法中选出所有正确的描述。 a很容易使不同的输入数据生成相同的输出数据。 b根据输入数据获取输出数据的时间非常短。 c根据输入数据获取输出数据的时间非常长。 d输出数据的长度比输入数据的长度要长。 e根据输出数据无法还原出输入数据。(分
5、数:3.00)_四、B试题四/B(总题数:1,分数:15.00)11.例如:设散列函数为 Hash(Key)=Key mod 7,记录的关键字序列为15,14,21,87,97,293,35,24,149,19,63,16,103,77,5,153,145,356,51,68,705,453,建立的散列文件内容如图 4-1 所示。 图 4-1 (分数:15.00)_五、B试题五/B(总题数:1,分数:15.00)12.C+代码 #include iostream const OBS_MAXNUM=20;/最多与 OfficeDoc 对象相关联的DocExplorer 对象的个数 U (1) /
6、U; class DocExplorer /关注 OfficeDoc 公文对象的类 public: DocExplorer(U (2) /U *doc); /构造函数 U (3) /U void update(OfficeDoc *doc)=0;/更新自身状态的函数 /其他相关属性和方法省略 ; class OfficeDoc /公文类 private: DocExplorer *myObsOBS_MAXNUM; /关注此公文类的 DocExplorer 类对象指针数组 int index; /与 OfficeDoc 对象关联的 DocExplorer 对象的个数 public: Office
7、Doe() index=0; void attach(DocExplorer *o) /将一 DoeExplorer 对象与 OfficeDoe 对象相关联 if(index =OBS_MAXNUM |o=NULL)return; for(int loop=0; loopindex; loop+) if(myObsloop=o) return; myObsindex=o; index+; void detaeh(DocExplorer *o) /接触某 DoeExplorer 对象与OfficeDoc 对象的关联 if(0=NULL) return; for(int loop=0; loopi
8、ndex; loop+) if(myObsloop=o) if(loop=index-2)myObsloop=myObsindex-1; myObsindex-1=NULL; index-; break; private: void notifyObs() /通知所有的 DocExplorer 对象更改自身状态 for(int loop=0; loopindex; loop+) myObsloop-U (4) /U; /DocExplorer 对象更新自身状态 /其他公文类的相关属性和方法 ; DocExplorer:DocExplorer(OfficeDoc *doc)/DocExplore
9、r 类对象的构造函数 doc-U (5) /U; /将此 DocExplorer 对象与 doc 对象相关联 (分数:15.00)_六、B试题六/B(总题数:1,分数:15.00)13.Java 代码 /Subject.java 文件 public interface Subject public void attach(Observer DocExplorer); public void detach(Observer DocExplorer); void notifyObservers(); /Observer.java 文件 public interface Observer void
10、update(U (1) /U); /OfficeDoc.java 文件 import java.util.*; public class OfficeDoc implements Subject(/OfficeDoc 类实现 Subject 接口 private Vector ObserverVeetor=new java.util.Vector(); /存储与 OfficeDoc 相关联的 DocExplorer 对象 public void attach(Observer observer) /将某 DocExplorer 对象与 OfficeDoc 相关联 ObserverVector
11、.addElement(observer); public void detach(Observer observer) /解除某 DocExplorer 对象与 OfficeDoc 的关联关系 ObserverVector.removeElement(observer); public void notifyObservers() /当 OfficeDoc 对象状态已发生变化时,通知所有的 DocExplorer 对象 Enumeration enumeration=U (2) /U; while (enumeration.hasMoreElements() (Observer)enumer
12、ation.nextElement().U (3) /U; public Enumeration Observers() return ObserverVector.elements(); /其他公文类的属性和方法省略 /DoeExplorer.java 文件 public class DocExplorer implements U(4) /U public void update(U (5) /U) /更新 DocExplorer 自身的状态,代码省略 (分数:15.00)_七、B试题七/B(总题数:1,分数:15.00)14.C 代码 #include stdio.h #define O
13、BS_MAXNUM 20 /*一个 OfficeDoc 变量最多能够关联的*/ /*DoeExplorer 变量的个数*/ typedef void(U (1) /U)(struct OfficeDoc*,street DocExplorer*); struct DocExplorer func update;/* DocExplorer 结构采用的更新函数*/ /*其他的结构字段省略*/ ; struct OfficeDoc U(2) /UmyObsOBS_MAXNUM; /*存储所有与 OfficeDoc相关联的 DoeExplorer 结构指针*/ int index;/*与 Offic
14、eDoc 结构变量相关联的 DocExplorer 结构变量的个数*/ ; void attach(struet OfficeDoc *doc, struet DocExplorer *ob) /*关联 Obersver 结构ob 与 OfficeDoe 结构 doc*/ int loop=0; if(doc-index =OBS_MAXNUM | ob=NULL) return; for(loop=0; loop doc-index; loop+) if(doc-myObsloop=ob)return; doc-myObsdoe-index=ob; doc-index+; ) void de
15、tach(struct OfficeDoc *doc, struct DocExplorer *ob) /*解除 doc 结构与 ob 结构间的关系*/ int loop; if(ob=NULL)return; for(loop=0; loop doc-index; loop6+) if(doc-myObsloop=ob) if(loop=doc-index-2) doe-myObsloop=doc-myObsU (3) /U; doc-myObsdoe-indox-1=NULL; doe-index-; break; void updatel(struct OfficeDoc *doc,st
16、ruct DocExplorer *ob) /*更新 ob 结构的值,更新代码省略*/ void update2(stmct OfficeDoc *doc, struct DocExplorer *ob) /*更新 ob 结构的值,更新代码省略*/ void notifyObs(struet OfficeDoc *doc) /*当 doc 结构的值发生变化时,通知与之关联的所有DocExplorer 结构变量*/ int loop; for(loop=0; loop doc-index; loop+) (doc-myObsloop)-update(U (4) /U); void main()
17、stmct OfficeDoc doc;/*定义一 OfficeDoc 变量*/ struct DocExplorer explorer1, explorer2;/*定义两个 DocExplorer 变量*/ /*初始化与 OfficeDoc 变量相关的 DocExplorer 变量个数为 0*/ doc.index=0; explorer1.update=update1;/*设置 explorer1 变量的更新函数*/ explorer2.update=update2;/*设置 explorer2 变量的更新函数*/ attaeh(/*关联 explorer1 与 doc 对象*/ atta
18、ch(/*关联explorer2 与 doc 对象*/ /*其他代码省略*/ U(5) /U;/*通知与 OfficeDoc 相关的所有DocExplorer 变量*/ return; (分数:15.00)_计算机水平考试中级软件设计师 2005 年下半年下午真题答案解析(总分:102.00,做题时间:90 分钟)一、B试题一/B(总题数:3,分数:15.00)1.问题 1 经过进一步分析,设计人员决定定义一个类 Items on loan,以表示类 Book 和 CD 的共有属性和方法。请采用图 1-2 中属性和方法的名称给出类 Items_on_loan 应该具有的属性和方法(注意:不同名
19、称的属性和方法表示不同的含义,如 CD 中的 composer 与 Book 甲的 author 无任何关系)。(分数:5.00)_正确答案:()解析:问题 1 属性:title 方法:Reference Title 分析 如果要求设计一个类表示 Book 和 CD 的共有属性和方法,那么就需要从 Book 和 CD 中找出相同的属性和方法,Book 和 CD 都有 title 属性和reference title 方法,所以 Item on loan 的属性为 title,方法为 reference title。 Book 和 CD 应该继承 item_on_loan 类,所以它们之间的关系
20、是继承关系,而 CirculationHistory 表示对象的租借次数,它不属于 Item_on_loan 的属性,但 Item_on_loan 应该能够查询到 CirculationHistory 记录的信息,所以它们之间是聚集关系。 Tenpopulate 类存储十大畅销图书或 CD 的名称及其被借出的次数,顺序图中明确的给出了其对象,通常整个系统中有一个对象就可以了,但是为了记录图书或唱片的借出信息,每当有图书或唱片被借出时,都需要和 TenPopulate 类的对象发生交互。因此有可能所有的图书和唱片都要和TenPopulate 类对象发生交互。2.问题 2 为了记录每种图书或唱碟租
21、借的历史记录,引入类 CirculationHistory,类中存储的信息是图 1-1 中所表示的内容。请采用 UML 表示法将下列四个类间的关系表示出来。 (分数:5.00)_正确答案:()解析:问题 2 3.问题 3 现需了解十大最畅销(借出次数最多)图书或唱碟。为此,引入 TenPopulate 类以存储所有十大畅销图书或 CD 的名称及其被借出的次数。下列顺序图描述了某类图书或唱碟被借出后成为十大畅销图书或唱碟时对象间的消息交互。系统在一次运行过程中,应有U (1) /U个 TenPopulate 实例对象最合适,一个 TenPopulate 类实例对象最多需要和U (2) /U个 I
22、tems_on_loan 实例对象交互。 (分数:5.00)_正确答案:()解析:问题 3 (1)1 (2)图书和唱碟种类数二、B试题二/B(总题数:3,分数:15.00)4.问题 1 根据题意,补充图 2-3 中(a)处的空缺,即货物关系模式的属性。(分数:5.00)_正确答案:()解析:问题 1 货物编码,货物名称,单价,仓库号,库存量 分析 货物关系模式要保存货物的信息,因此需要有货物编码,这是货物的唯一标识,由于其他的关系模式中未出现货物名称和单价,因此关系模式需要有单价和货物名称两项,因为每一种货物只能放在一个仓库中,因此需要有仓库号信息,每天前端机获取货物的库存信息,还需要有库存量
23、属性,因此,(a)处应填写: 货物编码,货物名称,单价,仓库号,库存量5.问题 2 根据题意,补充图 2-5 中缺失的联系和联系的类型,使其成为完善的实体联系图。其中,联系名分别取名为联系 1,联系 2,联系 3,。(分数:5.00)_正确答案:()解析:问题 2 6.问题 3 写出每种关系模式的主键。(分数:5.00)_正确答案:()解析:问题 3 出入库单的主键:流水号 出入库记录的主键:流水号,货物编码 日汇总表的主键:日期,货物编码,出入库标志 仓库的主键:仓库号 管理员的主键:管理员号 货物的主键:货物编码 分析 分析出入库单(流水号,出入库标志,管理员号,时间)的属性可知,只有流水
24、号可以标识唯一的一张出入库单,因此出入库单的主键为流水号。在出入库记录(货物编码,数量,流水号)中,流水号加货物编码可以唯一地标识一条出入库记录,因此出入库记录的主键为流水号和货物编码。在日汇总表(日期,货物编码,数量,出入库标志)中,同一货物可在多条记录中出现,在同一时间,相同货物可在多条记录中出现,因此日期、货物编码和出入库标志标识一张日汇总表的一条记录,即日汇总表的主键为日期、货物编码和出入库标志。显然,从管理的角度出发,一个仓库号唯一标识一个仓库,每名管理员被分配唯一的管理员号,每种货物都分配了唯一的货物编码。三、B试题三/B(总题数:4,分数:12.00)7.问题 1 请在下列选项中
25、选择合适的答案,填入图 3-1、图 3-2 的方框 a 和方框 b。 B 的公钥,B 的私钥,摘要算法,A 的私钥,A 的公钥,会话密钥(分数:3.00)_正确答案:()解析:问题 1 方框 a:A 的私钥,方框 b:A 的公钥 分析 本题考查有关安全和密码的知识。 这里主要解决发送方和接收方的认证问题。发送方应该使用只有自己才掌握的私钥对数据进行加密,这样才能确保在认证过程中对发送方的认证。接收方应使用发送方的公钥对认证数据进行解密,以达到认证目的,因此方框 a 和 b 分别为,A 的私钥,A 的公钥。8.问题 2 请在下列选项中选择合适的答案,填入图 3-2 的方框 c 至方框 f。 B
26、的公钥,B 的私钥,摘要算法,A 的私钥,A 的公钥,会话密钥(分数:3.00)_正确答案:()解析:问题 2 方框 c:摘要算法 方框 d:会话密钥 方框 e:会话密钥 方框 f:摘要算法 分析 在传输大量数据时,会由发送方和接收方协商会话密钥,使用会话密钥对数据进行加解密。与此同时,使用摘要算法对数据生成摘要进行认证,因此方框 c、d、e、f 分别为摘要算法、会话密钥、会话密钥、摘要算法。9.问题 3 按照图 3-2 中的方法发送邮件时,使用不同的密码体制加密消息和消息摘要,请用 150 字以内文字简要说明这样做的理由。(分数:3.00)_正确答案:()解析:问题 3 对称密钥体系的加解密
27、效率非常高,适合于加解密大量的数据,因此可用于加密消息。公钥密码体系的加解密效率较低,更适合用于加密少量数据的场合,因此可用于加密消息摘要和会话密钥。分析 对称密钥体系的加解密效率非常高,适合于加解密大量的数据,因此可用于加密消息。公钥密码体系的加解密效率较低,更适合用于加密少量数据的场合,因此可用于加密消息摘要和会话密钥。10.问题 4 请从下面关于摘要函数的说法中选出所有正确的描述。 a很容易使不同的输入数据生成相同的输出数据。 b根据输入数据获取输出数据的时间非常短。 c根据输入数据获取输出数据的时间非常长。 d输出数据的长度比输入数据的长度要长。 e根据输出数据无法还原出输入数据。(分
28、数:3.00)_正确答案:()解析:问题 4 b根据输入数据获取输出数据的时间非常短 e根据输出数据无法还原出输入数据 分析 摘要函数具有如下特点:根据输入数据获取输出数据的时间非常短,并且根据输出数据无法还原出输入数据。四、B试题四/B(总题数:1,分数:15.00)11.例如:设散列函数为 Hash(Key)=Key mod 7,记录的关键字序列为15,14,21,87,97,293,35,24,149,19,63,16,103,77,5,153,145,356,51,68,705,453,建立的散列文件内容如图 4-1 所示。 图 4-1 (分数:15.00)_正确答案:()解析:(1)
29、 Index=NewElemKey % P (2) iITEMS (3) front= kITEMS;k+) if(t-KeyDatak=NULLKEY)/*在溢出桶链表中找到空闲单元*/ t-KeyDatak=NewElemKey; break; /*if*/ front=t; if(U (4) /U)t=t-Link; else break; /*while*/ /*if*/ 由于每个溢出桶都可以存储 ITEMS 个元素,所以在溢出桶中查找空闲单元与在基桶中的查找过程相同,代码如下。 for(k=0;kITEMS;k+) if(t-KcyDatak=NULLKEY)/*在溢出桶链表中找到空
30、闲单元*/ t-KeyDatak=NewElemKey; break; /*if*/ 若在指针 t 指向的溢出桶中找到空闲单元则插入元素,否则,由“t=t-Link”得到下一个溢出桶的指针,因此“kITEMS”可作为是否在当前溢出桶中找到空闲单元的判定条件。 显然,在桶号 Index 的基桶和其所有溢出桶都已满的情况下,t 的值为空指针。此时才需要申请新的溢出桶并建立链接关系,因此在上面查找溢出桶中空闲单元时,进行指针 t 的后移“t=t-Link”前应先用 front 记录 t 的值,以便于后面建立链接关系。所以空(3)处应给 front 置初值,即“front=/最多与 OfficeDoc
31、 对象相关联的DocExplorer 对象的个数 U (1) /U; class DocExplorer /关注 OfficeDoc 公文对象的类 public: DocExplorer(U (2) /U *doc); /构造函数 U (3) /U void update(OfficeDoc *doc)=0;/更新自身状态的函数 /其他相关属性和方法省略 ; class OfficeDoc /公文类 private: DocExplorer *myObsOBS_MAXNUM; /关注此公文类的 DocExplorer 类对象指针数组 int index; /与 OfficeDoc 对象关联的
32、DocExplorer 对象的个数 public: OfficeDoe() index=0; void attach(DocExplorer *o) /将一 DoeExplorer 对象与 OfficeDoe 对象相关联 if(index =OBS_MAXNUM |o=NULL)return; for(int loop=0; loopindex; loop+) if(myObsloop=o) return; myObsindex=o; index+; void detaeh(DocExplorer *o) /接触某 DoeExplorer 对象与OfficeDoc 对象的关联 if(0=NUL
33、L) return; for(int loop=0; loopindex; loop+) if(myObsloop=o) if(loop=index-2)myObsloop=myObsindex-1; myObsindex-1=NULL; index-; break; private: void notifyObs() /通知所有的 DocExplorer 对象更改自身状态 for(int loop=0; loopindex; loop+) myObsloop-U (4) /U; /DocExplorer 对象更新自身状态 /其他公文类的相关属性和方法 ; DocExplorer:DocExp
34、lorer(OfficeDoc *doc)/DocExplorer 类对象的构造函数 doc-U (5) /U; /将此 DocExplorer 对象与 doc 对象相关联 (分数:15.00)_正确答案:()解析:(1) class OfficeDoc (2) OfficeDoc (3) virtual (4) update(this) (5) attach(this) 分析 首先,DocExplorer 需要知道 OfficeDoc 是一个类,但因为 OfficeDoc 定义在 DocExplorer 之后,所以需要在 DocExplorer 类的定义前加上 class OfficeDoc
35、 的声明,因此(1)空处应该填写 class OfficeDoc 第(2)空可根据程序最后的构造函数的实现知道,应该填写 OfficeDoc;在观察者模式中,不同的观察者更新自身的方法不同,因此第(3)空处应该填写 virtual,而且程序最后的=0 也表明是一个纯虚拟函数; 第(4)空处,程序注释说明所有与 OfficeDoc 相关联的对象更新自身状态因此需要使用 update 函数,但update 函数的参数是一个 OfficeDoc 类的对象。所以,参数应该为 this; 第(5)空将 OfficeDoc 类的对象和 DocExplorer 类的对象相关联,关联的函数是 OfficeDo
36、c 中的 attach 方法,其参数是一个DocExplorer 对象,使用 this 能够表示当前的对象,所以应该填写 attach(this)。六、B试题六/B(总题数:1,分数:15.00)13.Java 代码 /Subject.java 文件 public interface Subject public void attach(Observer DocExplorer); public void detach(Observer DocExplorer); void notifyObservers(); /Observer.java 文件 public interface Observ
37、er void update(U (1) /U); /OfficeDoc.java 文件 import java.util.*; public class OfficeDoc implements Subject(/OfficeDoc 类实现 Subject 接口 private Vector ObserverVeetor=new java.util.Vector(); /存储与 OfficeDoc 相关联的 DocExplorer 对象 public void attach(Observer observer) /将某 DocExplorer 对象与 OfficeDoc 相关联 Observ
38、erVector.addElement(observer); public void detach(Observer observer) /解除某 DocExplorer 对象与 OfficeDoc 的关联关系 ObserverVector.removeElement(observer); public void notifyObservers() /当 OfficeDoc 对象状态已发生变化时,通知所有的 DocExplorer 对象 Enumeration enumeration=U (2) /U; while (enumeration.hasMoreElements() (Observe
39、r)enumeration.nextElement().U (3) /U; public Enumeration Observers() return ObserverVector.elements(); /其他公文类的属性和方法省略 /DoeExplorer.java 文件 public class DocExplorer implements U(4) /U public void update(U (5) /U) /更新 DocExplorer 自身的状态,代码省略 (分数:15.00)_正确答案:()解析:(1) Subject subject(注:第二个 subject 可用其他标识符替换) (2) Observers() (3) update(this) (4) Observer (5) Subject subject(注:第二个 subject 可用其他标识符替换) 分析
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1