第一范文网 - 专业文章范例文档资料分享平台

2017上半年软件设计师考试真题及答案-下午卷

来源:用户分享 时间:2025/5/21 2:05:32 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

三、控制类

控制类用于对一个或几个用例所特有的控制行为进行建模,它描述的用例的业务逻辑的实现,控制类的设计与用例实现有着很大的关系。在有些情况下,一个用例可能对应多个控制类对象,或在一个控制类对象中对应着对个用例。它们之间没有固定的对应关系,而是根据具体情况进行分析判断,控制类有效将业务逻辑独立于实体数据和边界控制,专注于处理业务逻辑,控制类会将特有的操作和实体类分离,者有利于实体类的统一化和提高复用性。 当业务主角通过边界类来执行用例的时候,产生一个控制类对象,在用例被执行完后,控制类对象会被销毁。

控制类的特点:独立于环境、和用例的实现关联、使用关联实体类或操作实体类对象、 专注于业务逻辑的实现。

当然如果用例的逻辑较为简单,可以直接利用边界类来操作实体类,而不必再使用控制类。或者用例的逻辑较为固定,业务逻辑固定不会改变。也可以直接在边界类实现该逻辑。

问题2答案解析: 问题2 X1:收货地址 X2:支付方式 X3:邮箱地址 X4:电动玩具定制属性

问题3答案解析: 问题3 S1:订单挂起 S2:订单备货 S3:订单定制

11

S4:订单发货 S5:订单收货

第 4 题

阅读下列说明和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

int getCounterfeitCoin(int coins[], int first,int last) {

int firstSum = 0,lastSum = 0; int ì;

If(first==last-1){ /*只剩两枚硬币*/ if(coins[first] < coins[last]) return first;

12

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

For(i=first+(last-first)/2+1;i

If(firstSum

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 ) }

13

} }

问题:4.1 根据题干说明,填充C代码中的空(1)-(3)

问题:4.2 根据题干说明和C代码,算法采用了( )设计策略。 函数getCounterfeitCoin的时间复杂度为( )(用O表示)。

问题:4.3 若输入的硬币数为30,则最少的比较次数为( ),最多的比较次数为( )。

答案解析: 问题1

(1)first+(last-first)/2 或(first+last)/2 (2)firstSum

(3)first+(last-first)/2 或(first+last)/2

答案解析: 问题2 (4)分治法 (5)O(nlogn)

答案解析: 问题3

(6)2 (7)4

14

试题分析:若输入30个硬币,找假硬币的比较过程为: 第1次:15 比 15,此时能发现假币在15个的范围内。

第2次:7 比 7,此时,如果天平两端重量相同,则中间的硬币为假币,此时可找到假币,这是最理想的状态。

第3次:3 比 3,此时若平衡,则能找出假币,不平衡,则能确定假币为3个中的1个。 第4次:1 比 1,到这一步无论是否平衡都能找出假币,此时为最多比较次数。

第 5 题

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

某快餐厅主要制作井出售儿童套餐,一般包括主餐(各类比萨)、饮料和玩具,其餐品种类可能不同,但其制作过程相同。前台服务员(Waiter)调度厨师制作套餐。现采用生成器(Builder) 模式实现制作过程,得到如图 5-1 所示的类图。

【C++代码】 #include #include using namespace std;

class Pizza {

private: string parts;

15

2017上半年软件设计师考试真题及答案-下午卷.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c7h7pg6j2td02tjb2ixwe3xy6q955p4014td_3.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top