2017年上半年 软件设计师 案例分析
- 格式:docx
- 大小:893.43 KB
- 文档页数:20
2017年上半年软件水平考试(高级)系统分析师下午(案例分析)真题试卷(题后含答案及解析)题型有:1.jpg />正确答案:(1)乘客信息注册、乘客身份认证、乘客信用信息管理。
(2)出租车司机信息注册、出租车司机身份认证、司机违章情况审核。
(3)支付管理。
(4)订单发起、订单提交、订单跟踪、订单撤销。
3.为了提高系统开发效率,公司的系统分析师王工设计了一个基于微服务的软件交付流程,其核心思想是将业务功能定义为任务,将完成某个业务功能时涉及到的步骤和过程定义为子任务,只有当所有的子任务都测试通过后该业务功能才能上线交付。
请基于王工设计的在线支付微服务交付流程,从(a)~(f)中分别选出合适的内容填入图1—1中的(1)~(5)处。
选项:(a)提交测试(b)全量上线(c)对接借记卡(d)获取个人优惠券(e)试部署(f)对账正确答案:(1)f(2)c(3)d(4)a(5)b阅读以下关于系统数据分析与建模的叙述,在答题纸上回答以下问题。
【说明】某软件公司受快递公司委托,拟开发一套快递业务综合管理系统,实现快递单和物流信息的综合管理。
项目组在系统逻辑数据模型设计中,需要描述的快递单样式如图2—1所示,图2—2是项目组针对该快递单所设计的候选实体及其属性。
4.数据库设计主要包括概念设计、逻辑设计和物理设计三个阶段,请用200字以内文字说明这三个阶段的主要任务。
正确答案:概念设计也称为概念结构设计,其任务是在需求分析阶段产生的需求说明书的基础上,按照特定的方法将它们抽象为一个不依赖于任何DBMS 的数据模型,即概念模型。
概念模型的表现形式即ER模型。
逻辑设计也称为逻辑结构设计,其主要任务是将概念模型转换为某个特定的DBMS上的逻辑模型。
设计逻辑结构时,首先为概念模型选定一个合适的逻辑模型(如:关系模式或层次模型),然后将其转化为由特定DBMS支持的逻辑模型,最后对逻辑模型进行优化。
物理设计也称为物理结构设计,其任务是对给定的逻辑模型选取一个最适合应用环境的物理结构。
软考第四批案例题软考是指软件设计师等级考试,是国内软件行业的专业考试之一。
软考的考试科目分为理论考试和案例分析题,其中案例分析题是考察考生对软件设计、开发和管理等方面的综合能力。
下面我将根据软考第四批案例题进行分析和讨论。
案例题一:某公司的软件项目管理某公司计划开发一款新的软件产品,该产品包含多个模块和功能。
为了保证项目的顺利进行和最终的成功交付,项目管理团队需要制定一个全面的项目计划,并合理分配资源和任务。
同时,他们还需要对项目进行跟踪和监控,及时发现和解决问题。
请根据上述情景,分析和讨论以下几个问题:1. 项目计划的制定和调整:项目计划是软件项目管理的基础,它需要包括项目目标、需求分析、资源分配、任务分解、进度计划等内容。
项目计划的制定和调整需要考虑到项目的整体目标和需求,同时也需要考虑到项目组成员的实际能力和可行性。
项目计划的调整应该是合理的,要根据项目进展情况和外部环境的变化进行调整。
2. 资源和任务的分配:在项目管理中,资源和任务的分配是非常重要的环节。
合理的资源和任务分配可以提高项目的效率和质量。
在分配资源和任务时,需要考虑到项目组成员的技能和能力,合理地分配任务,使每个成员能够发挥自己的优势。
同时,还需要考虑到项目的紧急性和优先级,合理分配资源,确保项目的顺利进行。
3. 项目的跟踪和监控:项目的跟踪和监控是保证项目按时交付的重要手段。
通过对项目的跟踪和监控,可以及时发现和解决问题,确保项目的质量和进度。
在项目跟踪和监控中,需要建立相应的指标和标准,对项目的进展进行定期的检查和评估。
同时,还需要建立沟通和协调的机制,及时沟通和解决项目中的问题。
案例题二:某软件公司的测试管理某软件公司负责开发和维护一款大型的软件系统,该系统包含多个模块和功能。
为了保证软件的质量和稳定性,该公司需要建立和完善测试管理的流程和方法。
请根据上述情景,分析和讨论以下几个问题:1. 测试策略和方法:在软件测试中,测试策略和方法的选择和制定是非常重要的。
2017年5月第1题CPU 执行算术运算或者逻辑运算时,常将源操作数和结果暂存在(1)中。
(1)A. 程序计数器 (PC) B. 累加器 (AC) C. 指令寄存器 (IR) D. 地址寄存器 (AR) 【答案】B【解析】程序计数器(PC)是用于存放下一条指令所在单元的地址的地方。
累加器(AC)全称累加寄存器,是一个通用寄存器。
其功能是,当运算器的算术逻辑单元(ALU)执行算术或逻辑运算时,为 ALU 提供一个工作区。
累加寄存器暂时存放 ALU 运算的结果信息。
指令寄存器(IR)用于存放当前从主存储器读出的正在执行的一条指令。
地址寄存器(AR)用来保存当前 CPU 所访问的内存单元的地址。
由于在内存和 CPU 之间存在着操作速度上的差别,所以必须使用地址寄存器来保持地址信息,直到内存的读/写操作完成为止。
2017年5月第2题要判断宇长为 16 位的整数 a 的低四位是否全为 0,则(2)。
(2)A.将 a 与 0x000F 进行"逻辑与"运算,然后判断运算结果是否等于 0B. 将 a 与 0x000F 进行"逻辑或"运算,然后判断运算结果是否等于 FC. 将 a 与 0x000F 进行"逻辑异或"运算,然后判断运算结果是否等于 OD. 将 a 与 0x000F 进行"逻辑与"运算,然后判断运算结果是否等于 F【答案】A【解析】判断是否为1, 让1和它做与运算,为1时为1,不为1时为02017年5月第3题计算机系统中常用的输入/输出控制方式有无条件传送、中断、程序查询和 DMA 方式等。
当采用(3)方式时,不需要 CPU 执行程序指令来传送数据。
(3)A.中断 B.程序查询 C.无条件传送 D.DMA 【答案】D【解析】DMA(直接存储器访问方式),DMA 将数据从一个地址空间复制到另外一个地址空间时,CPU 初始化这个传输动作,传输动作本身是由 DMA 控制器来执行和完成。
‘’2017年5月第1题CPU 执行算术运算或者逻辑运算时,常将源操作数和结果暂存在(1)中。
(1)A. 程序计数器 (PC) B. 累加器 (AC) C. 指令寄存器 (IR) D. 地址寄存器 (AR) 【答案】B【解析】程序计数器(PC)是用于存放下一条指令所在单元的地址的地方。
累加器(AC)全称累加寄存器,是一个通用寄存器。
其功能是,当运算器的算术逻辑单元(ALU)执行算术或逻辑运算时,为 ALU 提供一个工作区。
累加寄存器暂时存放 ALU 运算的结果信息。
指令寄存器(IR)用于存放当前从主存储器读出的正在执行的一条指令。
地址寄存器(AR)用来保存当前 CPU 所访问的内存单元的地址。
由于在内存和 CPU 之间存在着操作速度上的差别,所以必须使用地址寄存器来保持地址信息,直到内存的读/写操作完成为止。
2017年5月第2题要判断宇长为 16 位的整数 a 的低四位是否全为 0,则(2)。
(2)A.将 a 与 0x000F 进行"逻辑与"运算,然后判断运算结果是否等于 0B. 将 a 与 0x000F 进行"逻辑或"运算,然后判断运算结果是否等于 FC. 将 a 与 0x000F 进行"逻辑异或"运算,然后判断运算结果是否等于 OD. 将 a 与 0x000F 进行"逻辑与"运算,然后判断运算结果是否等于 F【答案】A【解析】判断是否为1,让1和它做与运算,为1时为1,不为1时为02017年5月第3题计算机系统中常用的输入/输出控制方式有无条件传送、中断、程序查询和 DMA 方式等。
当采用(3)方式时,不需要 CPU 执行程序指令来传送数据。
(3)A.中断 B.程序查询 C.无条件传送 D.DMA 【答案】D【解析】DMA(直接存储器访问方式),DMA 将数据从一个地址空间复制到另外一个地址空间时,CPU 初始化这个传输动作,传输动作本身是由 DMA 控制器来执行和完成。
试题一阅读下列说明和图,回答问题 1 至问题 4。
【说明】某医疗器械公司作为复杂医疗产品的集成商,必须保持高质量部件的及时供应。
为了实现这一目标,该公司欲开发一采购系统。
系统的主要功能如下:1.检查库存水平。
采购部门每天检查部件库存量,当特定部件的库存量降至其订货点时,返回低存量部件及库存量。
2.下达采购订单。
采购部门针对低存量部件及库存量提交采购请求,向其供应商(通过供应商文件访问供应商数据)下达采购订单,并存储于采购订单文件中。
3. 交运部件。
当供应商提交提单并交运部件时,运输和接收(S/R)部门通过执行以下三步过程接收货物:(1)验证装运部件。
通过访问采购订单并将其与提单进行比较来验证装运的部件,并将提单信息发给 S/R 职员。
如果收货部件项目出现在采购订单和提单上,则已验证的提单和收货部件项目将被送去检验。
否则,将 S/R 职员提交的装运错误信息生成装运错误通知发送给供应商。
(2) 检验部件质量。
通过访问质量标准来检查装运部件的质量,并将己验证的提单发给检验员。
如果部件满足所有质量标准,则将其添加到接受的部件列表用于更新部件库存。
如果部件未通过检查,则将检验员创建的缺陷装运信息生成缺陷装运通知发送给供应商。
(3)更新部件库存。
库管员根据收到的接受的部件列表添加本次采购数量,与原有库存量累加来更新库存部件中的库存量。
标记订单采购完成。
现采用结构化方法对该采购系统进行分析与设计,获得如图 1-1 所示的上下文数据流图和图 1-2 所示的 0 层数据流图。
图 1-2 0 层数据流图【问题 1】(5 分)使用说明中的词语,给出图 1-1 中的实体 E1 ~E5【问题 2】(4 分)使用说明中的词语,给出图 1-2 中的数据存储 D1~D4 的名称。
【问题 3】(4 分)根据说明和图中术语,补充图 1-2 中缺失的数据流及其起点和终点。
【问题 4】(2 分) 用 200 字内,说明建模图 1-1 和图 1-2 时如何保持数据流图平衡。
2017年系统架构设计师案例分析试题加答案(1)系统架构设计师考试属于软考中的一项高级资格考试,考试分综合知识、案例分析和论文3个科目。
下午的案例分析是考试的一大难点,希赛小编为大家整理了几道系统架构设计师案例分析试题,希望对大家有所帮助。
阅读以下关于软件系统架构选择的说明,回答问题。
希赛公司欲针对Linux操作系统开发一个KWIC(KevWordinContext)检索系统。
该系统接收用户输入的查洵关键字,依据字母顺序给出相关帮助文档并根据帮助文档内容进行循环滚动阅读。
在对KWIC系统进行需求分析时,公司的业务专家发现用户后续还有可能采用其他方式展示帮助内容。
根据目前需求,公司的技术人员决定通过重复剪切帮助文档中的第一个单词并将其插入到行尾的方式实现帮助文档内容的循环滚动,后续还将采用其他的方法实现这一功能。
在对KWIC系统的架构进行设计时,公司的架构师王工提出采用共享数据的主程序-子程序的架构风格,而李工则主张采用管道-过滤器的架构风格。
在架构评估会议上,大家从系统的算法变更、功能变更、数据表示变更和性能等方面对这两种方案进行评价,最终采用了李工的方案。
1、在实际的软件项目开发中,采用恰当的架构风格是项目成功的保证。
请用200字以内的文字说明什么是软件架构风格,并对主程序-子程序和管道-过滤器这两种架构风格的特点进行描述。
2、请完成表中的空白部分(用+表示优、-表示差),对王工和李工提出的架构风格进行评价,并指出采用李工方案的原因。
3、规划图是李工给出的架构设计示意图,请将恰当的功能描述填入图中的(1)~(4)。
参考答案1、软件架构风格是拙述特定软件系统组织方式的惯用模式。
组织方式描述了系统的组成构件和这些构件的组织方式,惯用模式则反映众多系统共有的结构和语义。
主程序-子程序架构风格中,所有的计算构件作为子程序协作工作,并由一个主程序顺序地调用这些子程序,构件通过共享存储区交换数据。
管道-过滤器架构风格中,每个构件都有一组输入和输出,构件接受数据输入,经过内部处理,然后产生数据输出。
2017年系统架构设计师案例分析试题加答案(4)系统架构设计师考试属于软考中的一项高级资格考试,考试分综合知识、案例分析和论文3个科目。
下午的案例分析是考试的一大难点,希赛小编为大家整理了几道系统架构设计师案例分析试题,希望对大家有所帮助。
阅读以下软件系统架构选择的问题,回答问题。
希赛公司欲开发一个车辆定速巡航控制系统,以确保车辆在不断变化的地形中以固定的速度行驶。
图给出了该系统的简化示意图。
表描述了各种系统输入的说明。
公司的领域专家对需求进行深入分析后,将系统需求认定为:任何时刻,只要定速巡航控制系统处于工作状态,就要有确定的期望速度,并通过调整引擎油门的设定值来维持期望速度。
在对车辆定速巡航控制系统的架构进行设计时,公司的架构师王工提出采用面向对象的架构风格,而李工则主张采用控制环路的架构风格。
在架构评估会议上,专家对这两种方案进行综合评价,最终采用了面向对象和控制环路相结合的混合架构风格。
定速巡航控制系统各种输入的说明10、在实际的软件项目开发中,采用成熟的架构风格是项目成功的保证。
请用200字以内的文字说明:什么是软件架构风格;面向对象和控制环路两种架构风格各自的特点。
11、用户需求没有明确给出该系统如何根据输入集合计算输出。
请用300字以内的文字针对该系统的增减速功能,分别给出两种架构风格中的主要构件,并详细描述计算过程。
12、实际的软件系统架构通常是多种架构风格的混合,不同的架构风格都有其适合的应用场景。
以该系统为例,针对面向对象架构风格和控制环路架构风格,各给出两个适合的应用场景,并简要说明理由。
参考答案10、软件架构风格是拙述某一类特定应用领域中软件系统的组织方式和惯用方式。
面向对象架构风格的特征是将数据表示和基本操作封装在对象中。
这种模式的构件是对象,对象维护自身表示的完整性,对象之间通过消息机制进行通信,对象交互时需要知道彼此的标识,通过对象之间的协作完成计算过程。
控制环路架构风格是将过程输出的指定属性维护在一个特定的参考值(设定点)。
2017年上半年软件设计师下午案例分析真题(试题六)6、阅读下列说明和Java代码,将应填入(n) 处的字句写在答题纸的对应栏内。
【说明】某快餐厅主要制作并出售儿童套餐,一般包括主餐(各类比萨)、饮料和玩具,其餐品种类可能不同,但其制作过程相同。
前台服务员(Waiter) 调度厨师制作套餐。
现采用生成器(Builder) 模式实现制作过程,得到如图6-1 所示的类图。
【Java代码】class Pizza {private String parts;public void setParts(String parts) { this.parts = parts; }public String toString() { return this.parts; }}abstract class PizzaBuilder {protected Pizza pizza;public Pizza getPizza() { return pizza; }public void createNewPizza() { pizza = new Pizza(); }public (1) ;}class HawaiianPizzaBuilder extends PizzaBuilder {public void buildParts() { pizza.setParts("cross + mild + ham&pineapp1e”};}class SpicyPizzaBuilder extends PizzaBuilder {public void buildParts() { pizza.setParts("pan baked + hot + pepperoni&salami"); } }class Waiter {private PizzaBuilder pizzaBuilder;public void setPizzaBuilder(PizzaBuilder pizzaBuilder) { /*设置构建器*/ ( 2 ) ;}public Pizza getPizza(){ return pizzaBuilder.getPizza(); }public void construct() { /*构建*/pizzaBuilder.createNewPizza();( 3 ) ;}}Class FastFoodOrdering {public static viod mainSting[]args) {Waiter waiter = new Waiter();PizzaBuilder hawaiian_pizzabuilder = new HawaiianPizzaBuilder();( 4 ) ;( 5 ) ;System.out.println("pizza: " + waiter.getPizza());}}程序的输出结果为:Pizza:cross + mild + ham&pineapple。
全国计算机技术与软件专业技术资格(水平)考试2017年上半年软件设计师下午试卷(考试时间14:00~16:30 共150 分钟)1.在答题纸的指定位置填写你所在的省、自治区、直辖市、计划单列市的名称。
2.在答题纸的指定位置填写准考证号、出生年月日和姓名。
3.答题纸上除填写上述内容外只能写解答。
4.本试卷共6道题,试题一至试题四是必答题,试题五至试题六选答1 道。
每题15 分,满分75 分。
5.解答时字迹务必清楚,字迹不清时,将不评分。
6.仿照下面例题,将解答写在答题纸的对应栏内。
例题2016 年下半年全国计算机技术与软件专业技术资格(水平)考试日期是(1)月(2)日。
因为正确的解答是“11 月 4 日”,故在答题纸的对应栏内写上“11”和“4”(参看下表)。
试题一(共15 分)阅读下列说明和图,回答问题 1 至问题 4,将解答填入答题纸的对应栏内。
【说明】某医疗器械公司作为复杂医疗产品的集成商,必须保持高质量部件的及时供应。
为了实现这一目标,该公司欲开发一采购系统。
系统的主要功能如下:1.检查库存水平。
采购部门每天检查部件库存量,当特定部件的库存量降至其订货点时,返回低存量部件及库存量。
2.下达采购订单。
采购部门针对低存量部件及库存量提交采购请求,向其供应商(通过供应商文件访问供应商数据)下达采购订单,并存储于采购订单文件中。
3. 交运部件。
当供应商提交提单并交运部件时,运输和接收(S/R)部门通过执行以下三步过程接收货物:(1)验证装运部件。
通过访问采购订单并将其与提单进行比较来验证装运的部件,并将提单信息发给 S/R 职员。
如果收货部件项目出现在采购订单和提单上,则已验证的提单和收货部件项目将被送去检验。
否则,将 S/R 职员提交的装运错误信息生成装运错误通知发送给供应商。
(2) 检验部件质量。
通过访问质量标准来检查装运部件的质量,并将己验证的提单发给检验员。
如果部件满足所有质量标准,则将其添加到接受的部件列表用于更新部件库存。
如果部件未通过检查,则将检验员创建的缺陷装运信息生成缺陷装运通知发送给供应商。
(3)更新部件库存。
库管员根据收到的接受的部件列表添加本次采购数量,与原有库存量累加来更新库存部件中的库存量。
标记订单采购完成。
现采用结构化方法对该采购系统进行分析与设计,获得如图 1-1 所示的上下文数据流图和图 1-2 所示的 0 层数据流图。
图 1-2 0 层数据流图【问题 1】(5 分)使用说明中的词语,给出图 1-1 中的实体 E1 ~E5【问题 2】(4 分)使用说明中的词语,给出图 1-2 中的数据存储 D1~D4 的名称。
【问题 3】(4 分)根据说明和图中术语,补充图 1-2 中缺失的数据流及其起点和终点。
【问题 4】(2 分)用 200 字以内文字,说明建模图 1-1 和图 1-2 时如何保持数据流图平衡。
试题二(共 15 分)阅读下列说明,回答问题 1 至问题 3,将解答填入答题纸的对应栏内。
【说明】某房屋租赁公司拟开发一个管理系统用于管理其持有的房屋、租客及员工信息。
请根据下述需求描述完成系统的数据库设计。
【需求描述】1.公司拥有多幢公寓楼,每幢公寓楼有唯一的楼编号和地址。
每幢公寓楼中有多套公寓,每套公寓在楼内有唯一的编号(不同公寓楼内的公寓号可相同〉。
系统需记录每套公寓的卧室数和卫生间数。
2.员工和租客在系统中有唯一的编号(员工编号和租客编号)。
3.对于每个租客,系统需记录姓名、多个联系电话、一个银行账号(方便自动扣房租)、一个紧急联系人的姓名及联系电话。
4.系统需记录每个员工的姓名、一个联系电话和月工资。
员工类别可以是经理或维修工,也可兼任。
每个经理可以管理多幢公寓楼。
每幢公寓楼必须由一个经理管理。
系统需记录每个维修工的业务技能,如:水暖维修、电工、木工等。
5.租客租赁公寓必须和公司签订租赁合同。
一份租赁合同通常由一个或多个租客(合租)与该公寓楼的经理签订,一个租客也可租赁多套公寓。
合同内容应包含签订日期、开始时间、租期、押金和月租金。
【概念模型设计】根据需求阶段收集的信息,设计的实体联系图(不完整)如图 2-1所示。
【逻辑结构设计】根据概念摸型设计阶段完成的实体联系图,得出如下关系模式(不完整):联系电话(电话号码,租客编号)租客(租客编号,姓名,银行账号,联系人姓名,联系人电话)员工(员工编号,姓名,联系电话,类别,月工资,(a) )公寓楼( (b) ,地址,经理编号)公寓(楼编号,公寓号,卧室数,卫生间数〉合同(合同编号,租客编号,楼编号,公寓号,经理编号,签订日期,起始日期,租期,(c),押金)【问题 1】(4.5 分)补充图 2-1 中的“签约”联系所关联的实体及联系类型。
【问题 2】(4.5 分)补充逻辑结构设计中的(a)、(b)、(c)三处空缺。
【问题 3】(6 分)在租期内,公寓内设施如出现问题,租客可在系统中进行故障登记,填写故障描述,每项故障由系统自动生成唯一的故障编号,由公司派维修工进行故障维修,系统需记录每次维修的维修日期和维修内容。
请根据此需求,对图 2-1 进行补充,并将所补充的 ER 图内容转换为一个关系模式,请给出该关系模式。
试题三(共 15 分)阅读下列系统设计说明,回答问题 1 至问题 3,将解答填入答题纸的对应栏内。
【说明】某玩具公司正在开发一套电动玩具在线销售系统,用于向注册会员提供端对端的玩具定制和销售服务。
在系统设计阶段,"创建新订单 (New Order)" 的设计用例详细描述如表3-1 所示,候选设计类分类如表 3-2 所示,并根据该用例设计出部分类图如圈子 3-1 所示。
表 3-1 创建新订单 (NewOrder) 设计用例表 3-2 候选设计类分类在订单处理的过程中,会员可以点击“取消订单"取消该订单。
如果支付失败,该订单将被标记为挂起状态,可后续重新支付,如果挂起超时 30 分钟未支付,系统将自动取消该订单。
订单支付成功后,系统判断订单类型: (1)对于常规订单,标记为备货状态,订单信息发送到货运部,完成打包后交付快递发货; (2)对于定制订单,会自动进入定制状态,定制完成后交付快递发货。
会员在系统中点击”收货"按钮变为收货状态,结束整个订单的处理流程。
根据订单处理过程所设计的状态图如图 3-2 所示。
【问题 1】(6 分)根据表 3-1 中所标记的候选设计类,请按照其类别将编号C1~C12 分别填入表 3-2 中的(a)、(b)和(c)处。
【问题 2】 (4 分〉根据创建新订单的用例描述,请给出图 3-1 中 X1~X4 处对应类的名称。
【问题 3】 (5 分)根据订单处理过程的描述,在图 3-2 中 S1~S5 处分别填入对应的状态名称。
试题四(共15分)阅读下列说明和 C 代码,回答问题 1 至问题 3,将解答写在答题纸的对应栏内。
【说明】假币问题:有 n 枚硬币,其中有一枚是假币,己知假币的重量较轻。
现只有一个天平,要求用尽量少的比较次数找出这枚假币。
【分析问题】将 n 枚硬币分成相等的两部分:(1)当 n 为偶数时,将前后两部分,即 1...n/2 和 n/2+1...0,放在天平的两端,较轻的一端里有假币,继续在较轻的这部分硬币中用同样的方法找出假币:(2)当 n 为奇数时,将前后两部分,即 1..(n -1)/2 和(n+1)/2+1...0,放在天平的两端,较轻的一端里有假币,继续在较轻的这部分硬币中用同样的方法找出假币:若两端重量相等,则中间的硬币,即第 (n+1)/2 枚硬币是假币。
【C 代码】下面是算法的 C 语言实现,其中:coins[]: 硬币数组first,last:当前考虑的硬币数组中的第一个和最后一个下标#include <stdio.h>int getCounterfeitCoin(int coins[], int first,iot last){int firstSum = 0,lastSum = 0;int ì;If(first==last-1){ /*只剩两枚硬币*/if(coins[first] < coins[last])return first;return last;}if((last - first + 1) % 2 =0){ /*偶数枚硬币*/for(i = first;i <( 1 );i++){firstSum+= coins[i];}for(i=first + (last-first) / 2 + 1;i < last +1;i++){lastSum += coins[i];}if( 2 ){Return getCounterfeitCoin(coins,first,first+(last-first)/2;) }else{Return getCounterfeitCoin(coins,first+(last-first)/2+1,last;) }} else { /*奇数枚硬币*/For(i=first;i<first+(last-first)/2;i++){firstSum+=coins[i];}For(i=first+(last-first)/2+1;i<last+1;i++){lastSum+=coins[i];}If(firstSum<lastSum){Return getCounterfeitCoin(coins,first,first+(last-first)/2-1);}else if(firstSum>lastSum){Return getCounterfeitCoin(coins,first+(last-first)/2-1,last);}else{Return( 3 )}}}【问题一】根据题干说明,填充 C 代码中的空(1)-(3)【问题二】根据题干说明和 C 代码,算法采用了()设计策略。
函数getCounterfeitCoin 的时间复杂度为()(用 O 表示)。
【问题三】若输入的硬币数为 30,则最少的比较次数为(),最多的比较次数为()。
试题五(共 15 分〉阅读下列说明和 C++代码,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】某快餐厅主要制作井出售儿童套餐,一般包括主餐(各类比萨)、饮料和玩具,其餐品种类可能不同,但其制作过程相同。
前台服务员(Waiter)调度厨师制作套餐。
现采用生成器(Builder) 模式实现制作过程,得到如图 5-1 所示的类图。
【C++代码】#include<iostream>#include <string>using namespace std;class Pizza {private: string parts;public:void setParts(string parts) { this->parts=parts; }string getParts() { return parts; }};class PizzaBuilder {protected:Pizza* pizza;public:Pizza* getPizza() { retum pizza; }void createNewPizza() { pizza = new Pizza(); }( 1 );}class HawaiianPizzaBuilder :public PizzaBuilder {public:void buildParts() { pizza->setParts("cross +mild +ham&pineapple"); }class SpicyPizzaBuider: public PizzaBuilder {public:void buildParts() { pizza->setParts("pan baked +hot +ham&pineapple"); } }Class Waiter{Private:PizzaBuilder* pizzaBuilder;public:void setPizzaBuilder(PizzaBuilder* pizzaBuilder) { /*设置构建器*/( 2 )}Pizza* getPizza() { return pizzaBuilder->getPizza(); }void construct() { /*构建*/pizzaBuilder->createNewPizza();( 3 )}};int main(){Waiter*waiter=new Waiter();PizzaBuilder*hawaiian pizzabuilder=newHawaiianPizzaBuilder()( 4 );( 5 );cout<< "pizza: "<< waiter->getPizza()->getParts()<< endl; }程序的输出结果为:pizza: cross + mild + ham&pineapple试题六(共 15 分)阅读下列说明和 Java 代码,将应填入 (n) 处的字句写在答题纸的对应栏内。