[计算机类试卷]2012年上半年软件水平考试(中级)软件设计师下午(应用技术)真题试卷及答案与解析.doc

上传人:amazingpat195 文档编号:493040 上传时间:2018-11-30 格式:DOC 页数:19 大小:372KB
下载 相关 举报
[计算机类试卷]2012年上半年软件水平考试(中级)软件设计师下午(应用技术)真题试卷及答案与解析.doc_第1页
第1页 / 共19页
[计算机类试卷]2012年上半年软件水平考试(中级)软件设计师下午(应用技术)真题试卷及答案与解析.doc_第2页
第2页 / 共19页
[计算机类试卷]2012年上半年软件水平考试(中级)软件设计师下午(应用技术)真题试卷及答案与解析.doc_第3页
第3页 / 共19页
[计算机类试卷]2012年上半年软件水平考试(中级)软件设计师下午(应用技术)真题试卷及答案与解析.doc_第4页
第4页 / 共19页
[计算机类试卷]2012年上半年软件水平考试(中级)软件设计师下午(应用技术)真题试卷及答案与解析.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

1、2012年上半年软件水平考试(中级)软件设计师下午(应用技术)真题试卷及答案与解析 一、必答题(共 4道大题,每道大题 15分) 0 阅读下列说明和图,回答以下问题,将解答填入答题纸的对应内。 【说明】 某学校开发图书管理系统,以记录图书馆藏图书及其借出和归还情况,提供给借阅者借阅图书功能,提供给图书馆管理员管理和定期更新图书表功能。主要功能的具体描述如下: (1)处理借阅。借阅者要借阅图书时,系统必须对其身份 (借阅者 ID)进行检查。通过与教务处维护的学生数据库、人事处维护的职工数据库中的数据进行比对,以验 证借阅者 ID是否合法,若合法,则检查借阅者在逾期未还图书表中是否有逾期未还图书,

2、以及罚金表中的罚金是否超过限额。如果没有逾期未还图书并且罚金未超过限额,则允许借阅图书,更新图书表,并将借阅的图书存入借出图书表,借阅者归还所借图书时,先由图书馆管理员检查图书是否缺失或损坏,若是,则对借阅者处以相应罚金并存入罚金表;然后,检查所还图书是否逾期,若是,执行 “处理逾期 ”操作;最后,更新图书表,删除借出图书表中的相应记录。 (2)维护图书。图书馆管理员查询图书信息;在新进图书时录入图书信息,存入图书表;在图书丢失或损 坏严重时,从图书表中删除该图书记录。 (3)处理逾期。系统在每周一统计逾期未还图书,逾期未还的图书按规则计算罚金,并记入罚金表,并给有逾期未还图书的借阅者发送提醒

3、消息。借阅者在借阅和归还图书时,若罚金超过限额,管理员收取罚金,并更新罚金表中的罚金额度。 现采用结构化方法对该图书管理系统进行分析与设计,获得如图 11所示的顶层数据流图和图 12所示的 0层数据流图。 1 使用说明中的词语,给出图 11中的实体 E1 E4的名称。 2 使用说明中的词语,给出图 12中的数据存储 D1 D4的名称。 3 在 DFD建模时,需要对有些复杂加工 (处理 )进行进一步精化,绘制下层数据流图。针对图 12中的加工 “处理借阅 ”,在 1层数据流图中应分解为哪些加工 ?(使用说明中的术语 ) 4 说明问题 3中绘制 1层数据流图时要注意的问题。 4 阅读下列说明,回答

4、以下问题,将解答填入答题纸的对应栏内。 【说明】 某医院拟开发一套住院病人信息管理系统,以方便对住院病人、医生、护士和手术等信息进行管理。 【需求分析】 (1)系统登记每个病人的住院信息,包括:病案号、病人的姓名、性别、地址、身份证号、电话号码、入院时间及病床号信息 ,每个病床有唯一所属的病区及病房,如表 21所示。其中病案号唯一标识病人本次住院的信息。 (2)在一个病人的一次住院期间,由一名医生对该病人的病情进行诊断,并填写一份诊断书,如表 22所示。对于需要进行一次或多次手术的病人,系统记录手术名称、手术室、手术日期、手术时间、主刀医生及多名协助医生,每名医生在手术中的责任不同,如表 23

