吉林大学2012级软件设计模式试题
- 格式:doc
- 大小:71.50 KB
- 文档页数:4
2014-2015学年第1学期2012级《软件设计模式》考试试题(开卷)考试时间:2014年班级学号姓名✧本试卷满分100分;✧请将答案写在答题纸上,写明题号,不必抄题,字迹工整、清晰;✧试题中使用C++语言作为描述语言,答题时可以使用C++或Java或C#程序设计语言中的任意一种作为描述语言,但整个卷面只能使用其中一种,不得混合使用;✧请在答题纸和试题纸上都写上你的班级,学号和姓名,交卷时请将试题纸、答题纸和草纸一并交上来。
一、单选题(共20分,每题2分)1.类设计中,“变化是绝对的,稳定是相对的”,下列哪个不属于这句话中“变化”的范畴?(A) 改变函数参数的类型(B) 增加新的数据成员(C) 改变编程语言(D) 改变对象交互的过程和顺序2.Open-Close原则的含义是一个软件实体:(A) 应当对扩展开放,对修改关闭(B) 应当对修改开放,对扩展关闭(C) 应当对继承开放,对修改关闭(D) 以上都不对3.下列关于继承表述错误的是:(A) 继承是一种通过扩展一个已有类的实现,从而获得新功能的复用方法(B) 泛化类(超类)可以显式地捕获那些公共的属性和方法。
特殊类(子类)则通过附加属性和方法来进行实现的扩展(C) 破坏了封装性,因为这会将父类的实现细节暴露给子类(D) 继承本质上是“白盒复用”,对父类的修改,不会影响到子类4.下列关于对象组合/聚合,说法错误的是:(A) 容器类能通过被包含对象的接口来对其进行访问(B) 属于黑盒复用,封装性好,因为被包含对象的内部细节对外是不可见(C) 可以在运行时将被包含对象改变成同类型对象,从而改变容器类的行为效果,但没有改变容器类的接口(D) 比继承关系更加灵活,代价是相比继承关系,增强了类间的耦合度5.用于分离接口和具体实现,使得接口和实现可独立变化的是:(A)适配器模式(B) 桥接模式(C) 命令模式(D)模板方法模式6.体现“集中管理多个对象间的交互过程和顺序”的是:(A)生成器模式(B) 门面模式(C) 策略模式(D)中介者模式7.限制类的实例对象只能有一个的是:.(A) 原型方法模式(B) 工厂方法模式(C) 单件模式(D) 生成器模式8.用于为一个对象添加更多功能而不使用子类的是:(A) 桥接模式(B) 适配器模式(C) 合成(组合)模式(D) 装饰器模式9.适配器设计模式可以用于:(A) 将已有类的接口转换成和目标接口兼容(B) 改进系统性能(C) 将客户端代码数据转换成目标接口期望的合适的格式(D) 使所有接口不兼容类可以一起工作10.关于原型方法模式的说法,错误的是:(A)便于在运行时刻更换原型对象;(B)各产品必须实现复制的方法,如Clone方法;(C)实现产品复制功能的难易程度,是应用该模式必须考虑的;(D)设计时,不能同时使用生成器模式和原型方法模式;二、(共20分,每题5分) 阅读代码,按要求回答问题:1.考察Shape,Rectangle和Circle三个类。
2011-2012学年第1学期2008级《高级语言程序设计》重修考试试题(B卷)考试时间:2012年04月班级学号姓名✧请将答案写在答题纸上,写清题号,不必抄题,字迹工整、清晰;✧答题纸和试题纸上都写上班级、学号和姓名,交卷时将试题纸、答题纸和草纸一并交上来。
✧每个题目不必给出对应的PAD图,但要添加必要的注释,程序命名和书写要规范。
一、[20分] 编写函数,实现按照如下公式计算的功能。
f(n)=0/(1*2!)+1/(2*3!)+2/(3*4!)+3/(4*5!)+…+n/((n+1)*(n+2)!),其中n为自然数。
二、[20分] 编写bool函数,判断给定的整数数组a[n]中是否存在元素a[i] (0<i<n),等于其前边的所有元素之和,即a[i]=a[0]+a[1]+…+a[i-1]。
三、[20分] 编写一个递归函数,计算组成给定正整数n的所有数字之和。
例如:输入参数为1035,则返回结果应该为9(通过1+0+3+5=9得到)。
四、[20分] 构造一个表示教师的结构体(包含3个字段:姓名、性别、年龄),编写函数,读入M个教师的信息,存入一个结构体数组中,如下图所示。
张三李四赵九男(true) 女(false) … 男(true)50 37 29图1 管理教师信息的结构体数组例如:一个教师的信息为Zhangsan、true、50,另一个教师的信息为Lisi、false、37。
五、[20分] 设有一个保存教师信息的单链表(每个结点包含4个字段:姓名、性别、年龄、后继指针),如下图所示。
构造该链表中一节的数据类型声明;编写函数,在给定链表上查找所有女教师的信息,并存储到指定文件output.txt中。
图2 管理教师信息的单链表第 1 页共 1 页2011-2012学年第1学期2008级《高级语言程序设计》重修考试试题(B卷)答案及评分标准考试时间:2012年4月一、满分20分。
int fac(int n)//阶乘函数1:循环形式(10分){int i,r=1;for(i=1;i<=n;i++)r=r*i;return r;}int fac(int n)//阶乘函数2:递归形式(10分){if(n==0)return 1;return n*fac(n-1);}//利用阶乘函数的计算函数(10分)float f(int n){float f=0;for(int i=0;i<=n;i++){f=f+i*1.0/((i+1)*fac(i+2));}return f;}参考要点:阶乘函数(10分);累加计算功能(10分)。
考题一.选择题(每题1.5分,共30分)( )1. 软件质量因素不包括。
A.正确性B.高性能C.可测试性D.可理解性( )2. 软件可行性研究实质上是要进行一次需求分析、设计过程。
A.简化、压缩的B.详细的C.彻底的D.深入的( )3. 以下哪个软件生存周期模型是一种风险驱动的模型A.瀑布模型B.增量模型C.螺旋模型D.喷泉模型( )4. 可行性分析中,系统流程图用于描述。
A.当前运行系统B.当前逻辑模型C.目标系统D.新系统( )5. 结构化分析建立功能模型的工具是A.DFDB.判定树/判定表C.SCD.结构化语言( )6. 检查软件产品是否符合需求定义的过程称为A.确认测试B.集成测试C.系统测试D.单元测试( )7. 在整个软件维护阶段所花费的全部工作中,所占比例最大的是A.校正性维护B.适应性维护C.完善性维护D.预防性维护( )8. 通信内聚是指。
A.把需要同时执行的动作组合在一起形成的模块B.各处理使用相同的输入数据或者产生相同的输出数据C.一个模块中各个处理元素都密切相关于同一功能且必须顺序执行D.模块内所有元素共同完成一个功能,缺一不可( )9. 一个只有顺序结构的程序,其环形复杂度是A.0B.1C.3D.5( )10. 下述四个能力成熟度等级,级别最高的是A.已定义级B.优化级C.可重复级D.已管理级( )11. 结构化程序设计,主要强调的是A.程序的执行效率B.模块大小C.程序的可理解性D.模块关系( )12. 软件调试技术包括A.边界值分析B.演绎法C.循环覆盖D.集成测试( )13. 需求分析中开发人员要从用户那里了解A.软件做什么B.用户使用界面C.输入的信息D.软件的规模( )14. 数据字典是对数据定义信息的集合,它所定义的对象都包含于。
A.数据流图B.程序框图C.软件结构D.方框图( )15. 面向对象的主要特征除唯一性、继承性、多态性外,还具有。
A.封装性B.移植性C.完整性D.兼容性( )16. 关于软件维护的说法错误的是。
1、下列关于队列的叙述中正确的是(C)A. 在队列中只能插入数据B. 在队列中只能删除数据C. 队列是先进先出的线性表D. 队列是先进后出的线性表2、数据库系统的核心是(B)A. 数据模型B. 数据库管理系统C. 软件工具D. 数据库3、结构化程序设计主要强调的是(B)A.程序的规模B.程序的易读性C.程序的执行效率D.程序的可移植性4、软件需求分析阶段的工作,可以分为四个方面:需求获取、需求分析、编写需求规格说明书以及(B)A. 阶段性报告B. 需求评审C. 总结D. 都不正确5、在软件生命周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段是(D)A. 概要设计B. 详细设计C. 可行性分析D. 需求分析6、数据库系统的核心是(B)A. 数据模型B. 数据库管理系统C. 软件工具D. 数据库7、数据流图用于抽象描述一个软件的逻辑模型,数据流图由一些特定的图符构成。
下列图符名标识的图符不属于数据流图合法图符的是(A)A. 控制流B. 加工C. 数据存储D. 源和潭8、数据流图用于抽象描述一个软件的逻辑模型,数据流图由一些特定的图符构成。
下列图符名标识的图符不属于数据流图合法图符的是(A)A. 控制流B. 加工C. 数据存储D. 源和潭9、下列模式中,能够给出数据库物理存储结构与物理存取方法的是(A)A. 内模式B. 外模式C. 概念模式D. 逻辑模式10、软件调试的目的是(B) 注:与软件测试要对比着复习A.发现错误B.改正错误C.改善软件的性能D.挖掘软件的潜能11、数据库概念设计的过程中,视图设计一般有三种设计次序,以下各项中不对的是(D)A. 自顶向下B. 由底向上C. 由内向外D. 由整体到局部12、下面概念中,不属于面向对象方法的是 (D)A. 对象B. 继承C. 类D. 过程调用13、数据库概念设计的过程中,视图设计一般有三种设计次序,以下各项中不对的是(D)A. 自顶向下B. 由底向上C. 由内向外D. 由整体到局部14、在深度为5的满二叉树中,叶子结点的个数为(C)A. 32B. 31C. 16D. 15。
2012年上半年软件设计师下午试题试题一(共15分)阅读下列说明和图,回答问题1至问题4,将解答填入答题纸的对应栏内。
【说明】某学校开发图书管理系统,以记录图书馆藏图书及其借出和归还情况,提供给借阅者借阅图书功能,提供给图书馆管理员管理和定期更新图书表功能。
主要功能的具体描述如下:(1)处理借阅。
借阅者要借阅图书时,系统必须对其身份(借阅者ID)进行检查。
通过与教务处维护的学生数据库、人事处维护的职工数据库中的数据进行比对,以验证借阅者ID是否合法,若合法,则检查借阅者在逾期未还图书表中是否有逾期未还图书,以及罚金表中的罚金是否超过限额。
如果没有逾期未还图书并且罚金未超过限额,则允许借阅图书,更新图书表,并将借阅的图书存入借出图书表,借阅者归还所借图书时,先由图书馆管理员检查图书是否缺失或损坏,若是,则对借阅者处以相应罚金并存入罚金表;然后,检查所还图书是否逾期,若是,执行“处理逾期”操作;最后,更新图书表,删除借出图书表中的相应记录。
(2)维护图书。
图书馆管理员查询图书信息;在新进图书时录入图书信息,存入图书表;在图书丢失或损坏严重时,从图书表中删除该图书记录。
(3)处理逾期。
系统在每周一统计逾期未还图书,逾期未还的图书按规则计算罚金,并记入罚金表,并给有逾期未还图书的借阅者发送提醒消息。
借阅者在借阅和归还图书时,若罚金超过限额,管理员收取罚金,并更新罚金表中的罚金额度。
现采用结构化方法对该图书管理系统进行分析与设计,获得如图1-1所示的顶层数据流图和图1.2所示的0层数据流图。
【问题1】(4分)使用说明中的词语,给出图1-1中的实体E1-E4的名称。
答案:E1: 借阅者 E2:图书管理员E3/E4: 学生数据库/职工数据库【问题2】(4分)使用说明中的词语,给出图1-2中的数据存储D1~D4的名称。
答案:D1: 图书表 D2: 借出图书表D3: 逾期未还图书表 D4: 罚金表【问题3】(5分)在DFD建模时,需要对有些复杂加工(处理)进行进一步精化,绘制下层数据流图。
对一个方阵转置,就是把原来的行号变列号,原来的列号变行号例如,如下的方阵:1 2 3 45 6 7 89 10 11 1213 14 15 16转置后变为:1 5 9 132 6 10 143 7 11 154 8 12 16但,如果是对该方阵顺时针旋转(不是转置),却是如下结果:13 9 5 114 10 6 215 11 7 316 12 8 4下面的代码实现的功能就是要把一个方阵顺时针旋转。
void rotate(int* x, int rank){int* y = (int*)malloc(___________________); // 填空for(int i=0; i<rank * rank; i++){y[_________________________] = x[i]; // 填空}for(i=0; i<rank*rank; i++){x[i] = y[i];}free(y);}int main(int argc, char* argv[]){int x[4][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};int rank = 4;rotate(&x[0][0], rank);for(int i=0; i<rank; i++){for(int j=0; j<rank; j++){printf("%4d", x[i][j]);}printf("\n");}return 0;}请分析代码逻辑,并推测划线处的代码。
答案写在“解答.txt”文件中注意:只写划线处应该填的内容,划线前后的内容不要抄写。
假设有两种微生物X 和YX出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍)。
一个新出生的X,半分钟之后吃掉1个Y,并且,从此开始,每隔1分钟吃1个Y。
2012 年上半年软件设计师考试真题(上午)位于 CPU 与主存之间的高速缓冲存储器 Cache 用于存放部分主存数据的拷贝,主存地址与Cache 地址之间的转换工作由 (1) 完成。
(1)A.硬件 B.软件 C.用户 D.程序员内存单元按字节编址,地址 0000A000H~0000BFFFH 共有 (2) 个存储单元。
(2)A.8192K B.1024K C.13K D.8K相联存储器按 (3) 访问。
(3)A.地址 B.先入后出的方式C.内容 D.先入先出的方式若 CPU 要执行的指令为:MOV R1,#45(即将数值 45 传送到寄存器 R1 中),则该指令中采用的寻址方式为 (4) 。
(4)A.直接寻址和立即寻址B.寄存器寻址和立即寻址C.相对寻址和直接寻址D.寄存器间接寻址和直接寻址一条指令的执行过程可以分解为取指、分析和执行三步,在取指时间 t 取指=3△t、分析时间t 分析=2△t、执行时间 t 执行=4△t 的情况下,若按串行方式执行,则 10 条指令全部执行完需要(5) △t;若按流水线的方式执行,则 10 条指令全部执行完需要(6) △t。
(5)A.40 B.70 C.90 D.100(6)A.20 B.30 C.40 D.45甲和乙要进行通信,甲对发送的消息附加了数字签名,乙收到该消息后利用 (7) 验证该消息的真实性。
(7)A.甲的公钥 B.甲的私钥 C.乙的公钥 D.乙的私钥在 Windows 系统中,默认权限最低的用户组是 (8) 。
(8)A.Everyone B.administrators C.power users D.usersIIS6.0 支持的身份验证安全机制有 4 种验证方法,其中安全级别最高的验证方法是 (9) 。
(9)A.匿名身份验证B.集成 Windows 身份验证C.基本身份验证D.摘要式身份验证软件著作权的客体不包括 (10) 。
(10)A.源程序 B.目标程序 C.软件文档 D.软件开发思想中国企业 M 与美国公司 L 进行技术合作,合同约定 M 使用一项在有效期内的美国专利,但该项美国专利未在中国和其他国家提出申请。
2021下半年软件设计师考试真题及答案-下午卷[试题1]阅读以下说明,根据要求答复以下问题。
[说明]某电子商务系统采用以数据库为中心的集成方式改良购物车的功能,详细需求如下。
1.参加购物车。
顾客浏览商品,点击参加购物车,根据商品标识从商品表中读取商品信息,并更新购物车表。
2.浏览购物车。
顾客提交浏览购物车请求后,显示出购物车表中的商品信息。
3.提交订单。
顾客点击提交订单请求,后台计算购物车表中商品的总价(包括运费)参加订单表,将购物车表中的商品状态改为待付款,显示订单详情。
假设商家改变价格,那么刷新后可看到更改后的价格。
4.改变价格。
商家查看订购自家商品的订单信息,根据特殊优惠条件修改价格,更新订单表中的商品价格。
5.付款。
顾客点击付款后,系统先根据顾客表中关联的支付账户,将转账请求(验证码、价格等)提交给支付系统(如信用卡系统)进展转账;然后根据转账结果返回支付状态并更改购物车表中商品的状态。
6.物流跟踪。
商家发货后,需按订单标识添加物流标识(物流公司、运单号);然后可根据顾客或商家的标识以及订单标识,查询订单表中的物流标识,并从相应物流系统查询物流信息。
7.生成报表。
根据管理员和商家设置的报表选项,从订单表、商品表以及商品分类表中读取数据,调用第三方效劳Crystal Reports生成相关报表。
8.维护信息。
管理员维护(增、删、改、查)顾客表、商品分类表和商品表中的信息。
现采用构造化方法实现上述需求,在系统分析阶段得到如图1-9所示的顶层数据流图和图1-10所示的0层数据流图。
1、[问题1]使用说明中的词语,给出图1-9中的实体E1~E4的名称。
2、[问题2]使用说明中的词语,给出图1-10中的数据存储D1~D4的名称。
3、[问题3]图1-10中缺失了数据流,请用说明或图1-10中的词语,给出其起点和终点。
4、[问题4]根据说明,给出数据流“转账请求〞、“顾客订单物流查询请求〞和“商家订单物流查询请求〞的各组成数据项。
2014-2015学年第1学期
2012级《软件设计模式》考试试题(开卷)
考试时间:2014年
班级学号姓名
✧本试卷满分100分;
✧请将答案写在答题纸上,写明题号,不必抄题,字迹工整、清晰;
✧试题中使用C++语言作为描述语言,答题时可以使用C++或Java或C#程序设计语言中
的任意一种作为描述语言,但整个卷面只能使用其中一种,不得混合使用;
✧请在答题纸和试题纸上都写上你的班级,学号和姓名,交卷时请将试题纸、答题纸和草纸
一并交上来。
一、单选题(共20分,每题2分)
1.类设计中,“变化是绝对的,稳定是相对的”,下列哪个不属于这句话中“变化”的范畴?
(A) 改变函数参数的类型(B) 增加新的数据成员
(C) 改变编程语言(D) 改变对象交互的过程和顺序
2.Open-Close原则的含义是一个软件实体:
(A) 应当对扩展开放,对修改关闭
(B) 应当对修改开放,对扩展关闭
(C) 应当对继承开放,对修改关闭
(D) 以上都不对
3.下列关于继承表述错误的是:
(A) 继承是一种通过扩展一个已有类的实现,从而获得新功能的复用方法
(B) 泛化类(超类)可以显式地捕获那些公共的属性和方法。
特殊类(子类)则通过附加
属性和方法来进行实现的扩展
(C) 破坏了封装性,因为这会将父类的实现细节暴露给子类
(D) 继承本质上是“白盒复用”,对父类的修改,不会影响到子类
4.下列关于对象组合/聚合,说法错误的是:
(A) 容器类能通过被包含对象的接口来对其进行访问
(B) 属于黑盒复用,封装性好,因为被包含对象的内部细节对外是不可见
(C) 可以在运行时将被包含对象改变成同类型对象,从而改变容器类的行为效果,但没有
改变容器类的接口
(D) 比继承关系更加灵活,代价是相比继承关系,增强了类间的耦合度
5.用于分离接口和具体实现,使得接口和实现可独立变化的是:
(A)适配器模式(B) 桥接模式(C) 命令模式(D)模板方法模式
6.体现“集中管理多个对象间的交互过程和顺序”的是:
(A)生成器模式(B) 门面模式(C) 策略模式(D)中介者模式
7.限制类的实例对象只能有一个的是:.
(A) 原型方法模式(B) 工厂方法模式(C) 单件模式(D) 生成器模式
8.用于为一个对象添加更多功能而不使用子类的是:
(A) 桥接模式(B) 适配器模式(C) 合成(组合)模式(D) 装饰器模式
9.适配器设计模式可以用于:
(A) 将已有类的接口转换成和目标接口兼容
(B) 改进系统性能
(C) 将客户端代码数据转换成目标接口期望的合适的格式
(D) 使所有接口不兼容类可以一起工作
10.关于原型方法模式的说法,错误的是:
(A)便于在运行时刻更换原型对象;
(B)各产品必须实现复制的方法,如Clone方法;
(C)实现产品复制功能的难易程度,是应用该模式必须考虑的;
(D)设计时,不能同时使用生成器模式和原型方法模式;
二、(共20分,每题5分) 阅读代码,按要求回答问题:
1.考察Shape,Rectangle和Circle三个类。
若Circle::Draw( )的实现会有多种其它方法,又不
想从Circle类派生新子类。
请给出你的设计方案或示例代码。
2.若Circle::Draw( )的实现就是长短轴均为2的Ellipse::X_Draw( ),请问你怎样设计。
给出你
的设计方案或示例代码。
3.请使用装饰器模式给Draw添加新的功能。
给出示例代码及相应的主函数。
如扩展矩形Draw的输出为:Start Drawing …
Draw Rectangle.
扩展圆形Draw的输出为:Draw Circle.
Draw Over.
4.若从Shape类再派生一个新的子类Picture,且Picture组合多个Shape对象,其中Picture
的Draw就是依次绘制其组合的各个Shape。
现假设一个Picture对象只包含一个Rectangle 和一个Circle对象,请在3的基础上继续扩展,并编写主函数,使得主函数能够输出:Start Drawing …
Draw Rectangle.
Draw Circle.
Draw Over.
请给出具体设计代码和主函数。
三、(20分)现开发一个应届毕业生招聘软件,初步方案中的类图如下:
(1)各公司招聘毕业生的流程是不一样的;
(2)同一公司招聘不同毕业生(这里举例Boy,Girl)的流程也是不一样的;
(3)已知不同毕业生的类别是稳定的。
(如Boy和Girl)
(4)以后可能增加新功能,如试用(Practise).
(5)以后可能增加新的公司。
1.(12分)请应用访问者模式重新给出设计方案或示例代码,使得你的新设计满足根据上
述要求。
2.(4分)请说明如果增加新的功能(如试用),1中的设计如何适应。
请给出示例代码.
3.(4分)请说明如果增加新的公司(如中兴公司),1中的设计如何适应。
请给出示例代码.
四、(40分,每题20分)应用设计模式,给出设计方案、示例代码。
1.游戏中每个初始英雄带一样武器,占据一个城堡,拥有一件法器。
武器、城堡、法器
都有多种,现已预设了几类英雄,如海盗(火枪、岛城、行船术)、骑士(火枪、石城、骑马术)等。
(1) 未来一定会增加新武器、新城堡、新法器等。
如武器中增加一种新武器:激光枪。
(2) 来一定会增加新的预设类英雄,如未来战士。
(3) 各类英雄的特征不完全相同,但可能会有重复。
如海盗、骑士都使用火枪。
最初的部分代码如下:
class Knight:public Hero {
public:
Knight( ) {
weapon = new Rifle( );
castle = new StoneCastle( );
power = new HorseMagic( );
}
};
现希望分离英雄与具体特性(如武器、城堡、法器等)的创建。
请选择适当的设计模式重新设计,实现设计者的愿望。
简要说明你的设计方案,并给出示例代码。
2.猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。
(1) 要有联动性,老鼠和主人的行为是被动的;
(2) 考虑可扩展性,猫的叫声可能引起其他联动效应。
请选择适当的设计模式描述上述场景,简要说明你的设计方案,并给出示例代码。
全卷完。