1、2016 年下半年软件水平考试(中级)软件设计师下午(应用技术)真题试卷及答案解析(总分:30.00,做题时间:90 分钟)一、必答题(总题数:7,分数:30.00)1.必答题(共 4 道大题,每道大题)_阅读下列说明和图,回答问题 1 至问题 4,将解答填入答题纸的对应栏内。【说明】某证券交易所为了方便提供证券交易服务,欲开发一证券交易平台,该平台的主要功能如下:(1)开户。根据客户服务助理提交的开户信息,进行开户,并将客户信息存入客户记录中,账户信息(余额等)存入账户记录中:(2)存款。客户可以向其账户中存款,根据存款金额修改账户余额;(3)取款。客户可以从其账户中取款,根据取款金额修改账
2、户余额;(4)证券交易。客户和经纪人均可以进行证券交易(客户通过在线方式,经纪人通过电话),将交易信息存入交易记录中;(5)检查交易。平台从交易记录中读取交易信息,将交易明细返回给客户。现采用结构化方法对该证券交易平台进行分析与设计,获得如图 1-1 所示的上下文数据流图和图 1-2所示的 0 层数据流图。 (分数:8.00)(1).使用说明中的词语,给出图 1-1 中的实体 E1E3 的名称。(分数:2.00)_(2).使用说明中的词语,给出图 1-2 中的数据存储 D1D3 的名称。(分数:2.00)_(3).根据说明和图中的术语,补充图 1-2 中缺失的数据流及其起点和终点。(分数:2.
3、00)_(4).实际的证券交易通常是在证券交易中心完成的,因此,该平台的“证券交易”功能需将交易信息传递给证券交易中心。针对这个功能需求,需要对图 1-1 和图 1-2 进行哪些修改,请用 200 字以内的文字加以说明。(分数:2.00)_阅读下列说明,回答问题 1 至问题 3,将解答填入答题纸的对应栏内。【说明】某宾馆为了有效地管理客房资源,满足不同客户需求,拟构建一套宾馆信息管理系统,以方便宾馆管理及客房预订等业务活动。【需求分析结果】该系统的部分功能及初步需求分析的结果如下:(1)宾馆有多个部门,部门信息包括部门号、部门名称、电话、经理。每个部门可以有多名员工,每名员工只属于一个部门;每
4、个部门只有一名经理,负责管理本部门。(2)员工信息包括员工号、姓名、岗位、电话、工资,其中,员工号唯一标识员工关系中的一个元组,岗位有经理、业务员。(3)客房信息包括客房号(如 1301、1302 等)、客房类型、收费标准、入住状态(已入住未入住),其中客房号唯一标识客房关系中的一个元组,不同客房类型具有不同的收费标准。(4)客户信息包括客户号、单位名称、联系人、联系电话、联系地址,其中客户号唯一标识客户关系中的一个元组。(5)客户预订客房时,需要填写预订申请。预订申请信息包括申请号、客户号、入住时间、入住天数、客房类型、客房数量,其中,一个申请号唯一标识预订申请中的一个元组;一位客户可以有多
5、个预订申请,但一个预订申请对应唯一的一位客户。(6)当客户入住时,业务员根据客户的预订申请负责安排入住客房事宜。安排信息包括客房号、姓名、性别、身份证号、入住时间、天数、电话,其中客房号、身份证号和入住时间唯一标识一次安排。一名业务员可以安排多个预订申请,一个预订申请只由一名业务员安排,而且可安排多间同类型的客房。【概念模型设计】根据需求阶段收集的信息,设计的实体联系图如图 2-1 所示。 (分数:6.00)(1).根据问题描述,补充四个联系,完善图 2-1 的实体联系图。联系名可用联系 1、联系 2、联系 3 和联系 4 代替,联系的类型为 1:1、1:n 和 m:n(或 1:1、1:*和*
6、:*)。(分数:2.00)_(2).(1)根据题意,将关系模式中的空(a)(d)补充完整,并填入答题纸对应的位置上。(2)给出“预订申请”和“安排”关系模式的主键和外键。(分数:2.00)_(3).【关系模式设计】中的“客房”关系模式是否存在规范性问题,请用 100 字以内文字解释你的观点(若存在问题,应说明如何修改“客房”关系模式)。(分数:2.00)_阅读下列说明,回答问题 1 至问题 3,将解答填入答题纸的对应栏内。【说明】某种出售罐装饮料的自动售货机(Vending MaChine)的工作过程描述如下:(1)顾客选择所需购买的饮料及数量。(2)顾客从投币口向自动售货机中投入硬币(该自动
7、售货机只接收硬币)。硬币器收集投入的硬币并计算其对应的价值。如果所投入的硬币足够购买所需数量的这种饮料且饮料数量足够,则推出饮料,计算找零,顾客取走饮料和找回的硬币;如果投入的硬币不够或者所选购的饮料数量不足,则提示用户继续投入硬币或重新选择饮料及数量。(3)一次购买结束之后,将硬币器中的硬币移走(清空硬币器),等待下一次交易。自动售货机还设有一个退币按钮,用于退还顾客所投入的硬币。已经成功购买饮料的钱是不会被退回的。 现采用面向对象方法分析和设计该自动售货机的软件系统,得到如图 31 所示的用例图,其中,用例“购买饮料“的用例规约描述如下。参与者:顾客。主要事件流:1顾客选择需要购买的饮料和
8、数量,投入硬币:2自动售货机检查顾客是否投入足够的硬币;3自动售货机检查饮料储存仓中所选购的饮料是否足够:4自动售货机推出饮料;5自动售货机返回找零。备选事件流:2a.若投入的硬币不足,则给出提示并退回到 1;3a.若所选购的饮料数量不足,则给出提示并退回到 1。根据用例“购买饮料”得到自动售货机的 4 个状态:“空闲”状态、“准备服务”状态、“可购买”状态以及“饮料出售”状态,对应的状态图如图 3-2 所示。所设计的类图如图 3-3 所示。 (分数:6.00)(1).根据说明中的描述,使用说明中的术语,给出图 3-2 中的 S1S4 所对应的状态名。(分数:2.00)_(2).根据说明中的描
9、述,使用说明中的术语,给出图 3-2 中 E1E4 所对应的事件名称。 (分数:2.00)_(3).根据说明中的描述,使用说明中的术语,给出图 33 中 C1C5 所对应的类名。(分数:2.00)_阅读下列说明和 C 代码,回答问题 1 至问题 3,将解答写在答题纸的对应栏内。【说明】模式匹配是指给定主串 t 和子串 s,在主串 t 中寻找子串 s 的过程,其中 s 称为模式。如果匹配成功,返回 s 在 t 中的位置,否则返回一 1。KMP 算法用 next 数组对匹配过程进行了优化。KMP 算法的伪代码描述如下:1在串t 和串 s 中,分别设比较的起始下标 i=j=0。2如果串 t 和串 s
10、 都还有字符,则循环执行下列操作:(1)如果 j=1 或者 ti=sj,则将 i 和 j 分别加 1;继续比较 t 和 s 的下一个字符;(2)否则,将 j 向右滑动到 nextj的位置,即 j=nextj。3如果 s 中所有字符均已比较完毕,则返回匹配的起始位置(从 1 开始);否则返回一 1。其中,next 数组根据子串 s 求解。求解 next 数组的代码已由 get next 函数给出。【C 代码】(1)常量和变量说明 t,s:长度为 1t 和 1s 的字符串 next:next 数组,长度为 1s(2)C 程序#includestdioh#includestdlib.h#includ
11、estringh*求 next的值*void get next(int*next,char*s,int is)int i=0,j=一 1; next0=一 1;*初始化 next0*while(iIs)*还有字符*if(j=一 1si=sj)*匹配*j+i+;if(si=sj)nexti=nextj;elsenexti=j;elsej=nextj;int kmp(int*next,Char*t,char*s,int it,int is) int i=0,j=0;while(iIt (1 )if(j=一 1 (2) ) i +; j+; else (3) , if ( j=ls) return
12、(4); else return 一 1; (分数:6.00)(1).根据题干说明,填充 C 代码中的空(1)(4)。(分数:2.00)_(2).根据题干说明和 C 代码,分析出 KMP 算法的时间复杂度为(5) (主串和子串的长度分别为 1t 和 1s,用 O 符号表示)。(分数:2.00)_(3).根据 C 代码,字符串“BBABBCAC”的 next 数组元素值为(6) (直接写元素值,之间用逗号隔开)。若主串为“AABBCBBABBCACCD”,子串为“BBABBCAC”,则函数 kmp 的返回值是(7)。(分数:2.00)_2.阅读下列说明和 C+代码,将应填入(n)处的字句写在答题
13、纸的对应栏内。 【说明】某发票(Invoice)由抬头(Head)部分、正文部分和脚注(Foot)部分构成。现采用装饰(Decorator)模式实现打印发票的功能,得到如图 5-1 所示的类图。 (分数:2.00)_3.阅读下列说明和 Java 代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】某发票(Invoice)由抬头(Head)部分、正文部分和脚注(Foot)部分构成。现采用装饰(Decorator)模式实现打印发票的功能,得到如图 6-1 所示的类图。 (分数:2.00)_2016 年下半年软件水平考试(中级)软件设计师下午(应用技术)真题试卷答案解析(总分:30.00,做题
14、时间:90 分钟)一、必答题(总题数:7,分数:30.00)1.必答题(共 4 道大题,每道大题)_解析:阅读下列说明和图,回答问题 1 至问题 4,将解答填入答题纸的对应栏内。【说明】某证券交易所为了方便提供证券交易服务,欲开发一证券交易平台,该平台的主要功能如下:(1)开户。根据客户服务助理提交的开户信息,进行开户,并将客户信息存入客户记录中,账户信息(余额等)存入账户记录中:(2)存款。客户可以向其账户中存款,根据存款金额修改账户余额;(3)取款。客户可以从其账户中取款,根据取款金额修改账户余额;(4)证券交易。客户和经纪人均可以进行证券交易(客户通过在线方式,经纪人通过电话),将交易信
15、息存入交易记录中;(5)检查交易。平台从交易记录中读取交易信息,将交易明细返回给客户。现采用结构化方法对该证券交易平台进行分析与设计,获得如图 1-1 所示的上下文数据流图和图 1-2所示的 0 层数据流图。 (分数:8.00)(1).使用说明中的词语,给出图 1-1 中的实体 E1E3 的名称。(分数:2.00)_正确答案:(正确答案:E1:客户服务助理 E2:客户 E3:经纪人)解析:(2).使用说明中的词语,给出图 1-2 中的数据存储 D1D3 的名称。(分数:2.00)_正确答案:(正确答案:D1:客户记录 D2:账户记录 D3:交易记录)解析:(3).根据说明和图中的术语,补充图
16、1-2 中缺失的数据流及其起点和终点。(分数:2.00)_正确答案:(正确答案: )解析:(4).实际的证券交易通常是在证券交易中心完成的,因此,该平台的“证券交易”功能需将交易信息传递给证券交易中心。针对这个功能需求,需要对图 1-1 和图 1-2 进行哪些修改,请用 200 字以内的文字加以说明。(分数:2.00)_正确答案:(正确答案:在图 1-1 中,将“证券交易中心”作为外部实体,添加从“证券交易平台”到此外部实体的数据流“交易信息”。在图 1-2 中,将证券交易中心作为外部实体,添加从加工“证券交易(在线)”到此外部实体的数据流“交易信息”,添加从加工“证券交易(电话)”到此外部实
17、体的数据流“交易信息”。)解析:阅读下列说明,回答问题 1 至问题 3,将解答填入答题纸的对应栏内。【说明】某宾馆为了有效地管理客房资源,满足不同客户需求,拟构建一套宾馆信息管理系统,以方便宾馆管理及客房预订等业务活动。【需求分析结果】该系统的部分功能及初步需求分析的结果如下:(1)宾馆有多个部门,部门信息包括部门号、部门名称、电话、经理。每个部门可以有多名员工,每名员工只属于一个部门;每个部门只有一名经理,负责管理本部门。(2)员工信息包括员工号、姓名、岗位、电话、工资,其中,员工号唯一标识员工关系中的一个元组,岗位有经理、业务员。(3)客房信息包括客房号(如 1301、1302 等)、客房
18、类型、收费标准、入住状态(已入住未入住),其中客房号唯一标识客房关系中的一个元组,不同客房类型具有不同的收费标准。(4)客户信息包括客户号、单位名称、联系人、联系电话、联系地址,其中客户号唯一标识客户关系中的一个元组。(5)客户预订客房时,需要填写预订申请。预订申请信息包括申请号、客户号、入住时间、入住天数、客房类型、客房数量,其中,一个申请号唯一标识预订申请中的一个元组;一位客户可以有多个预订申请,但一个预订申请对应唯一的一位客户。(6)当客户入住时,业务员根据客户的预订申请负责安排入住客房事宜。安排信息包括客房号、姓名、性别、身份证号、入住时间、天数、电话,其中客房号、身份证号和入住时间唯
19、一标识一次安排。一名业务员可以安排多个预订申请,一个预订申请只由一名业务员安排,而且可安排多间同类型的客房。【概念模型设计】根据需求阶段收集的信息,设计的实体联系图如图 2-1 所示。 (分数:6.00)(1).根据问题描述,补充四个联系,完善图 2-1 的实体联系图。联系名可用联系 1、联系 2、联系 3 和联系 4 代替,联系的类型为 1:1、1:n 和 m:n(或 1:1、1:*和*:*)。(分数:2.00)_正确答案:(正确答案:完善后的实体联系图如下所示(所补充的联系和类型如虚线所示): )解析:解析:根据题意“每个部门可以有多名员工,每名员工只属于一个部门”,所以部门和员工之间有一
20、个“所属”联系,联系类型为 1:*。 根据题意“每个部门有一名经理,只负责管理本部门的事务”,所以部门和经理之间有一个“负责”联系,联系类型为 1:1。 根据题意“一个客户可以有多个预订申请,但一个预订申请对应唯一的一个客户号”,所以客户和预订申请之间有一个“预订”联系,联系类型为 1:*。 根据题意“一个业务员可以安排多个预订申请,一个预订申请只由一个业务员安排,而且可安排多个同类型的客房”,即一份预订申请可以预订多间同类型的客房,所以业务员与客房和预订申请之间的“安排”联系类型为 1:*:*。 根据上述分析,完善图 2-1 所示的实体联系图如图 2-2 所示。(2).(1)根据题意,将关系
21、模式中的空(a)(d)补充完整,并填入答题纸对应的位置上。(2)给出“预订申请”和“安排”关系模式的主键和外键。(分数:2.00)_正确答案:(正确答案:(1)(a)部门号 (b)客户号,单位名称 (c)申请号,客户号 (d)身份证号,入住时间 (2)“预订申请”关系模式:主键为申请号 外键为客户号 “安排”关系模式:主键为客房号,身份证号,入住时间 外键为申请号,客房号,业务员)解析:解析:由于部门和员工之间有一个 12 一 s 的“所属”联系需要将一端的码“部门号”并入多端,故员工关系模式中的空(a)应填写“部门号”。 根据题意,客户信息包括客户号、单位名称、联系人、联系电话、联系地址,给
22、定的客户关系模式中,不含客户号、单位名称,故空(b)应填写“客户号,单位名称”。 由于预订申请信息包括申请号、客户号、预订入住时间、入住天数、客房类型、客房数量,故空(c)应填写“申请号,客户号”。 根据题意“客房号、身份证号和入住时间唯一标识安排联系的每一个元组”,所以空(d)应填写“身份证号,入住时间”。 根据题意,“一个申请号对应唯一标识预订申请中的每一个元组”,所以预订申请关系模式的主键为申请号;又因为客户号是客户关系的主键,根据外键定义可知,客户号是预订申请关系的外建。 根据题意“客房号、身份证号和入住时间唯一标识安排联系的每一个元组”,所以安排关系模式的主键为客房号,身份证号,入住
23、时间;外键为申请号,客房号,业务员,因为申请号和客房号为预约申请和客房关系的主键,而“业务员”是员工关系子实体必须参考员工关系的主键“员工号”,所以业务员也是外键。(3).【关系模式设计】中的“客房”关系模式是否存在规范性问题,请用 100 字以内文字解释你的观点(若存在问题,应说明如何修改“客房”关系模式)。(分数:2.00)_正确答案:(正确答案:存在问题。 关系模式存在传递依赖,没有达到 3NF。 应将客房关系模式分解为客房 1(客房号,客房类型,入住状态)客房 2(客房类型,收费标准)。)解析:解析:客房关系模式存在问题。因为客房号为主键,所以客房号可以决定全属性,即客房号(客房类型,
24、收费标准,入住状态)。又因为客房类型收费标准,所以该关系模式存在传递依赖,没有达到3NF,应将客房关系模式分解为客房 1(客房号,客房类型,入住状态),客房 2(客房类型,收费标准)。阅读下列说明,回答问题 1 至问题 3,将解答填入答题纸的对应栏内。【说明】某种出售罐装饮料的自动售货机(Vending MaChine)的工作过程描述如下:(1)顾客选择所需购买的饮料及数量。(2)顾客从投币口向自动售货机中投入硬币(该自动售货机只接收硬币)。硬币器收集投入的硬币并计算其对应的价值。如果所投入的硬币足够购买所需数量的这种饮料且饮料数量足够,则推出饮料,计算找零,顾客取走饮料和找回的硬币;如果投入
25、的硬币不够或者所选购的饮料数量不足,则提示用户继续投入硬币或重新选择饮料及数量。(3)一次购买结束之后,将硬币器中的硬币移走(清空硬币器),等待下一次交易。自动售货机还设有一个退币按钮,用于退还顾客所投入的硬币。已经成功购买饮料的钱是不会被退回的。 现采用面向对象方法分析和设计该自动售货机的软件系统,得到如图 31 所示的用例图,其中,用例“购买饮料“的用例规约描述如下。参与者:顾客。主要事件流:1顾客选择需要购买的饮料和数量,投入硬币:2自动售货机检查顾客是否投入足够的硬币;3自动售货机检查饮料储存仓中所选购的饮料是否足够:4自动售货机推出饮料;5自动售货机返回找零。备选事件流:2a.若投入
26、的硬币不足,则给出提示并退回到 1;3a.若所选购的饮料数量不足,则给出提示并退回到 1。根据用例“购买饮料”得到自动售货机的 4 个状态:“空闲”状态、“准备服务”状态、“可购买”状态以及“饮料出售”状态,对应的状态图如图 3-2 所示。所设计的类图如图 3-3 所示。 (分数:6.00)(1).根据说明中的描述,使用说明中的术语,给出图 3-2 中的 S1S4 所对应的状态名。(分数:2.00)_正确答案:(正确答案:S1:空闲 S2:准备服务 S3:饮料出售 S4:可购买)解析:解析:题目说明中已经给出了自动售货机的 4 个状态分别是:“空闲”状态、“准备服务”状态、“可购买”状态以及“
27、饮料出售”状态。解答本题需要根据用例规约推出这 4 个状态之间的迁移关系,这样才能与图 3-2 中的状态 S1S4 对应。 首先从状态图的初始状态“”开始,S1 代表的就是自动售货机的初始状态。在上述 4 个状态中,只有在“空闲”下,才能开始一次售卖,所以 S1 对应的是“空闲”状态。 根据 S2 相关的事件来看,在该状态时,自动售货机在接收顾客的请求(顾客选择的饮料以及投入的硬币),因此应对应“准备服务”状态。 状态 S3 有一个自迁移事件“计算找零”,根据说明和用例规约可知,饮料出售之后进行找零,所以 S3 对应“饮料出售”状态。S4 则对应“可购买”状态。(2).根据说明中的描述,使用说
28、明中的术语,给出图 3-2 中 E1E4 所对应的事件名称。 (分数:2.00)_正确答案:(正确答案:E1:所选购的饮料数量不足 E2:选择饮料【硬币足够购买饮料】 E3:所选购的饮料数量足够推出饮料 E4:取走饮料找零并清空硬币器)解析:解析:确定了状态图中的各个状态,接下来就需要进行状态之间迁移事件的获取。E2 是从“准备服务”状态变换到“可购买”状态的事件,“选择饮料硬币不足】”时仍然停留在“准备服务”状态,对应用例规约中的 2a;根据用例规约若硬币足够则进入下一步,所以 E2 所对应的事件是“选择饮料【硬币足够购买饮料】”。 E1 事件的触发将使得自动售货机从“可购买”状态变换到“准
29、备服务”状态,对应用例规约中的 3a,所以 E1 对应的事件应是“所选购的饮料数量不足”。 E3 事件的触发将使得自动售货机从“可购买”状态迁移到“饮料出售”状态。根据说明,能够售出饮料必须满足两个条件:该饮料数量足够以及顾客投入的硬币足够。硬币是否足够以及饮料数量不足在状态 S2 已经进行了判断,因此 E3 对应的事件应是“所选购的饮料数量足够推出饮料”。 E4 对应的事件是自动售货机完成一次售卖,回到“空闲”状态时需处理的事件,根据说明可知,E4 对应的事件应是“取走饮料找零并清空硬币器”。(3).根据说明中的描述,使用说明中的术语,给出图 33 中 C1C5 所对应的类名。(分数:2.0
30、0)_正确答案:(正确答案:C1:自动售货机 C2:硬币器 C3:饮料存储仓 C4:硬币 C5:饮料 或者 C1:自动售货机 C2:饮料存储仓 C3:硬币器 C4:饮料 C5:硬币)解析:解析:本题要求根据说明和用例规约创建对应的类模型。根据说明和用例规约可知自动售货机有几个重要的组成元素:饮料、硬币、硬币器和饮料存储仓。1 台自动售货机有 1 个硬币器、1 个饮料存储仓;硬币器可以接收多枚硬币,饮料存储仓中可以容纳多种饮料。由此可知,图 33 中的两个 0*聚集关系应该分别对应“硬币器硬币”和“饮料存储仓饮料”这两对“部分-整体”关系;而 C1 就是自动售货机。阅读下列说明和 C 代码,回答
31、问题 1 至问题 3,将解答写在答题纸的对应栏内。【说明】模式匹配是指给定主串 t 和子串 s,在主串 t 中寻找子串 s 的过程,其中 s 称为模式。如果匹配成功,返回 s 在 t 中的位置,否则返回一 1。KMP 算法用 next 数组对匹配过程进行了优化。KMP 算法的伪代码描述如下:1在串t 和串 s 中,分别设比较的起始下标 i=j=0。2如果串 t 和串 s 都还有字符,则循环执行下列操作:(1)如果 j=1 或者 ti=sj,则将 i 和 j 分别加 1;继续比较 t 和 s 的下一个字符;(2)否则,将 j 向右滑动到 nextj的位置,即 j=nextj。3如果 s 中所有字
32、符均已比较完毕,则返回匹配的起始位置(从 1 开始);否则返回一 1。其中,next 数组根据子串 s 求解。求解 next 数组的代码已由 get next 函数给出。【C 代码】(1)常量和变量说明 t,s:长度为 1t 和 1s 的字符串 next:next 数组,长度为 1s(2)C 程序#includestdioh#includestdlib.h#includestringh*求 next的值*void get next(int*next,char*s,int is)int i=0,j=一 1; next0=一 1;*初始化 next0*while(iIs)*还有字符*if(j=一
33、1si=sj)*匹配*j+i+;if(si=sj)nexti=nextj;elsenexti=j;elsej=nextj;int kmp(int*next,Char*t,char*s,int it,int is) int i=0,j=0;while(iIt (1 )if(j=一 1 (2) ) i +; j+; else (3) , if ( j=ls) return (4); else return 一 1; (分数:6.00)(1).根据题干说明,填充 C 代码中的空(1)(4)。(分数:2.00)_正确答案:(正确答案:(1)j1s (2)ti=sj (3)j=nextj (4)i-j+
34、1)解析:解析:本题考查算法设计与分析以及用 C 程序设计语言实现算法的能力。KMP 算法是一个非常经典的模式匹配算法。其核心思想是核心思想:匹配过程中字符对不相等时,不需回溯主串,而是利用已经得到的部分匹配结果将模式向右滑动尽可能远的一段距离继续比较。滑动的距离由 next 数组给出。该算法提出之后,有一些改进的思想,使得 next 数组的计算有多种方式。本题干不需要考生考虑如何计算 next数组,已经直接给出计算该数组的 C 代码。只需要根据已经计算的 next 数组进行模式匹配即可。 在 C 函数 kmp 中,while 循环是判断串 s 和 t 是否还有字符,因此空(1)处应填写“j(
35、2).根据题干说明和 C 代码,分析出 KMP 算法的时间复杂度为(5) (主串和子串的长度分别为 1t 和 1s,用 O 符号表示)。(分数:2.00)_正确答案:(正确答案: (5)O(1t+1s)解析:解析:在 kmp 函数中,只有一个 while 循环,该算法的时间复杂度为 O(1t+1s)。(3).根据 C 代码,字符串“BBABBCAC”的 next 数组元素值为(6) (直接写元素值,之间用逗号隔开)。若主串为“AABBCBBABBCACCD”,子串为“BBABBCAC”,则函数 kmp 的返回值是(7)。(分数:2.00)_正确答案:(正确答案:(6)-1,-1,1,一 1,一
36、 1,2,0,0(7)6)解析:解析:根据 C 函数 getnext,得到“BBABBCAC“的 next 数组的值为一 1,一 1,1,一 1,一 l, 2,0,0。对主串为“AABBCBBABBCACCD”和上述模式串,得到匹配位置为 6,这里需要注意的是,位置从1 开始。2.阅读下列说明和 C+代码,将应填入(n)处的字句写在答题纸的对应栏内。 【说明】某发票(Invoice)由抬头(Head)部分、正文部分和脚注(Foot)部分构成。现采用装饰(Decorator)模式实现打印发票的功能,得到如图 5-1 所示的类图。 (分数:2.00)_正确答案:(正确答案:(1)virtual v
37、oid printlnvoice() (2)ticket 一printlnvoice0 (3)Decorator:printlnvoice() (4)Decorator:printlnvoice() (5)&a)解析:解析:本题考查装饰(Decorator)模式的基本概念和应用。 装饰模式属于结构型设计模式,其设计意图是动态地给一个对象添加一些额外的职责。就增加功能而言,装饰模式比生成子类更加灵活。装饰模式的结构如图 5-2 所示。3.阅读下列说明和 Java 代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】某发票(Invoice)由抬头(Head)部分、正文部分和脚注(Foot)部
38、分构成。现采用装饰(Decorator)模式实现打印发票的功能,得到如图 6-1 所示的类图。 (分数:2.00)_正确答案:(正确答案:(1)ticketprintlnvoice() (2)superprintlnvoice() (3)superprintlnvoice() (4)new HeadDecorator(new FootDecorator(t) (5)new HeadDecorator(new FootDecorator(null)解析:解析:本题考查装饰(Decorator)模式的基本概念和应用。 装饰模式属于结构型设计模式,其设计意图是动态地给一个对象添加一些额外的职责。就增加功能而言,装饰模式比生成子类更加灵活。装饰模式的结构如图 6-2 所示。