5、所示,其中手术室包含手术室号、楼层、地点和类型等信息。 (3)护士分为两类:病床护士和手术室护士。每个病床护士负责护理一个病区内的所有病人,每个病区由多名护士负责护理。手术室护 士负责手术室的护理工作。每个手术室护士负责多个手术室,每个手术室由多名护士负责,每个护士在手术室中有不同的责任,并由系统记录其责任。 【概念模型设计】 根据需求阶段收集的信息,设计的实体联系图 (不完整 )如图 21所示。 【逻辑结构设计】 根据概念模型设计阶段完成的实体联系图,得出如下关系模式 (不完整 ): 病床 (病床号,病房,病房类型,所属病区 ) 护士 (护士编号,姓名,类型,性别,级别 ) 病床护士 ( (

6、1) ) 手术室 (手术室号,楼层,地点,类型 ) 手术室护士 ( (2) ) 病人( (3) ,姓名,性别,地 址,身份证号,电话号码,入院时间 ) 医生 (医生编号,姓名,性别,职称,所属科室 ) 诊断书 ( (4) ,诊断,诊断时间 ) 手术安排 (病案号,手术室号,手术时间,手术名称 ) 手术医生安排 ( (5) ,医生责任 ) 5 补充图 21中的联系和联系的类型。 6 根据图 21,将逻辑结构设计阶段生成的关系模式中的空 (1) (5)补充完整,并用下画线指出主键。 7 如果系统还需要记录医生给病人的用药情况,即记录医生给病人所开处方中药品的名称、用量、价格、药品的生产厂家等信息。

7、请根据该要求,对图 21进行修改, 画出补充后的实体、实体间联系和联系的类型。 7 阅读下列说明和图,回答以下问题,将解答填入答题纸的对应栏内。 【说明】 某网上购物平台的主要功能如下: (1)创建订单。顾客 (Customer)在线创建订单(Order),主要操作是向订单中添加项目、从订单中删除项目。订单中应列出所订购的商品 (Product)及其数量 (quantities)。 (2)提交订单。订单通过网络来提交。在提交订单时,顾客需要提供其姓名 (name)、收货地址 (address)、以及付款方式 (form of payment)(预付卡、 信用卡或者现金 )。为了制定送货计划以及

8、安排送货车辆,系统必须确定订单量 (volume)。除此之外,还必须记录每种商品的名称 (name)、造价(cost price)、售价 (sale price)以及单件商品的包装体积 (cubic volume)。 (3)处理订单。订单处理人员接收来自系统的订单;根据订单内容,安排配货,制定送货计划。在送货计划中不仅要指明发货日期 (delivery date),还要记录每个订单的限时发送要求 (Delivery Time Window)。 (4)派单。订单处理人员将已配好货的订 单转交给派送人员。 (5)送货收货。派送人员将货物送到顾客指定的收货地址。当顾客收货时,需要在运货单 (deli

9、very slip)上签收。签收后的运货单最终需交还给订单处理人员。 (6)收货确认。当订单处理人员收到签收过的运货单后,会和顾客进行一次再确认。 现采用面向对象方法开发上述系统,得到如图 31所示的用例图和图32所示的类图。 8 根据说明中的描述,给出图 31中 A1 A3所对应的参与者名称和 U1 U2处所对应的用例名称。 9 根据说明中的描述,给出图 32中 C1 C3所对应的类名以 及 (1) (4)处所对应的多重度 (类名使用说明中给出的英文词汇 )。 10 根据说明中的描述,将类 C2和 C3的属性补充完整 (属性名使用说明中给出的英文词汇 )。 二、选答题(共 3道大题,每道大题

10、 15分) 从下列 3道试题中任选 1道解答,如果解答的试题数超过 1道,则仅题号小的 1道题解答有效。 10 阅读下列说明和 C代码,回答以下问题,将解答写在答题纸的对应栏内。 【说明】 用两台处理机 A和 B处理 n个作业。设 A和 B处理第 i个作业的时间分别为ai和 bi。由于各个作业的特点和机器性能的关系,对某些作业,在 A上处理 时间长,而对某些作业在 B上处理时间长。一台处理机在某个时刻只能处理一个作业,而且作业处理是不可中断的,每个作业只能被处理一次。现要找出一个最优调度方案,使得 n个作业被这两台处理机处理完毕的时间 (所有作业被处理的时间之和 )最少。 算法步骤: (1)确

