1、软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷 67及答案与解析 一、必答题(共 4道大题,每道大题 15分) 0 阅读下列说明和图,回答问题 1问题 3,将解答填入答题纸的对应栏内。 【说明】 Pay&Drive系统 (开多少付多少 )能够根据驾驶里程自动计算应付的费用。 系统中存储了特定区域的道路交通网的信息。道路交通网由若干个路段 (RoadSegment)构成,每个路段由两个地理坐标点 (Node)标定,其里程数 (Distance)是已知的。在某些地理坐标点上安装了访问控制 (Access Contr01)设备,可以自动扫描行驶卡(Card)。行程 (Trajectory
2、)由一组连续的路段构成。行程的起点 (Entry)和终点 (Exit)都装有访问控制设备。 系统提供了 3种行驶卡。常规卡 (Regular Card)有效期 (Valid Period)为一年,可以在整个道路交通网内使用。季卡 (Season Card)有效期为三个月,可以在整个道路交通网内使用。单次卡 (Minitrip Card)在指定的行程内使用,且只能使用一次。其中,季卡和单次卡都是预付卡 (Prepaid Card),需要客户(Customer)预存一定的费用。 系统的主要功能有客户注册、申请行驶卡、使用行驶卡行驶等。 使用常规卡行驶,在进入行程起点时,系统记录行程起点、进入时间(
3、Date Of Entry)等信息。在到达行程终点时,系统根据行驶的里程数和所持卡的里程单价 (Unit Price)计算应付费用,并打印费用单 (Invoice)。 季卡的使用流程与常规卡类似,但是不需要打印费用单,系统自动从卡中扣除应付费用。 单次卡的使用流程与季卡类似,但还需要在行程的起点和终点上检查行驶路线是否符合该卡所规定的行驶路线。 现采用面向对象方法开发该系 统,使用 UML进行建模。构建出的用例图和类图分别如图 14-1和图 14-2所示。1 根据说明中的描述,给出图 14-1中 U1和 U2所对应的用例,以及 (1)所对应的关系。 2 根据说明中的描述,给出图 14-2中缺少
4、的 C1 C6所对应的类名以及 (2) (3)处所对应的多重度 (类名使用说明中给出的英文词汇 )。 3 根据说明中的描述,给出 Road Segment、 Trajectory和 Card所对应的类的关键属性 (属性名使用说明中给出的英文词汇 )。 3 阅读下列说明和图,回答问题 1问题 3,将解答填入 答题纸的对应栏内。 【说明】某网上购物平台的主要功能如下: (1)创建订单。顾客 (Customer)在线创建订单(Order),主要操作是向订单中添加项目、从订单中删除项目。订单中应列出所订购的商品 (Product)及其数量 (quantities)。 (2)提交订单。订单通过网络来提交
5、。在提交订单时,顾客需要提供其姓名 (Name)、收货地址 (Address)以及付款方式 (Form ofPayment)(预付卡、信用卡或者现金 )。为了制定送货计划以及安排送货车辆,系统必须确定订单量 (Volume)。除此之外, 还必须记录每种商品的名称 (Name)、造价(Cost Price)、售价 (Sale Price)以及单件商品的包装体积 (Cubic Volume)。 (3)处理订单。订单处理人员接收来自系统的订单;根据订单内容,安排配货,制定送货计划。在送货计划中不仅要指明发货日期 (Delivery Date),还要记录每个订单的限时发送要求 (Delivery Ti
6、me Window)。 (4)派单。订单处理人员将已配好货的订单转交给派送人员。 (5)送货收货。派送人员将货物送到顾客指定的收货地址。当顾客收货时,需要在运 货单 (Delivery Slip)上签收。签收后的运货单最终需交还给订单处理人员。 (6)收货确认。当订单处理人员收到签收过的运货单后,会和顾客进行一次再确认。 现采用面向对象方法开发上述系统,得到如图 14-6所示的用例图和如图 14-7所示的类图。4 根据说明中的描述,给出图 14-6中 A1 A3所对应的参与者名称和 U1 U2处所对应的用例名称。 5 根据说明中的描述,给出图 14-7中 C1 C3所对应的类名以及 (1) (
7、4)处所对应的多重度 (类名使用说明中给出的英文词汇 )。 6 根据说明中的描 述,将类 C2和 C3的属性补充完整 (属性名使用说明中给出的英文词汇 )。 6 某汽车停车场欲建立一个信息系统,已经调查到的需求如下: (1)在停车场的入口和出口分别安装一个自动栏杆、一台停车卡打印机、一台读卡器和一个车辆通过传感器,示意图如图 14-10所示。(2)当汽车到达入口时,驾驶员按下停车卡打印机的按钮获取停车卡。当驾驶员拿走停车卡后,系统命令栏杆自动抬起;汽车通过入口后,入口处的传感器通知系统发出命令,栏杆自动放下。 (3)在停车场内分布着若干个付款机器。驾驶员将在入口处获取的停车卡插入付款机器, 并
8、缴纳停车费。付清停车费之后,将获得一张出场卡,用于离开停车场。 (4)当汽车到达出口时,驾驶员将出场卡插入出口处的读卡器。如果这张卡是有效的,系统命令栏杆自动抬起;汽车通过出口后,出口传感器通知系统发出命令,栏杆自动放下。若这张卡是无效的,系统不发出栏杆抬起命令而发出告警信号。 (5)系统自动记录停车场内空闲的停车位的数量。若停车场当前没有车位,系统将在入口处显示 “车位已满 ”信息。这时,停车卡打印机将不再出卡,只允许场内汽车出场。 根据上述描述,采用面向对象方法对其进行分析与设计,得到了如表14-3所示的 类用例状态列表、如图 14-11所示的用例图、如图 14-12所示的初始类图以及如图
9、 14-13所示的描述入口自动栏杆行为的 UML状态图。7 根据说明中的描述,使用表 14-3给出的用例名称,给出图 14-11中 U1、 U2和U3所对应的用例。 8 根据说明中的描述,使用表 14-3给出的类的名称,给出图 14-12中的 A D所对应的类。 9 根据说明中的描述,使用表 14-3给出的状态名称,给出图 14-13中 S1 S4所对应的状态。 10 简要解释图 14-11中用例 U1和 U3之间的 extend关系的 内涵。 10 阅读下列说明和 C代码,回答问题 1问题 3,将解答写在答题纸的对应栏内。 【说明】 设有 n个货物要装入若干个容量为 C的集装箱以便运输,这
10、n个货物的体积分别为 S1, S2, , Sn,且有 siC(1in)。为节省运输成本,用尽可能少的集装箱来装运这 n个货物。 下面分别采用最先适宜策略和最优适宜策略来求解该问题。 最先适宜策略 (Firstfit)首先将所有的集装箱初始化为空,对于所有货物,按照所给的次序,每次将一个货物装入第一个能容纳它的集装箱中。 最优适宜策略 (Bestfit)与最先适宜策略类似,不同的是,总是把货物装到能容纳它且目前剩余容量最小的集装箱,使得该箱子装入货物后闲置空间最小。 【 C代码】 下面是这两个算法的 C语言核心代码。 (1)变量说明。 n:货物数。 c:集装箱容量。 s:数组,长度为 n,其中每
11、个元素表示货物的体积,下标从 0开始。 b:数组,长度为 n, bi表示第 i+1个集装箱当前已经装入货物的体积,下标从0。 i, j:循环变量。 k:所需的集装箱数。 min:当前所用的各集装箱装入了第 i个货物后的最小剩余容量。 m:当前所需要的集装箱数。 temp:临时变量。 (2)函数 firstfit。 int firstfit() inti, j; k=0: ; for(i=0; i(j+1)?k: (j+1); returnk (3)函数 bestfit。 int bestfit() int i, j, min, m , temp; k=0; for(i=0; i0 &temp(
12、m+1)?k: (m+1); return k; 11 根据【说明】和【 C代码】,填充 C代码中的空 (1) (4)。 12 根据【说明】和【 C代码】,该问题在最先适宜和最优适宜策略下分别采用了(5)和 (6)算法设计策略,时间复杂度分别为 (7)和 (8)(用 O符号表示 )。 13 考 虑实例 n=10, C=10,各个货物的体积为 4, 2, 7, 3, 5, 4, 2, 3, 6,2。该实例在最先适宜和最优适宜策略下所需的集装箱数分别为 (9)和 (10)。考虑一般的情况,这两种求解策略能否确保得到最优解 ? (11)(能或否 )。 14 某大型商场内安装了多个简易的纸巾售卖机,自
13、动出售 2元钱一包的纸巾,且每次仅售出一包纸巾。纸巾售卖机的状态图如图 16-2所示。采用状态 (State)模式来实现该纸巾售卖机,得到如图 16-3所示的类图。其中类 State为抽象类,定义了投币、退币、出纸巾等方法接口。类 SoldState、 SoldOutStateNoQuarterState和HasQuarterState分别对应图 16-2中纸巾售卖机的 4种状态:售出纸巾、纸巾售完、没有投币、有 2元钱。【 C+代码】includeusing namespace std;以下为类的定义部分 class TissueMachine; 类的提前引用 class Statepubl
14、ic: virtual void insertQuarter()=0;投币 virtual void ejectQuarter()=0;退币 virtual void turnCrank()=0;按 “出纸巾 ”按钮 virtual void dispense()=0;出纸巾 ; *类 SoldOutState、 NoQuarterState、HasQuarterState、 SoldState的定义省略,每个类中均定义了私有数据成员TissueMachine* tissueMachine; * Class TiSsueMachine private: (1)*soldOutState, no
15、QuarterState, *hasQuarterState, *soldState, *State; int count; 纸巾数 public: TiSsueMachine(int numbers); void setState(State* state); State* getHasQuarterState(); State* getNoQuarterState(); State* getSoldState(); State* getSoldOutState(); int getCount(); 其余代码省略 ;以下为类的实现部分 void NoQuarterState : insert
16、Quarter() tissueMachine-setState(2); void HasQuarterState: ejectQuarter()tissueMachine-setState(3); void SoldState: dispense() if(tissueMachine-getCount() 0) tissueMachine-setState(4); else tissueMachine-setState(5); 其余代码省略 15 已知某类库开发商提供了一套类库,类库中定义了 Application类和 Document类,它们之间的关系如图 16-5所示。其中, Appli
17、cation类表示应用程序自身,而Document类则表示应用程序打开的文档。 Application类负责打开一个已有的以外部形式存储的文档,如一个文件,一旦从该文件中读出信息后,它就由一个Document对象表示了。当开发一个具体的应用程序时,开发者需要分别创建自己的 Application和Document子类。例如,图 16-5中的类 MyApplication和类 MyDocument,并分别实现 Application和 Document类中的某些方法。 已知 Application类中的openDocument方法采用了模板方法 (Template Method)设计模式,该方法
18、定义了打开文档的每一个主要步骤如下: (1)首先检查文档是否能够被打开,若不能打开,则给出出错信息并返回。 (2)创建文档对象。 (3)通过文档对象打开文档。 (4)通过文档对象读取文档信息。 (5)将文档对象加入到 Application的文档对象集合中。 【 Java代码 】 abstract class Document public void save( ) *存储文档数据,此处代码省略 * public void open(String docName) *打开文档,此处代码省略 * public void close( ) *关闭文档,此处代码省略 * public abstrac
19、t void read(String docName); ; abstract class Appplication private Vectordocs; *文档对象集合 * public boolean canOpenDocument( String docName ) *判断是否可以打开指定文档,返回真值时表示可以打开,返回假值表示不可打开,此处代 码省略 * public void addDocument(Document aDocument) *将文档对象添加到文档对象集合中 * docs add(2); public abstract Document docreateDocume
20、nt( ); *创建一个文档对象 * public void openDocument(String docName) *打开文档 * if (3) System out println(”文档无法打开 !”); return; (4)adoc= (5); (6); (7); (8); ; 16 某咖啡店当卖咖啡时,可以根据顾客的要求在其中加入各种配料,咖啡店会根据所加入的配料来计算费用。咖啡店所供应的咖啡及配料的种类和价格如表 16-2所示。现采用装饰器 (Decorator)模式来实现计算费用的功能,得到如图 16-8所示的类图。【 Java代码】 import Java util *;
21、(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=2 5; public Espress0()description=“Espresso”; public int cost() retu
22、rn ESPRESSO PRICE; class DarkRoast extends Beverage 深度烘焙咖啡 private finalint DARKROAST PRICE=20; public DarkRoast0 description=“DarkRoast”; public int cost()rcturn DARKROAST PRICE; class Mocha extends CondimentDecorator 摩卡 private final int MOCHA PRICE=10; public Mocha(Beverage beverage) this beverag
23、e=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 getDescription() re
24、turn beverage getDescription()+“, Whip”; public int cost()return WHIP_PRICE+beverage cost(); public class Coffeepublic static void main(String args)Beverage beverage=new DarkRoast(); beverage=new Mocha (5); beverage=new Whip (6) ; System out println(beverage getDescription0 +“¥ ” +beverage cost(); 编
25、译运行上述程序,其输出 结果为: DarkRoast, Mocha, Whip¥ 38 软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷 67答案与解析 一、必答题(共 4道大题,每道大题 15分) 【知识模块】 UML建模 1 【正确答案】 U1:使用常规卡行驶。 U2:使用单次卡行驶。 (1)extend。 【试题解析】 本题主要考查用例图。 用例之间的关系主要有以下三种: (1)包含关系。当可以从两个或两个以上的用例中提取公共行为时,应该使用包含关系来表示它们,用 表示。 (2)扩展关系。如果一个用例明显地混合了两种或两种以上的不同场景,即根据情况可能发生多种分支,则可以将这个
26、用例分为一个基本用例和一个或多个扩展用例,这样使描述可能更加清晰,用 表示。 (3)泛化关系。当多个用例共同拥有一种类似的结构和行为的时候,可以将它们的共性抽象成为父用例,其他的用例作为泛化关系中的子用例。 在本题中,从题目的描述中,不难看出,用例图中缺失的用例有 “使用常规卡行驶 ”和 “使用单次卡行驶 ”,那么 U1和 U2具体对应哪个用例。根据题目 说明并结合用例图来看, “使用季卡行驶 ”与 U1是泛化关系,由此可知 U1应该是 “使用常规卡行驶 ”,而 U2是 “使用单次卡行驶 ”,根据题目描述 “单次卡的使用流程与季卡类似,但还需要在行程的起点和终点上检查行驶路线是否符合该卡所规定
27、的行驶路线 ”,由此可知, U1是对 “使用季卡行驶 ”的扩展,由此第 1空应填 。 【知识模块】 UML建模 2 【正确答案】 C1: RoadSegment C2: Trajectory C3: Card C4: RegularCard C5: PrepaidCard C6: MinitripCard (2)1。 (3)1 3。 【试题解析】 本问题考查类图。对于这个题目,应该结合题目的描述及给出的类图来求解。根据题目的描述,本系统包含的类主要有路段 (Road Segment)、地理坐标点 (Node)、访问控制 (Access Control)设备、自动扫描行驶卡 (Card)、行程(
28、Trajectory)、常规卡 (Regular Card)、季卡 (Season Card)、单次卡 (Minitrip Card)、预付卡 (Prepaid Card)和客户 (Customer)等。 从类图中 C1与类 Node的关系和 C2与 AccessControlNode的关系,再结合题目描述 “路段由两个地理坐标点 (Node)标定 ”可以知道 C1应该是路段类,而由题目描述 “行程 (Trajectory)由一组连续的路段构成。行程的起点 (Entry)和终点 (Exit)都装有访问控制备 ”可以知道 C2应该是行程 (Trajectory)类。 而从类图看, C4和 C5是
29、继承于 C3的,再结合类图中 C3与客户类和行程类的关系,可知 C3应该是一切卡的抽象类,因此是自动扫描行驶卡 (Card),而 C5是C6和季卡的父类,再根据题目描述 “季卡和单次卡都是预付卡 (PrepaidCard)”可知C5是预付 (PrepaidCard),而 C6是单次卡 (MinitripCard),而 C4是常规卡(RegularCard)。 在 UML中,多重度又称重复度,多重度表示为一个整数范围 n m,整数 n定义所连接的最少对象的数目,而 m则为最多对象数 (当不知道确切的最大数时,最大数用木号表示 )。最常见的多重性有 0 1、 0 *、 1 1和 1 *,而木与 0
30、 *是等价的。 空 (2)和 (3)描述的是客户与卡之间的多 重度,题目告诉我们系统有三种卡,因此一个客户最多可以持有这三种卡,因此空 (3)应填 1 3。而一个卡只能被一个客户持有,因此客户这端应该填 1。 【知识模块】 UML建模 3 【正确答案】 RoadSegment的属性: Distance。 Trajectory的属性: Entry、 Exit、 DateOfEntry。 Card的属性: UnitPrice、 ValidPeriod。 【试题解析】 本题考查面向对象开发相关知识,涉及 UML用例图、类图以及类图设计时的设计模式。 UML目前在面向对象软件开发 中广泛使用,是面向对
31、象软件开发考查的重要内容。 根据题目描述, RoadSegment类应该包含的关键属性是里程数 (Distance),因为这能标识一个路段的长度;而 Trajectory类应该包含的关键属性是起点 (Entry)、终点 (Exit)、进入时间 (Date Of Entry),这样才能说明某一次行程是何时从哪里开始到那里结束的;而 Card类的关键属性应包含有效期 (Valid Period)和里程单价(Unit Price)。 【知识模块】 UML建模 【知识模块】 UML建模 4 【正确答案】 A1:顾客 A2:订单处理人员 A3:派送人员 U1:收货 U2:派单 【试题解析】 本题主要考查
32、用例图。 在本题中,从题目的描述中,可以知道,本系统的用例主要有创建订单、提交订单、处理订单、派单、收货、送货及收货确认,本系统的参与者主要有订单处理人员、顾客和派送人员。 其中在用例图中还没有给出的用例有派单和收货,因此 U1和 U2应该就是这两个用例,具体它们分别对应那一个呢 ?需要先来确认 A1 A3所对应的参与者, A1与用例创建订单、 U1及收货确认有关系,根据题目描述 “顾 客在线创建订单 ”可知A1应该是顾客,同样的道理,不难得出 A2是订单处理人员, A3是派送人员。 用例 U1与三个参与者都有关系,那么根据题目描述 “派送人员将货物送到顾客指定的收货地址。当顾客收货时,需要在
33、运货单 (Delivery Slip)上签收。签收后的运货单最终需交还给订单处理人员 ”,不难得知 U1应该是收货。而 U2是派单。 【知识模块】 UML建模 5 【正确答案】 C1: Customer C2: Order C3: Product (1)1 (2)0 n或 0 * (3)0 n或 0 * (4)1 n或 1 * 【试题解析】 本问题考查类图。对于这个题目,应该结合题目的描述及给出的类图来求解。从题目给出的类图中可以看出, C1中包含了属性姓名 (Name)和收货地址 (Address),由此不难推断出 C1是顾客 (Customer)类。 C2与 C1和 Delivery Ti
34、me Window类有关联,可以推断出 C2应该是订单(Order)类,而 C3与 C2是一种组合关系,其中 C2是整体,而 C3是部分,而 C2是订单,订单是由商品组成的,由此可以 C3是商品 (Product)类。 在 UML中,多重度又称重复度,多重度表示为一个整数范围 n m,整数 n定义所连接的最少对象的数目,而 m则为最多对象数 (当不知道确切的最大数时,最大数用 *号表示 )。最常见的多重性有 0 1、 0 *、 1 1和 1 *,而 *与 0 *是等价的。 顾客可以创建多个订单,也可以不创建订单,而一个订单必须属于而且只能属于 1个顾客,因此空 (1)与空 (2)分别为 1和
35、1 *。 一个订单中可以至少应该包含一个商品,也可以包含多个商品,而某商品可以不在任何订单中,也可以是多个订单中都有该商品,因此空 (3)与空 (4)应该分别是0 *和 1 *。 【知识模块】 UML建模 6 【正确答案】 C2: volume、 delivery date、 form Of payment。 C3: cubic volume、 cost price、 sale price。 【试题解析】 本题考查面向对象开发相关知识,涉及 UML用例图、类图以及类图设计时的设计模式。 UML目前在面向对象软件开发中广泛使用,是面向对象软件开发考查的重要内容。 根据题目描述,系统必须记录每种商
36、品的名称 (Name)、造价 (Cost Price)、售价(Sale Price)以及单件商品的包装体积 (Cubic Volume),因此 C3除了名称 (Name)外,还应该拥有造价、售价以及单件商品的包装体积等属性。 根据题目描述,每个订单应该有其付款方式 (Form Of Payment)、订单量(Volume)和发货日期 (Delivery Date)。 【知识模块】 UML建模 【知识模块】 UML建模 7 【正确答案】 U1: Car entry U2: Car exit U3: Car entry when full 【试题 解析】 题目中车辆入场和出场,而入场时分有空位和无
37、空位的情形,当无车位时显示 “车位已满 ”信息。这时,停车卡打印机将不再出卡,只允许场内汽车出场。说明入场时,没有车位入场是一种扩展关系。根据图 14-11和表 14-3可以得出 U1为 Car entry, U2为 Car exit, U3为 Car entry when full。 【知识模块】 UML建模 8 【正确答案】 A: CarPark B: Barrier C: EntryBarrier D: ExitBarrier 其中, C、 D的答案可以互换 【试题解 析】 根据题目的描述及表 14-3中的内容,可以先来确定类 B。汽车出入口,当卡有效时,系统自动抬起栏杆;当卡无效时,则
38、系统不抬栏杆,且发出警告。所以自动护栏类 (Barrier)有两种子类:一个是入口的护栏类(EntryBarrier);另一个就是出口的护栏类 (ExitBarrier)。构成了这种父子关系的类在图 14-12中表示为,类 B为护栏类 (Barrier):类 C为入口护栏类(EntryBarrier);类 D为出口护栏类 (ExitBarrier)。再确定类 A,由于停车场管理系统管理着多张卡,从图 14-12中 可以看出类 Centralcomputer与类 A之间有1 *的关系;而且类 A与类 B(Barrier)之间存在聚集关系;题目的描述中有:当有车位时允许入场,无车位时停车卡打印机将
39、不再出卡,只允许场内汽车出场。所以一张卡片可以确定多个护栏抬起或不发卡入场,由表 14-3可以得出类 A为停车场保存卡位信息类 (CarPark)。 【知识模块】 UML建模 9 【正确答案】 S1: Idle S2: AwaitTicketTake S3: Await Enable S4: Await Entry 【试题解析】 根 据题目的描述和表 14-3,黑点表示开始状态,到达 S1,很容易确定 S1为状态: Idle(空闲状态,汽车可以进入停车场 )。又因为状态 Disable(没有车位 )到 S3有事件 “索取停车卡 ”,而从 S3到 S2有事件 “有空闲车位打印停车卡 ”,由题目的
40、第 (4)、 (5)点可知,车位满了后,若有车辆出去,则释放一个车位;若没有,则等待打印停车卡。所以可以确定 S3的状态为 Await Ticket Take(等待打印停车卡 )。 S1到 S2有事件 “索取停车卡打印停车卡 ”, S2到 S4有事件 “取走停车卡抬起护栏 ”,包括 S3到 S2有事件 “有空闲车位打印停车卡 ”,则说明 S2这个状态都与 “有车位,才发卡 ”有关,要等待有车位才发卡,或取卡放行后进入等待。所以 S2为状态 AwaitEnable(等待停车场内有空位 )。 最后来确定 S4。由于 S2到 S4有事件 “取走停车卡抬起护栏 ”, S4到 S1有事件 “汽车进入停车
41、场放下护栏 ”。很显然,当取走停车卡抬起护栏将车子放行后,管理系统将停车位的空闲车位数加 1;当汽车进入停车场放下护栏后,管理系统将停车位的空闲车位数减 1。因此状态 S4为 Await Entry(等待汽车进入 )。 【 知识模块】 UML建模 10 【正确答案】 用例之间的延伸关系用于对被用户看作是可选系统行为的用例的一部分建模。通过这种方式,可以把可选行为从必需的行为中分离出来。 【试题解析】 本题考查的面比较广,涉及用例图、类图和状态图。 题目中汽车的入场,通常是指有空位入场;但也有要入场但没有空位的情况,这要等待。而这种关系就是扩展了的入场关系。 【知识模块】 UML建模 【知识模块
42、】 数据结构与算法应用 11 【正确答案】 (1)j=0。 (2)bj=bj+si及其等价 形式。 (3)min=temp。 (4)bm=bm+si及其等价形式。 【知识模块】 数据结构与算法应用 12 【正确答案】 (5)贪心。 (6)贪心。 (7)O(n2)。 (8)O(n2)。 【知识模块】 数据结构与算法应用 13 【正确答案】 (9)5。 (10)4。 (11)否。 【试题解析】 本题考查最先适宜策略和最优适宜策略。这两种策略在题目的描述中给出了清楚的解析,对于最先适宜策略,其关键是每次将一个货物装入第一个能容纳它的集装箱中;而对于最优适宜策略,则总是把货 物装到能容纳它且目前剩余容
43、量最小的集装箱。 下面具体分析程序。函数 firstfit是实现最先适宜策略的,从程序不难看出,第 (1)空所在的 for循环,就是要将 n各货物装入到集装箱。根据算法的描述,是依次从第一个集装箱找,找到合适的就装入货物,依次没装入一个货物,都是依次从第一个集装箱找。结合后面的程序不难知道 j标识这当前是第几个集装箱。因此每装入一个货物后,要将 j清 0,标识从头再找,因此第 (1)空的答案是 j=0。而接下来的 while循环,从其条件表达式 C-bj0&temp2)。 第 3个问题,其实是这个题 目中最简单的问题,也是算法的一个实际应用。对于这个实例,如果采用最先适宜策略,那么货物 4,
44、2, 3存放在第一个集装箱,而 7, 2存放在第二个集装箱, 5, 4存放在第三个集装箱, 3, 6存放在第四个集装箱,而 2存放在第五个集装箱。 如果采用最优适宜策略,那么货物 4, 2, 4存放在第一个集装箱,而 7, 3存放在二个集装箱, 5, 2, 3存放在第三个集装箱, 6, 2存放在第四个集装箱。 因为这两种方法都是采用的贪心策略,那么在一般情况下,是不能确保得到最优解的。 【知识模块】 数据结构与算 法应用 14 【正确答案】 (1)State (2)tissueMachine-getHasQuarterState() (3)tissueMachine-getNoQuarterS
45、tate() (4)tissueMachine-getNoQuarterState() (5)tissueMachine-getSoldOutState() 【试题解析】 本题考查基本面向对象设计模式的运用能力。 状态设计模式主要是能够使一个对象的内在状态改变时允许改变其行为,使这个对象看起来像是改变了 其类。由类图可知类 State是类 SoldState、SoldOutState、 NoQuarterState和 HasQuarterState分的父类,它抽象了这 4个类的共有属性和行为。在使用中,无论是这 4个类中哪个类的对象,都可被当作State对象来使用。 根据题目的描述,可以知道一
46、个纸巾售卖机它由 4种状态,分别是售出纸巾、纸巾售完、没有投币、有 2元钱。 在本题中,根据程序不难知道第 (1)空是要定义 5个对象指针,而这些对象指针都应该属于 State类型,因此第一空答案为 State。 第 (2)在类 NoQuarterState(没有投币 )的 insertQuarter函数中,而这个函数是投币函数,在该函数中,使用了 tissueMachine类的 setState方法,该方法是设置纸巾售卖机的当前状态,根据题目给出的纸巾售卖机状态图,可以知道,从没有投币状态,经过投币后,应该转换到有 2元钱状态。 setState方法的参数是一个State的对象,因此第 (2
47、)空应该是一个有 2元钱对象,这里可以新创建一个该对象,也可以通过 tissueMachine类的 getHasQuarterState方法来获得这样一个对象,所 以第 (2)空答案应该是 tissueMachine-getHasQuarterState0或 new HasQuarterState。 第 (3)在类 HasQuarterState(有 2元钱 )的 ejectQuarter函数中,而这个函数是退币函数,在该函数中,也使用了 tissueMachine类的 setState方法,该方法是设置纸巾售卖机的当前状态,根据题目给出的纸巾售卖机状态图,可以知道,从有 2元钱状态,经过退币
48、后,应该转换到没有投币状态。而 setState方法的参数是一个State的对象,因此第 (3)空应该是一个没有投币对象,而这里我们可以新创建一个该对象,也可以通过 tissueMachine类的 getNoQuarterState方法来获得这样一个对象,所以第 (3)空答案应该是 “tissueMachine-getNoQuarterState()”或 “new NoQuarterState”。 同样的道理,可以知道第 (4)空的答案是 tissueMachine-getNoQuarterState()或newNoQuarterState。第 (5)空的答案是 tissueMachine-getSoldOutState()或 new SoldOutState。 【知识模块】 面向对象程序设计 15 【正确答案】 (1)Document (2)aDocument (3)!canOpenDocument(docName) (4)Document (5)doCreateDocument() (6)adoc open(docName) (7)adoc read(docName) 【试题解析】 本题考查了 Java语言的应用能力和模板方法设计模式。空 (1)考查了 Java库中 Vector模板类的使用, 由于 Vector模板类可以存储任意类型,在定义时需要指定其存储
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1