2018上半年下午软件设计师真题及答案解析11 联系客服

发布时间 : 星期三 文章2018上半年下午软件设计师真题及答案解析11更新完毕开始阅读89d2509824c52cc58bd63186bceb19e8b9f6ecf0

int i;

if(n == 0){ return 0; } for(i = 1; (1) ; i++) { int tmp = p[i] + Top_Down_Cut_Rod(p,n-i); r = (r >= tmp) ? r : tmp; }

return r; }

int Bottom_Up_Cut_Rod(int p[], int n) {/*自底向上*/ int r[LEN] = { 0 }; int temp = 0; int i, j;

for (j = 1; j <= n; j++) { temp = 0; for (i = 1; (2) ; i++) { temp = (3) ; }

(4) ; }

return r[n]; }

【问题 1】(8 分)

根据说明,填充 C 代码中的空(1)~(4)。 【问题 2】(7 分)

根据说明和 C 代码,算法采用的设计策略为 (5) 。求解rn时,自顶向下方法的时间复杂度为 (6) ;自底向上方法的时间复杂度为 (7) (用 O 表示)。

试题五(共 15 分)

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

生成器(Builder)模式的意图是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。图5-1 所示为其类图。

#include

#include using namespace std; class Product { private: string partA,partB; public: Product() {} void setPartA(const string &s) { partA = s; } void setPartB(const string &s) { partB = s; } //其余代码省略 };

class Builder { public: (1) ; virtual void buildPartB() = 0; (2) ; };

class ConcreteBuilder1 : public Builder { private: Product *product; public: ConcreteBuilder1() { product = new Product(); } void buildPartA() { (3) (\ void buildPartB() { (4) (\ Product* getResult() { return product; } //其余代码省略 };

class ConcreteBuilder2 : public Builder { /*代码省略.*/ };

class Director { private: Builder * builder; public: Director(Builder* pBuilder) { builder = pBuilder; } void construct() { (5) ; //其余代码省略 }

//其余代码省略 };

int main() { Director* director1 = new Director(new ConcreteBuilder1()); director1->construct();

delete director1; return 0; }

试题六(共 15 分)

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

生成器(Builder)模式的意图是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。图6-1 所示为其类图。

【Java 代码】 import java.util.*; class Product {

private String partA; private String partB; public Product() {};

public void setPartA(String s) {partA = s;} public void setPartB(String s) {partB = s;} }

interface Builder { public (1) ;

public void buildPartB(); public (2) ; }

class ConcreteBuilder1 implements Builder { private Product product; public ConcreteBuilder1() { product = new Product(); }

public void buildPartA() { (3) (\public void buildPartB() { (4) (\public Product getResult() { return product; } }

class ConcreteBuilder2 implements Builder { // 代码省略 }

class Director {

private Builder builder;

public Director(Builder builder) { this.builder = builder; }

void construct() { (5) ;} // 代码省略 }

class Test {

public static void main(String[] args) {

Director director1 = new Director(new ConcreteBuilder1()); director1 .construct(); }

试题一 参考答案及解析 【参考答案】

【问题1】E1:客户; E2:医生; E3:主管

【问题2】D1:通用信息表;D2:预约表;D3:医生列表;D4:出诊时间表;D5:药品库 【问题 3】 起点 终点 名称 P2 D4 删除解聘医生的出诊时间 P2 D2 删除解聘医生的预约数据 D5 P4 查询相关药品库存信息 P4 D2 更新预约表 D3 P5 医生 或 医生信息 【问题 4】

“预约处理”可以分解为子加工:安排出诊时间、就诊预约。 在建模数据流图时应保持父图(图 1-1)与子图(图 1-2)的平衡,即父图中某加工的输入输出数据流必须与它的子图的输入输出数据流在数量和名字上相同,但如果父图的一个输入(或输出)数据流对应于子图中几个输入(或输出)数据流,而子图中组成这些数据流的数据项全体正好是父图中的这一个数据流,那么它们仍然算是平衡的。 【试题解析】

本题考察面向结构化软件开发方法学中需求分析阶段使用的数据流图(DFD 图)。作答时,一定要现把题目中“功能部分”大致阅读一遍,画出关键功能性动词,以及以表或库结尾的名词,然后从图中查找题目中的对应句,做题。 【问题 1】需要填写外部实体,外部实体为不属于软件本身但是又与当前软件有交互关系的外部的人、软件、硬件、组织结构、数据库系统等,在作答时需要细心地对每一个阅读到的外部实体(一般为名词)高度重视;

【问题 2】考察数据存储文件,这需要对阅读到的“...文件”或“...表”等能够存储数据的媒介词汇高度重视。 【问题 3】不仅仅通过阅读文字描述来作答,同时也要使用父图与子图的数据守恒原则进行作答。本题的文字描述中,共阐述了(1)~(5)共 5个系统必须要实现的功能模块,这些功能(动词描述)对应数据流图中的加工 P1~P5。由于需要找出图 1-2 中缺少的数据流,故建议边阅读文字描述,边对照图 1-2 以便找出其中缺少的数据流。

从描述\通用信息查询(对应加工 P1)。客户提交通用信息查询请求(可知实体‘客户’