11、定候选解上界为 R段的单台处理机处理所有作业的完成时间 m: (2)用 p(x, y, k)=1表示前志个作业可以在 A用时不超过 z且在 B用时不超过 y时间内处理完成,则 p(x, y, k)=p(x一 ak, y,k一 1)|p(x, y一 bk, k一 1)(|表示逻辑或操作 )。 (3)得到最短处理时间为min(max(z, y)。 【 C 代码】 下面是该算法的 C语言实现。 (1)常量和变量说明 n:作业数 m:候选解上界 n:数组,长度为 n,记录 n个作业在 A上的处理时间,下标从 0开始 b:数组,长度为 n,记录 n个作业在 B上的处理时间,下标从0开始 k:循环变量 p

12、:三维数组,长度为 (m+1)*(m+1)*(n+1) temp:临时变量 max:最短处理时间 (2)C代码 #include 11 根据以上说明和 C代码,填充 C代码中的空 (1) (5)。 12 根据以上 C代码,算法的时间 复杂度为 (6) (用 O符号表示 )。 13 考虑 6个作业的实例,各个作业在两台处理机上的处理时间如下表所示。该实例的最优解为 (7) ,最优解的值 (即最短处理时间 )为 (8) 。最优解用 (X1, X2, x3,x4, x5, x6)表示,其中若第 i个作业在 A上处理,则 xi=1,否则 xi=2。如 (1, 1,1, 1, 2, 2)表示作业 1,

13、2, 3和 4在 A上处理,作业 5和 6在 B上处理。 14 阅读下列说明和 C+代码,将应填入 (1) (6)处的字句写在答题纸的对应栏内。 【说明】 某咖啡店当卖咖啡时, 可以根据顾客的要求在其中加入各种配料,咖啡店会根据所加入的配料来计算费用。咖啡店所供应的咖啡及配料的种类和价格如下表所示。 【 C+代码】 #include#includeusing namespace std; const int ESPRESSO_PRICE=25; const int DRAKROAST_PRICE=20; const int MOCHA_PRICE=10; const int WHIP_PRIC

14、E=8; class Beverage饮料 (1) :string description; public: (2) ()return description; (3) ; ; class condimentDecorator: public Beverage配料 protected: (4) ; ; class Espresso: public Beverage蒸馏咖啡 public: Espresso()description=“Espresso”; int cos t()return ESPRESSO_PRICE; ; class DarkRoast: public Beverage深度

15、烘焙咖啡 public: DarkRoast()description=“DardRoast”; int cost()return DRAKROAST_PRICE; ) ; class Mocha: public condimentDecorator摩卡 public: Mocha(Beverage*beverage)this-beverage=beverage; string getDescription()return beverage-getDescription()+”, Mocha”; int cost()return MOCHA_PRICE+beverage-cost(); ; c

16、lass Whip: public CondimentDecorator奶泡 public: Whip(Beverage*beverage)this-beverage=beverage; string getDescription()return beverage-getDescription()+“, Whip”; int cost()return WHIP_PRICE+beverage-cost(); ; Int main() Beverage*beverage=new DarkRoast(); beverage=new Mocha( (5) ); beverage=new Whip( (

17、6) ); coutbeverage getDescription() ”¥ ” beverage- cost() endl; return 0; 编译运行上述程序,其输出结果为: DarkRoast, Mocha, Whip,¥ 38 15 阅读 下列说明和 Java代码,将应填入 (1) (6)处的字句写在答题纸的对应栏内。 【说明】 某咖啡店当卖咖啡时,可以根据顾客的要求在其中加入各种配料,咖啡店会根据所加入的配料来计算费用。咖啡店所供应的咖啡及配料的种类和价格如下表所示。 现采用装饰器 (Decorator)模式来实现计算费用的功能,得到如图 61所示的类图。 Java代码】 impo

