文档介绍:中级软件设计师2017上半年下午试题
中级软件设计师2017上半年下午试题
试题一
阅读下列说明和图,回答问题1至问题4,将解答填入答题纸的对应栏内。
【说明】
某医疗器械公司作为复杂医疗产品的集成商,必须保持高质量部件的10);
(3)会员点击单选按钮选择所需要定制的电动玩具并填写所需要定制的属性要求,点击“结算”按钮;
(4)回到步骤4.
7a
(1)若支付系统返回失败标识,系统显示会员当前默认支付方式(C11)让会员确认;
(2)若会员点击“修改付款”按钮,调用“修改付款”用例,可以新增并存储为默认支付方式(C12),回到步骤4;
(3)若会员点击“取消订单”,则该用例终止执行。
表3-2 候选设计类分类
接口类(Interface,负责系统与用户之间的交互)
(a)
控制类(Control,负责业务逻辑的处理)
(b)
实体类(Entity,负责持久化数据的存储)
(c)
在订单处理的过程中,会员可以点击“取消订单"取消该订单。如果支付失败,该订单将被标记为挂起状态,可后续重新支付,如果挂起超时30分钟未支付,系统将自动取消该订单。订单支付成功后,系统判断订单类型:
(1)对于常规订单,标记为备货状态,订单信息发送到货运部,完成打包后交付快递发货;
(2)对于定制订单,会自动进入定制状态,定制完成后交付快递发货。会员在系统中点击”收货"按钮变为收货状态,结束整个订单的处理流程。根据订单处理过程所设计的状态图如图3-2所示。
图3-2 订单状态图
问题: 根据表3-1中所标记的候选设计类,请按照其类别将编号 C1~C12 分别填入表 3-2 中的(a)、(b)和(c)处。
问题: 根据创建新订单的用例描述,请给出图3-1中X1~X4处对应类的名称。
问题: 根据订单处理过程的描述,在图 3-2 中S1~S5处分别填入对应的状态名称。
试题四
阅读下列说明和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;
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(coi