18、rt java util *; (1) class Beverage饮料 String description=“Unknown Beverage”; public (2) ()(return description; public (3) ; abstract class CondimentDecorator extends Beverage 配料 (4) ; class Espresso extends Beverage蒸馏咖啡 private final int ESPRESSO_PRICE=25; public Espresso()(description=“Espresso”; pu

19、blic int cost()return ESPRESSO_PRICE; class DarkRoast extends Beverage(深度烘焙咖啡 private finalint DARKROAST_PRICE=20; public DarkRoast()description=“DarkRoast”; public int cost()rcturn DARKROAST PRICE; class Mocha extends CondimentDecorator摩卡 private final int MOCHA_PRICE=10; public Mocha(Beverage beve

20、rage) this beverage=beverage; public String getDescription() return beverage getDescription0 + “, Mocha”; public int cost() return MOCHA_PRICE+beverage cost(); class Whip extends CondimentDecorator奶泡 private finalint WHIP_PRICE=8; public whip(Beverage beverage)this beverage= beverage; public String

21、getDescription() return beverage getDescription()+“, Whip”; public int cost()return WHIP_PRICE+beverage cost(); publ ic class Coffee public static void main(String args) Beverage beverage=new DarkRoast(); beverage=new Mocha( (5) ); beverage=new Whip( (6) ); System out println(beverage getDescription

22、() +”¥ ” +beverag e cost(); 编译运行上述程序,其输出结果为: DarkRoast, Mocha, Whip¥ 38 2012年上半年软件水平考试(中级)软件设计师下午(应用技术) 真题试卷答案与解析 一、必答题(共 4道大题,每道大题 15分) 1 【正确答案】 E1:借阅者 E2:图书管理员 E3 E4:学生数据库职工数据库 【试题解析】 由题目知,借阅者要借阅图书时,系统必须对其身份进行检查,而身份检查是通过验证借阅者 ID实现的,而验证借阅者 ID则是通过与学生数据库和职工数据库的数据进行比对实现的, E3、 E4 处分别填入学生数据库和职工数据库。 图书管理

23、系统验证借阅者的 ID后,检查其是否有逾期未归还的图书,如果有,则给借阅者发送逾期未还提醒,很显然, E1为借阅者 。 图书维护时,要对图书进行查询、新书信息录入、书目删除等操作,进行这些操作的是图书管理员。因此 E2为图书管理员。 2 【正确答案】 D1:图书表 D2:借出图书表 D3:逾期未还图书表 D4:罚金表 【试题解析】 图书管理员要从图书表中查询图书信息;新进图书时,需要将新书信息录入图书表;在图书丢失或损坏严重时,需要从图书表中删除该图书记录。由此可知, D1为图书表。 借阅图书时,需要检查借阅者在逾期未还图书表中是否有逾期未还图书,以及罚金表中的罚金是否超过限额。 D4与罚金的

24、操作相关, 因此为罚金表。 D3与逾期处理相关,因此为逾期未还图书表。 如果系统允许借阅图书,则一方面更新图书表,另一方面将借阅的图书存入借出图书表,可见 D2为借出图书表。 3 【正确答案】 检查借阅者身份或检查借阅者 ID;检查逾期未还图书;检查罚金是否超过限额;借阅图书;归还图书 【试题解析】 处理借阅涉及借书和还书两部分。借书时,首先进行的借阅者身份的验证,通过验证,在逾期未借阅图书表中检查是否有逾期未还图书,同时,还要在罚金表中检查罚金是否超限。还书时,需要检查图书是否缺失或损坏,然后检查图书是否逾期,最后更新图书表。 4 【正确答案】 保持父图与子图平衡。父图中某加工的输入输出流必

25、须与它的子图的输入输出流在数量和名字上相同。如果父图的一个输入 (或输出 )数据流对应于子图中几个输入 (或输出 )数据流,而子图中组成这些数据流的数据项全体正好是父图中的这一数据流,那么它们仍是平 衡的。 【试题解析】 将加工 “处理借阅 ”进一步进行分解,得到的便是 0层数据流图的子图,原来的图便成为父图。在绘制子图的时候,要注意保持与父图的平衡。 5 【正确答案】 【试题解析】 病人住院才会安排病床,同时,一个病人只安排在某一个病床上;不停地有病人住院、出院,某一病床上的病人也在变,由此可见,病床和病人之间的联系是一对多。 病人住院期间,由一名医生对其并且进行诊断,一名医生可以诊断多名病

26、人,医生和病人之间的联系是一对多。 每个手术室护士负责多个手术室,每个手术室由多名 护士负责,护士和手术室之间的联系是多对多。 6 【正确答案】 (1)病区, 护士编号 (2)手术室号,护士编号, 责任 (3)病案号, 病床号 (4) 病案号 ,医生编号 (5) 病案号,手术室号,手术时间,医生编号 【试题解析】 病床护士负责护理一个病区内的所有病人,每个病区由多名护士负责护理。因此,病床护士的属性有:护士编号,病区。病区和病床护士之间的联系是一对多,由病床护士编号可以推出其所属病区 ,因此关键字为护士编号。 每个手术室护士负责多个手术室,每个手术室由多名护士负责,每个护士在手术室中有不同的责

27、任,并由系统记录其责任。因此手术室护士的属性有护士编号,手术室号,责任。手术室和手术室护士之间是多对多的联系,每个护士的责任由其编号和所在的手术室号一起决定的,因此护士编号和手术室号一起构成关键字。 病人人院时需要等级病案号、病人的姓名、性别、地址、身份证号、电话号码、入院时间及病床号。病人实体的属性少病案号和病床号。而病案号唯一标识病人本次住院的信息,因此病案号是关键字。 诊断书是医生对病人病情的诊断,医生由医生编号唯一标识,病人由病案号唯一标识,诊断书实体应为诊断书 (病案号,医生编号,诊断,诊断时间 )。一份诊断书只属于一个病人,因此诊断书可以由病案号唯一标识,病案号为关键字。 手术医生

28、安排是要根据病人来进行的,而一名病人可能要进行 1次或多次手术,每次手术的时间不同,所在手术室可能不同。手术医生安排实体为:手术医生安排 (病案号,手术室号,手术时间,医生编号,医生责任 )。 7 【正确答案】 【试题解析】 病人在不同的阶段,可能会有不同的医生开处方。一名医生不 同阶段所开的处方也会不同,因此就处方关系而言,医生和病人之间是多对多的联系。 8 【正确答案】 A1:顾客 A2:订单处理人员 A3:派送人员 U1:收货 U2:派单 【试题解析】 由 “顾客 (Clastomer)在线创建订单 (Order)”可知, A1 为顾客。由“订单处理人员接收来自系统的订单 ”、 “当订单

29、处理人员收到签收过的运货单后,会和顾客进行一次再确认 ”可知, A2为订单处理人员。 A3负责送货,很显然, A3为派送人员。顾客创建好订单后,提交订单,由订单处理人员配货, 然后进行派单,将已配好货的订单转交给派送人员,可见 U2处的用例为 “派单 ”。然后派送人员送货,顾客收货,因此 U1为 “收货 ”。 9 【正确答案】 C1: (2ustomer C2: Order C3: Product (1)1 (2)0 n或 0 * (3)0 n或 0 * (4)1 n或 1 * 【试题解析】 类的 UML 表示是一个长方形,垂直地分为三个区。顶部区域显示类的名字。中间的区域列出类的属性。底部的

30、区域列出类的操作。由题目提供的类图可知, C1有 name属性 和 address 属性; C3有 name属性。 C1单向关联C2, C1可以调用 C2的公共属性和方法。 C2 和 C3之间和聚合的关系,表示 C2聚合 C3,但是 C3 可以离开 C2而独立存在。在 C2和 C3类之间的关联,产生了称为 Ordei ProductQuantity 的关联类。 C2是整个类图的中心,购物的所有活动都是围绕着订单展开的, C2为 Order。订单中记录着所订购的商品, C3为Product。用户创建订单,需要调用订单的属性和方法, C1为 Custom。 UML 中关联的多重度是指一个类的实例能

31、够与另一个类的多少个 实例相关联。具体取值的含义有: 0 1: 0个或 1个 1:只能 1个 0 *: 0个或多个 *: 0个或多个 1 *: 1个或多个 一个客户可以提交多份订单,一份订单只能是某一个客户的,当然,客户也可以不提交订单,当一个 Customer实体存在时,可以有也可以没有 Order实体与之关联;而当一个 Ordei实体存在时,必然有一个 Customer实体与之关联。显然(1)处多重度为 1, (2)处为 0 *。 (3)和 (4)处要填入的是订单和商品实体之间的关联,订 单中至少有一件商品,因此 (4)处应填入 1 *;商品和订单之间和聚合的关系,商品可以包含在订单中,商

32、品也可以独立存在,不属于任何订单,因此 (3)处应填入 0 *。 10 【正确答案】 C2: volume、 delivery date、 form of payment C3: cubic volLime、 cost prjIce、 sale price 【试题解析】 C2 是订单类,订单中应列出所订购的商品 (Product)及其数量(quantities)。在提交订单时,顾客需要提供其姓名 (name)、收货地址 (address)以及付款方式 (form of pay-ment)。为了制定送货计划以及安排送货车辆,系统必须确定订单量 (volLline)。 Order类聚合 Produ

33、ct类, Product的属性中有商品的相关信息,关联类 Order Product Quantity 中有 Quantity属性,因此 Order类中需要有付款方式 (form of payment)属性、订单量 (vollame)属性。在送货计划中要指明发货日期 (delivery date),因此 Order类中还要有发货日期 (delivery date)属性。 C3是商品类,商品的属性有:名称 (Name)、造价 (cost price)、售价 (sale price)以及单件商品的包装体积 (cubic volume)。 二、选答题(共 3道大题,每道大题 15分) 从下列 3道试

34、题中任选 1道解答,如果解答的试题数超过 1道,则仅题号小的 1道题解答有效。 11 【正确答案】 (1)pxy0=1 (2)pExyk=px ak 1yk 1 (3)y bk一 1 =0 (4)pxyn=1或 pExyn或 pExEyn!=0 (5)(x=y)?x: Y 【试题解析】 从 schedtue()函数的第一个程序段可以看出,该段程序主要进行初始化第一个作业,下标以 0开始,即 pxy0=1,内层循环里的 pLxyk=0用于初始化后面的 n1个作业。第二个程序段是对后面的 n 一 1个作业,确定p(x, y, k)的值。 xak 一 1 =0的判定条件若成立,则表示第 k 个作业由

35、机器A处理,完成 k一 1个作业时机器 A花费的时间是 xak1,即pxyk=pxak 一 1yk一 1。 (3)要求填入一判定条件,由其后的执行语句可知,第 k个作业由机器 B 处理,因此判定条件应为 ybk一 1 =0。 write()程序段用于确定最优解并输出结果,即得到最短处理时间 min(max(x, y)。 (4)的判定条件是任务 n完成,因此为 pxyn=一 1或其等价形式。 (5)为表达max(x, y),为 (x =y)?x: y。 12 【正确答案】 (6)O(m2n) 【试题解析】 从程序的循环层数即可看出算法的时间复杂度。程序的最高循 环层数为 3层。最外层循环变量的变

36、化范围是 1 n 一 1,次外层循环变量的变化范围是 0 m,内层循环变量的变化范围是 0 m,所以时间复杂度为 (m2n)。 13 【正确答案】 (7)(1, 1, 2, 2, 1, 1) (8)15 【试题解析】 为了方便考生更好地理解本算法的思想,现做如下分析: 当完成 k 个作业,设机器 A花费了 X时间,机器 B 所花费时间的最小值肯定是X的一个函数,设 Fkx表示机器 B 所花费时间的最小值。则 Fkx=MinFk一 1Ix+bk, Fk 一 1xak;其中 Fk一 1Ix+bk表示第 k个作业由机器B 来处理 (完成 k 一 1个作业时机器 A花费的时间仍是 x), Fk 一 1

37、xak表示第 k 个作业由机器 A处理 (完成 k一 1个作业时机器 A花费的时间是 xaEk。 那么单个点对较大值 Max(X, Fkx),表示此时 (即机器 A花费 x时问的情况下 )所需要的总时间。而机器 A花费的时间 X是变化的,即 x=0, 1, 2x(max) ,由此构成了点对较大值序列。要求整体时间最短,取这些点对较大值序列中最小的即是。现分析前两个作业的情况: 对 于第一个作业:下标以 0开始。 首先,机器 A所花费时间的所有可能值范围: 0 =x=a0。 设 x 0时,设 F0x=,则 max(X, )=;记法意义见下。 x=0时, F00=3,则 Max(0, 3)=3,机

38、器 A花费 0时间,机器 B花费 3时间,而此时两个机器所需时间为 3; x=1时, F0E1=3, Max(1, 3)=3; x=2时, F02=0,则 Max(2, 0)=2。 那么上面的点对序列中,可以看出当 X=2时,完成第一个作业两台机器花 费最少的时间为 2,此时机器 A花费 2时间,机器 B 花费 0时间。 再来看第二个作业: 首先, x的取值范围是: 0 =x =(a0+a1)。 当 x 0时,记 F1x=;这个记法编程使用,因为数组下标不能小于 0。在这里的实际含义是: X是代表完成前两个作业机器 A的时间, a1是机器 A完成第 2个作业的时间,若 x a1,则势必第 2个

39、作业由机器 B来处理,即在 Min()中取前者。 X=0,则 F10=MinF00+b2, F00-a1) =Min3+8, =11,进而 Max(0, 11)=11; X=1,则 F11=MinF01+b2, F01-a1 =Min3+8, )=11,进而 Max(11)=11; X=2,则 F12=MinF02+b2, F0Z-a1 =Min0+8, )=8,进而 Max(2, 8)=8; X=3,则 F13=MinF03+b2, F03 一 a1 =Min0+8, )=8,进而 Max(3, 8)=8; X=4,则 F14=MinF0E4+b2, F0E4-a1 =Min(0+8, )=

40、8,进而 Max(4, 8)=8; X=5,则 F15=MinF0E5+b2, F05-a1 =Min(0+8, 3)=3,进而 Max(5, 3)=5; X=6,则 F16=Min(F06+b2, F06-a1) =Min0+8, 3)=3,进而 Max(6, 3)=6; x=7, 则 F17=MinF07+b2, F07 一 a1) =Min0+8, 0=0,进而 Max(7, 0)=7。 那么上面的点对序列中,可以看出当 X=5时,完成两个作业两台机器花费最少的时间为 5,此时机器 A花费 5时间,机器 B花费 3时间。 接下来依次类推即可,最终该实例的最优解为 (1, 1, 2, 2,

41、 1, 1),最短处理时间为 15。这里提供当各个作业完成时的最短处理时间,考生可自行推导: 2, 5,7, 12, 14, 15。 14 【正确答案】 (1)protected (2)virtual string getDescription (3)virtual int cost() (4)Beverage*beverage (5)beverage (6)beverage 【试题解析】 由类图可知, Beverage是基类, Espresso、 DarkRoast、CondimentDecorator 是 Beverage的派生类, Mocha、 Whip又是CondimentDecora

42、tor 的派生类。 (1)处应填入 description 的访问控制类型,可能为 private或 protected。在Beverage的派生类 Espresso 的初始化函数中直接使用了 description,由此可知,在基类中, description的访问控制类型为 protected。如果为 private,则在派生中不能使用。 在基类中先后动态建立了一个 DarkRoast对象、 Mocha对象和 Whip 对象,调用初始化函数并输出。 在 Mocha类和 Whip 类中分别调用了基类的 getDescription()cost()。 15 【正确答案】 (1)abstract

43、 (2)String getDescription (3)abstract int cost() (4)Beverage beverage (5)beverage (6)beverage 【试题解析】 装饰器模式描述了如何动态地为一个对象添加职责。该模式采用递归方式组合对象,从而允许添加任意多的对象职责。在下列情况下可以使用装饰器模式: (1)在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。 (2)处理那些可以撤销的职责。 (3)当不能 采用生成子类的方法进行扩充时。一种情况是可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况可能是因为

44、类定义被隐藏,或类定义不能用于生成子类。 装饰器模式的结构如下图所示。其中: 抽象组件角色 (Component):定义一个对象接口,以规范准备接受附加责任的对象,即可以给这些对象动态地添加职责。 具体组件角色 (ConcreteComponent):被装饰者,定义一个将要被装饰增加功能的类。可以给这个类的对象添加一些职责。 抽象装饰器 (Decorator):维持 一个指向构件 Corn-ponent对象的实例,并定义一个与抽象组件角色 Compo-nent接口一致的接口。 具体装饰器角色(Concrete Decorator):向组件添加职责。 图 61中的 Beverage对应的就是上图

45、中的抽象类 Component、 Espresso 和 DarkRoast对应的是 ConcreteCom-ponent,CondimentDecorator 对应抽象装饰器 Decorator、 Mocha和 Whip 扮演的是类CondimentDecorator 的具体装饰器角色 Concrete Decorator。 由于类 Beverage为其子类提供了统一的操作接口,所以将其定义为抽象类。通过可以在类名前加abstract关键字来定义抽象类,因此 (1)处应填入 abstract。 (2)和 (3)处考查构造函数的的定义。从 (2)处构造甬数体中返回值的类型及后续的子类继承程序可知

46、, (2)处应填入 String getDescription;从 public int cost()return ES-PRESSO PRICE; 可以看出, cost()函数的返回值为常量,因此 (3)处应填入 abstract int cost()。 (4)处考查对 CondimentDecorator的定义,在该类中声明一类成员变量,并在this beverage=beverage和 returnbeverage getDescription0+”, Mocha”加以使用。因此 (4)处应填入 Beverage beverage。 (5)和 (6)处考查实例化类模板的方法。类模板必须在实例化后才能使用。实例化类模板时,要给出类型实参。从类图可知, (5)和 (6)处均应填入 beverage。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1