您好,欢迎来到微智科技网。
搜索
您的当前位置:首页软件工程课后习题答案

软件工程课后习题答案

来源:微智科技网
软件⼯程课后习题答案

第⼀章

⼀、什么是软件危机?它有哪些典型表现?为什么会出现软件危机?

软件危机是指在计算机软件开发、使⽤与维护过程中遇到的⼀系列严重问题和难题。它包括两⽅⾯:如何开发软件,已满⾜对软件⽇益增长的需求;如何维护数量不断增长的已有软件。软件危机的典型表现:

(1) 对软件开发成本和进度的估计常常很不准确。常常出现实际成本⽐估算成本⾼出⼀个数量级、实际进度⽐计划进度拖延⼏个⽉甚⾄⼏年的现象。⽽为了赶进度和节约成本所采取的⼀些权宜之计⼜往往损害了软件产品的质量。这些都降低了开发商的信誉,引起⽤户不满。

(2) ⽤户对已完成的软件不满意的现象时有发⽣。

(3) 软件产品的质量往往是靠不住的。 (4) 软件常常是不可维护的。

(5) 软件通常没有适当的⽂档资料。⽂档资料不全或不合格,必将给软件开发和维护⼯作带来许多难以想象的困难和难以解决的问题。

(6) 软件成本、软件维护费在计算机系统总成本中所占⽐例逐年上升。(7) 开发⽣产率提⾼的速度远跟不上计算机应⽤普及的需求。软件危机出现的原因:

(1) 来⾃软件⾃⾝的特点:是逻辑部件,缺乏可见性;规模庞⼤、复杂,修改、维护困难。(2) 软件开发与维护的⽅法不当:忽视需求分析;认为软件开发等于程序编写;轻视软件维护。(3) 供求⽭盾将是⼀个永恒的主题:⾯对⽇益增长的软件需求,⼈们显得⼒不从⼼。

⼆、假设⾃⼰是⼀家软件公司的总⼯程师,当把图1.1给⼿下的软件⼯程师们观看,告诉他们及时发现并改正错误的重要性时,有⼈不同意这个观点,认为要求在错误进⼊软件之前就清楚它们是不现实的,并举例说:“如果⼀个故障是编码错误造成的,那么,⼀个⼈怎么能在设计阶段清除它呢?”应该怎么反驳他?

答:在软件开发的不同阶段进⾏修改付出的代价是很不相同的,在早期引⼊变动,涉及的⾯较少,因⽽代价也⽐较低;在开发的中期,软件配置的许多成分已经完成,引⼊⼀个变动要对所有已完成的配置成分都做相应的修改,

不仅⼯作量⼤,⽽且逻辑上也更复杂,因此付出的代价剧增;在软件“已经完成”是在引⼊变动,当然付出的代价更⾼。⼀个故障是代码错误造成的,有时这种错误是不可避免的,但要修改的成本是很⼩的,因为这不是整体构架的错误。

三、什么是软件⼯程?它有哪些本质特征?怎样⽤软件⼯程消除软件危机?

1993年IEEE的定义:软件⼯程是:①把系统的、规范的、可度量的途径应⽤于软件开发、运⾏和维护过程,也就是把⼯程应⽤于软件;②研究①中提到的途径。软件⼯程的本质特征:

(1) 软件⼯程关注于⼤型程序(软件系统)的构造(2) 软件⼯程的中⼼课题是分解问题,控制复杂性(3) 软件是经常变化的,开发过程中必须考虑软件将来可能的变化

(4) 开发软件的效率⾮常重要,因此,软件⼯程的⼀个重要课题就是,寻求开发与维护软件的更好更有效的⽅法和⼯具(5) 和谐地合作是开发软件的关键(6) 软件必须有效地⽀持它的⽤户

(7) 在软件⼯程领域中是由具有⼀种⽂化背景的⼈替具有另⼀种⽂化背景的⼈(完成⼀些⼯作)消除软件危机的途径:(1) 对计算机软件有⼀个正确的认识(软件≠程序)

(2) 必须充分认识到软件开发不是某种个体劳动的神秘技巧,⽽应该是⼀种组织良好、管理严密、各类⼈员协同配合、共同完成的⼯程项⽬

(3) 推⼴使⽤在实践中总结出来的开发软件的成功技术和⽅法(4) 开发和使⽤更好的软件⼯具

四、简述结构化范型和⾯向对象范型的要点,并分析他们的优缺点。

1.?传统⽅法学:也称为⽣命周期⽅法学或结构化范型。?优点:把软件⽣命周期划分成基⼲个阶段,每个阶段的任务相对独⽴,⽽且⽐较简单,便于不同⼈员分⼯协作,?从⽽降低了整个软件开发过程的困难程度。缺点:当软件规模庞⼤时,或者对软件的需求是模糊的或会承受时?间⽽变化的时候,开发出的软件往往不成功;⽽且维护起来仍然很困难。?

2.?⾯向对象⽅法学:优点:降低了软件产品的复杂性;提⾼了软件的可理解性;简化了软件的开发和维护⼯作;?促进了软件重⽤。?

五、1-5 根据历史数据可以做出如下的假设:

对计算机存储容量的需求⼤致按下⾯公式描述的趋势逐年增加:M=4080e0.28(Y-1960)存储器的价格按下⾯公式描述的趋势逐年下降:P1=0.3×0.72Y-1974(美分/位)

如果计算机字长为16位,则存储器价格下降的趋势为:P2=0.048×0.72Y-1974(美元/字)在上列公式中Y代表年份,M是存储容量(字数),P1和P2代表价格。基于上述假设可以⽐较计算机硬件和软件成本的变化趋势。要求计算:

(1) 在1985年对计算机存储容量的需求估计是多少如果字长为16位,这个存储器的价格是多少存储容量需求M=4080e0.28(1985-1960)=4474263(字)

存储器价格P=0.048*0.72(1985-1974)*4474263=57美元

(2) 假设在1985年⼀名程序员每天可开发出10条指令,程序员的平均⼯资是每⽉4000美元。如果⼀条指令为⼀个字长,计算使存储器装满程序所需⽤的成本。需要⼯作量4474263/200=22371(⼈/⽉)

(3) 假设在1995年存储器字长为32位,⼀名程序员每天可开发出30条指令,程序员的⽉平均⼯资为6000美元,重复(1)、(2)题。

六、什么是软件过程它与软件⼯程⽅法学有何关系

软件过程是为了开发出⾼质量的软件产品所需完成的⼀系列任务的框架,它规定了完成各项任务的⼯作步骤。软件⼯程⽅法学:通常把在软件⽣命周期全过程中使⽤的⼀整套技术⽅法的集合称为⽅法学,也称范型。软件过程是软件⼯程⽅法学的3个重要组成部分之⼀。

七、什么是软件⽣命周期模型?试⽐较瀑布模型、快速原型模型、增量模型和螺旋模型的优缺点,说明每种模型的使⽤范围。软件⽣命周期模型是跨越整个⽣存期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架。

瀑布模型优点:它提供了⼀个模板,这个模板使得分析、设计、编码、测试和⽀持的⽅法可以在该模板下有⼀个共同的指导。虽然有不少缺陷但⽐在软件开发中随意的状态要好得多。

缺点:(1) 实际的项⽬⼤部分情况难以按照该模型给出的顺序进⾏,⽽且这种模型的迭代是间接的,这很容易由微⼩的变化⽽造成⼤的混乱。

(2) 经常情况下客户难以表达真正的需求,⽽这种模型却要求如此,这种模型是不欢迎具有⼆义性问题存在的。

(3) 客户要等到开发周期的晚期才能看到程序运⾏的测试版本,⽽在这时发现⼤的错误时,可能引起客户的惊慌,⽽后果也可能是灾难性的。快速原型模型

优点:使⽤户能够感受到实际的系统,使开发者能够快速地构造出系统的框架。

缺点:产品的先天性不⾜,因为开发者常常需要做实现上的折中,可能采⽤不合适的操作系统或程序设计语⾔,以使原型能够尽快⼯作。增量模型

优点:(1) ⼈员分配灵活,刚开始不⽤投⼊⼤量⼈⼒资源,当核⼼产品很受欢迎时,可增加⼈⼒实现下⼀个增量。(2) 当配备的⼈员不能在设定的期限内完成产品时,它提供了⼀种先推出核⼼产品的途径,这样就可以先发布部分功能给客户,对客户起到镇静剂的作⽤。

缺点:(1) ⾄始⾄终开发者和客户纠缠在⼀起,直到完全版本出来。(2) 适合于软件需求不明确、设计⽅案有⼀定风险的软件项⽬。该模型具有⼀定的市场。螺旋模型

优点:对于⼤型系统及软件的开发,这种模型是⼀个很好的⽅法。开发者和客户能够较好地对待和理解每⼀个演化级别上的风险。

缺点:(1) 需要相当的风险分析评估的专门技术,且成功依赖于这种技术。

(2) 很明显⼀个⼤的没有被发现的风险问题,将会导致问题的发⽣,可能导致演化的⽅法失去控制。(3) 这种模型相对⽐较新,应⽤不⼴泛,其功效需要进⼀步的验证。该模型适合于⼤型软件的开发

⼋、为什么说喷泉模型较好的体现了⾯向对象软件开发过程⽆缝和迭代的特性?

因为使⽤⾯向对象⽅法学开发软件时,各个阶段都使⽤统⼀的概念和表⽰符号,因此,整个开发过程都是吻合⼀致的,或者说是⽆缝连接的,这⾃然就很容易实现各个开发步骤的反复多次迭代,达到认识的逐步深化,⽽喷泉模型则很好的体现了⾯向对象软件开发过程迭代和⽆缝的特性。九、试讨论Rational统⼀过程的优缺点。

优点:提⾼了团队⽣产⼒,在迭代的开发过程、需求管理、基于组建的体系结构、可视化软件建模、验证软件质量及控制软件变更等⽅⾯、针对所有关键的开发活动为每个开发成员提供了必要的准则、模版和⼯具指导,并确保全体成员共享相同的知识基础。它建⽴了简洁和清晰的过程结构,为开发过程提供较⼤的通⽤性。

缺点:RUP只是⼀个开发过程,并没有涵盖软件过程的全部内容,例如它缺少关于软件运⾏和⽀持等⽅⾯的内容,此外,他没有⽀持多项⽬的开发结构,这在⼀定程度上降低了在开发组织内⼤范围实现重⽤的可能性。⼗.Rational统⼀过程主要适⽤于何种项⽬?⼤型的需求不断变化的复杂软件系统项⽬⼗⼀.说明敏捷过程的适⽤范围

适⽤于商业竞争环境下对⼩型项⽬提出的有限资源和有限开发时间的约束⼗⼆.说明微软过程的适⽤范围

适⽤于商业环境下具有有限资源和有限开发时间约束的项⽬的软件过程模式第⼆章

1.在软件开发的早期阶段为什么要进⾏可⾏性研究应该从哪些⽅⾯研究⽬标系统的可⾏性?

答:(1)开发⼀个软件时,需要判断原定的系统模型和⽬标是否现实,系统完成后所能带来的效益是否⼤到值得投资开发这个系统的程度,如果做不到这些,那么花费在这些⼯程上的任何时间、⼈⼒、软硬件资源和经费,都是⽆谓的浪费。可⾏性研究的实质是要进⾏⼀次⼤⼤压缩简化了的系统分析和设计过程,就是在较⾼层次上以较抽象的⽅式进⾏的系统分析和设计的过程。可⾏性研究的⽬的就是⽤最⼩的代价在尽可能短的时间内确定问题是否能够解决。(2)⼀般说来,⾄少应该从以下三个⽅⾯研究每种解法的可⾏性:

a.技术可⾏性。对要开发项⽬的功能、性能和条件进⾏分析,确定在现有的资源条件下,技术风险有多⼤,项⽬是否能实现,这些即为技术可⾏性研究的内容。这⾥的资源包括已有的或可以搞到的硬件、软件资源,现有技术⼈员的技术⽔平和已有的⼯作基础。

b.经济可⾏性。进⾏开发成本的估算以及了解取得效益的评估,确定要开发的项⽬是否值得投资开发,这些即为经济可⾏性研究的内容对于⼤多数系统,⼀般衡量经济上是否合算,应考虑⼀个“底线”,经济可⾏性研究范围较⼴,包括成本—效益分析,

长期公司经营策略,开发所需的成本和资源,潜在的市场前景。

c.操作可⾏性。有时还要研究社会可⾏性问题,研究要开发的项⽬是否存在任何侵犯、妨碍等责任问题。社会可⾏性所涉及的范围也⽐较⼴,它包括合同、责任、侵权和其他⼀些技术⼈员常常不了解的陷阱等。必要时还应该从法律、社会效益等更⼴泛的⽅⾯研究每种解法的可⾏性。

2.为⽅便储户,某银⾏拟开发计算机储蓄系统。储户填写的存款单或取款单由业务员键⼊系统,如果是存款,系统记录存款⼈姓名、住址、存款类型、存款⽇期、利率等信息,并印出存款单给储户;如果是取款,系统计算利息并印出利息清单给储户。请写出问题定义并分析此系统的可⾏性。数据流程图:取票图:

航空订票系统技术在⽬前是⼀个技术上成熟的系统,并且在航空公司内部准备采取有⼒措施保证资⾦和⼈员配置等。因此,分阶段开发“航空订票系统”的构想是可⾏的。为了使航空公司适应现代化市场竞争的需求,促进机票预订管理信息化,不断满⾜旅客预订机票的要求,争取更好的经济效益,可⽴即着⼿系统的开发与完善。

3、为⽅便旅客,某航空公司拟开发⼀个机票预定系统。旅⾏社把预定机票的旅客信息(姓名、性别、⼯作单位、⾝份证号码、旅⾏时间、旅⾏⽬的地等)输⼊进⼊该系统,系统为旅客安排航班,印出取票通知和账单,旅客在飞机起飞的前⼀天凭取票通知和账单交款取票,系统校对⽆误即印出机票给旅客。写出问题定义并分析系统的可⾏性。1> ⽬标:在⼀个⽉内建⽴⼀个⾼效率,⽆差错的航空公司机票预定系统2> 存在的主要问题:⼈⼯不易管理,⼿续繁琐3> 建⽴新系统

①经济可⾏性成本效益分析

成本估算:打印机⼀台(2000元)+开发费(3500元)=5500元可承担

效益估算:该系统有很好的社会效益,提⾼了航空公司售票效率,⽅便了旅客,售票⽅便化,科学化②技术可⾏性

经过调查分析,得到⽬前航空公司机票预定系统流程图如下:

4.⽬前住院病⼈主要由护⼠护理,这样做不仅需要⼤量护⼠,⽽且由于不能随时

观察危重病⼈的病情变化,还可能会延误抢救时机。某医院打算开发⼀个以计算机为中⼼的患者监护系统,试写出问题定义,并且分析开发这个系统的可⾏性可⾏性分析--原系统分析:

5北京某⾼校可⽤的电话号码有以下⼏类:校内电话号码由4位数字组成,第⼀位数字不是0.校外电话⼜分为本市电话和外地电话两类。拨校外电话需要先拨0,若是本市电话则接着拨8位数字(第⼀位不是0),若是外地电话则拨3位区码后再拨8位电话号码(第⼀位不是0)。答:

电话号码=[校内电话号码|校外电话号码]校内电话号码=⾮零数字+3位数字校外电话号码=[本市号码|外地号码]本市号码=数字零+8位数字

外地号码=数字零+3位数字+8位数字

⾮零数字=[1|2|3|4|5|6|7|8|9]数字零=0

3位数字=3{数字}38位数字=⾮零数字+7位数字7位数字=7{数字}7

数字=[0|1|2|3|4|5|6|7|8|9]

其中,[ ]意思是或,从校内电话号码或校外电话号码中选择⼀个;{ }表⽰重复,两边的数字表⽰重复次数的下限和上限;=意思是定义为;+意思是和,连接两个分量。第三章

(1).为什么要进⾏需求分析?通常对软件系统有哪些要求?

答:1) 为了开发出真正满⾜⽤户需求的软件产品,⾸先必须知道⽤户的需求。对软件需求的深⼊理解是软件开发⼯作获得成功的前提条件,不论我们把设计和编码⼯作做得如何出⾊,不能真正满⾜⽤户需求的程序只会令⽤户失望,给开发者带来烦恼。

2)确定对系统的综合要求:1、功能需求;2、性能需求;3、可靠性和可⽤性需求;4、出错处理需求;5、接⼝需求;6、约束;7、逆向需求;8、将来可以提出的要求,分析系统的数据要求。(2)怎样与⽤户有效地沟通以获取⽤户的真实需求?答案:

与⽤户沟通获取需求的⽅法:访谈;⾯向数据流⾃顶向下求精;简易的应⽤规格说明技术;快速建⽴软件原型

3 银⾏计算机储蓄系统的⼯作过程⼤致如下:储户填写的存款单或取款单由业务员键⼊系统,如果是存款则系统记录存款⼈姓名、住址、⾝份证号码等存款信息,并打印出存款存单给储户;如果是取款且存款时留有密码,则系统⾸先核对储户密码,若密码正确或存款时未留密码,则系统计算利息并打印出利息清单给储户。答案:⽤ER图描绘系统中的数据对象。

(5)分所析习题2中第4题的患者监狱系统。试⽤实体-联系图描述本系统中的数据对象并⽤数据流程描绘本系统的功能。

(6

1,举例说明形式化说明技术和⽋形式化⽅法的优缺点。

游戏的每个状态对应⼀个游戏界⾯,开始状态下,但变量cd_start=1是进⼊正常游戏的状态,cd_start=2时 进⼊读取游戏状态,cd_start=3是进⼊得分榜界⾯查看。在得分榜界⾯按任意键返回开始界⾯,在读取游戏界 ⾯,当游戏数据读取完成后进⼊

正常游戏状态,正常游戏状态下,同时按下左键和右键进⼊储存游戏界⾯,数 据储存结束后返回正常游戏状态,在正常游戏状态下,如果变量game_res=0,则游戏结束,进⼊游戏结束画⾯。 可见,⽤⾃然语⾔书写的系统规格说明书,罗嗦繁杂,并且可能存在⽭盾,⼆义性,含糊性,不完整性及抽象 层次混乱等问题。⽤有穷状态的描述如下:

状态机J :{开始,正常游戏(游戏进⾏中),得分榜,读取游戏,储存游戏,游戏结束}

输⼊集K :{按键UP ,按键DOWN ,按键LEFT ,按键RIGHT ,寄存器变量cd_start ,寄存器变量game_res} 转换函数T :如图4.1所⽰

H ,不应该盲⽬依赖形式化⽅法; I ,应该测试,测试再测试; J ,应该重⽤。

3,⼀个浮点⼆进制数的构成是:⼀个可选的符号(+或-),后跟⼀个或多个⼆进制位,再跟上⼀个字符E ,再加上另⼀个可选符号(+或-)及⼀个或多个⼆进制位。例如,下列的字符串都是浮点⼆进制数: 110101E-101 -100111E11101 +1E0更形式化地,浮点⼆进制数定义如下:

〈floating point binary 〉∷=[〈sign 〉]〈bitstring 〉E [〈sign 〉]〈bitstring 〉 〈sign 〉∷=+|-〈bitstring 〉∷=〈bit 〉[〈bitstring 〉] 〈bit 〉∷=0|1 其中,符号∷=表⽰定义为; 符号[...]表⽰可选项; 符号a |b 表⽰a 或b 。

假设有这样⼀个有穷状态机:以⼀串字符为输⼊,判断字符串中是否含有合法的浮点⼆进制数。试对这个有穷状态机进⾏规格说明。

4,考虑下述的⾃动化图书馆流通系统:每本书都有⼀个条形码,每个⼈都有⼀个带条形码的卡⽚。但⼀个借阅⼈想借⼀本书时,图书管理员扫描书上的条形码和借阅⼈卡⽚的条形码,然后在计算机终端上输⼊C ;当归还⼀本书时,图书管理员将再次扫描,并输⼊R 。图书管理员可以把⼀些书加到(+)图书集合中,也可以删除(—)它们。借阅⼈可以再终端上查找到某个作者所有的书(输⼊“A=”和作者名字),或具有指定标题的所有书籍(输⼊“T=”和标题),或属于特定主题范围内的所有图书(输⼊“S=”加主题范围)。最后,如果借阅⼈想借的书已被别⼈借⾛,图书管理员将给这本书设置⼀个预约,以便书归还时把书留给预约的借阅⼈(输⼊“H=”加书号)。 试⽤有穷状态机说明上述的图书流通系统 答:图书馆流通系统的有穷状态机描述如下: (⼀)图书状态的有穷状态机描述

状态机J :{书在图书馆S1,书被借出S2,书被预约S3}

输⼊集K :{书上条形码,借阅卡条形码,终端输⼊各种命令} 转换函数T :如图4.4.1所⽰初始态S :{书在图书馆S1,书被借出S2} 终态集F :{书被借出S2,书被预约S3}()图书馆终端管理员模式的有穷状态机描述

状态机J :{管理员设置状态,书⼊库,书出库(删除),预约}输⼊集K :{终端输⼊管理员命令,书的各种状态(S1,S2,S3}转换函数T :如图4.4.2所⽰

初始态S :{管理员设置状态}

终态集F :{书⼊库,书出库(删除),预约,} ()图书馆终端⽤户模式的有穷状态机描述

状态机J :{读者查询状态,查询结果} 输⼊集K :{终端输⼊⽤户查询命令,书的各种状态(S1,S2,S3)}转换函数T :如图4.4.3所⽰ 初始态S :{读者查询状态} 终态集F :{查询结果}

5,试⽤Petri ⽹说明第四题所述图书馆中⼀本书的循环过程,在规格说明中应该包括操作H 、C 及R 。 答:其中P1表⽰书在图书馆P2表⽰书在读者⼿上,P3书被预约

6,试⽤Z 语⾔对第四题所描述图书馆图书流通系统做⼀个完整的规格说明。 书归还,扫描两个条形码,在终端输⼊R 在终端输⼊“H=”加书号 扫描两个条形码,在终端输⼊R 扫描两个条形码,在终端输⼊C

书在图书馆S1 书被借出S2 书被预约S3 图4.1.1

管理员删除 管理员添加 管理员设置状态 书⼊库 书出库(删除) 预约 书状态为S2&终端输⼊“H=”加书名 图4.4.2读者查询状态

查询结果 终端输⼊各种查询命令P1P2 .

答:(这题真的不会!)

第五章

5.1为每种类型的模块耦合举⼀个具体的例⼦。

答:耦合式对⼀个软件结构内不同模块之间互联程度的度量。耦合强弱取决于接⼝的复杂度,进⼊或访问某⼀模块的点,以及通过接⼝的数据。⼀般模块之间的可能的连接⽅式有七种,构成耦合的七种类型,它们的关系为:低耦合性

下⾯举例说明以上耦合:

A.⾮直接耦合:两个模块没有直接的关系(模块1和模块2),独⽴性最强

G.

①②③④

Sub AA(….)……Goto L…End subSub BB(..)……L: ……End sub

5.2为每种类型的模块内聚举⼀个例⼦

答:内聚标志着⼀个模块内各个元素之间彼此结合的紧密程度,它是信息隐藏和局部化概念的⾃然扩展。低内聚:

A.偶然内聚:如果⼀个模块完成⼀组任务,这些任务彼此间即使有关系,关系也是很松散的。这就叫做偶然内聚

偶然内聚的例⼦:在模块T 中有A,B,C三条语句,⾄少从表⾯上看来这三条语句没什么联系,只是因为D,E,F,G中都有这三条语句,为了节省空间才把这三条语句作为⼀个模板放在⼀起。

B.逻辑内聚:如果⼀个模块完成的任务在逻辑上属于相同或相似的⼀类(例如⼀个模块产⽣各种类型的全部输出),称为逻辑内聚

逻辑内聚的例⼦:某⼀个模块将打印,年,⽉,⽇,具体打印什么,将由传⼊的控制标志所决定。C.时间内聚:⼀个模块包含的任务必须在同⼀段时间内执⾏(例如,模块完成各种初始化⼯作),称为时间内聚

时间内聚的例⼦:将多个变量的初始化放在同⼀个模块中实现。中内聚:

A.过程内聚:如果⼀个模块内的处理元素是相关的,⽽且必须以特定次序执⾏,称为过程内聚

过程内聚的例⼦:⼀个⼦程序,将开始读取学⽣的学号,然后是姓名,最后将读取分数,是由于特定的顺序⽽将这些操作组合在⼀起的

B.通讯内聚:如果模块中所有的元素都使⽤同⼀个输⼊数据和(或)产⽣同⼀个输出数据,则称为通讯内聚

通讯内聚的例⼦:有⼀个⼦程序,它将打印实验报告,并且在完成后重新初始化传进来的实验数据。这个程序具有通讯内聚性。因为这两个操作由于使⽤同⼀个数据源联系在了⼀起。⾼内聚:

A.顺序内聚:如果⼀个模块内的处理元素和同⼀个功能密切相关,⽽且这些处理必须顺序执⾏(通常⼀个处理元素的输出数据作为下⼀个处理元素的输⼊数据),则称为顺序内聚。

顺序内聚的例⼦:有⼀个⼦程序,通过给出的⽣⽇,先计算出年龄。再根据年龄算出退休的时间,则这个程序具有顺序内聚性。

B.功能内聚:如果模块内所有的元素属于⼀个整体完成⼀个单⼀的功能,则成为功能内聚。功能内聚的例⼦:⼀个程序中所有的操作都是为了算出⼀个⼈的年龄5.3⽤⾯向数据流的⽅法设计下列系统的软件结构①储蓄系统②机票预订系统③患者监护系统

5.4 美国某⼤学有 200 名教师,校⽅与教师⼯会刚刚签订⼀项协议。按照协议,

所有年⼯资超过$26000(含$26000 )的教师⼯资将保持不变,年⼯资少于$26000 的教师将增加⼯资,所增加⼯资数额按下述⽅法计算:给每位教师所赡养的⼈(包

括教师本⼈)每年补助$100,此外,教师有⼀年⼯龄每年再多补助¥50,但是,增加后的年⼯资总额不能多于$26000。

教师⼯资档案存储在⾏政办公室的磁带上,档案中有⽬前的年⼯资、赡养的⼈数、雇佣⽇期等信息。需要写⼀个程序计算并印出每名教师的原⼯资和调整后的新⼯资。

要求:(1)画出此系统的数据流图;(2)写出需求说明;

(3)设计上述的⼯资调整程序(要求⽤ HIPO 图描绘设计结果),设计时分别采⽤两种算法,并⽐较两种算法的优缺点:(a)搜索⼯资档案数据,找出年⼯资少于$26000 的⼈,计算新⼯资,校核是否超过$26000,存储新⼯资,印出新旧⼯资对照表;

(b)把⼯资档案数据按⼯资从最低到最⾼的次序排序,当⼯资数额超过$26000 时即停⽌排序,计算新⼯资,校核是否超过限额,存储新⼯资,印出结果。(4)你所画出的数据流图适应⽤那种算法?解:(1)数据流图:分解后:(2)需求说明:

1. 功能需求:可以输⼊调资的标准,输⼊教师档案,经调资给出新的教师档案,需要存储档案

2.性能需求:软件的响应时间应⼩于0.5s,更新处理要快

3.灵活需求:当需求发⽣某些变化时,该软件应该能够适应这些变化4.故障处理要求:出现错误时,应给予警告或提⽰(3)

(a)⽐较耗时,因为它要检索所有的档案,(b)从速度上看⽐较快,但是(b)需要排序算法,⽐较复杂,(a)对于设计来讲⽐较简单 .

(4)画出的数据流图⽐较适合(A)的算法

5.5下⾯将给出两个⼈玩的扑克牌游戏的⼀种玩法,试设计⼀个模拟程序,它的基本功能是:(1)发两⼿牌(利⽤随机数产⽣器)。(2)确定赢者和赢牌的类型。

(3)模拟N次游戏,计算每种类型牌赢或平局的概率。要求⽤HIPO图描绘设计结果并且画出⾼层控制流程图。扑克牌游戏规则如下:(1)有两个⼈玩分别为A和B。

(2)⼀副扑克牌有52张牌,4种花⾊(⿊桃、红桃、梅花、⽅块),每种花⾊的牌的点数按升序排列有2,3,4,.........,10,J,Q,K,A等13种。

(3)给每个⼈发三张牌,牌⾯向上,赢者⽴即可以确定。

(4)最⾼等级的⼀⼿牌成为同花,即3张牌均为同⼀种花⾊,最⼤的同花是同⼀种花⾊的Q,K,A。(6)第三等级的牌是同点,即点数相同的三张牌,最⼤的同点是AAA。(7)第四等级的牌是对⼦,即3张牌中有两张点数相同,最⼤的对⼦是A,A,K。

(8)第五等级的牌是杂牌,即除去上列4等之外的任何⼀⼿牌,最⼤的杂牌是不同花⾊的A.K,J。(9)若两个⼈的牌类型不同,则等级⾼者胜;若等级相同,则点数⾼者胜;若点数也相同,则为平局。程序:#include \"stdio.h\"int rabl(int a,int b,int *r){

int l,k,m,i,p;k=b-a+1;l=2;while(i<=1){

k=k+k+k+k+k;k=k%m;l=k/4+a;

if(l<=b) {p=l;i=i+1;}}*r=k;return(p);}

int max(int T[10][10]){int t=0;

if(T[0][0]>T[1][0])t=T[0][0];

else t=T[1][0];if(tt=T[2][0];return t;}

int E1(int T[10][10]){

if(T[0][1]==T[1][1]&&T[1][1]==T[2][1])return 1;else return 0;}

int E2(int T[10][10]){int q=0;

if(((max(T[10][10])-1)==T[0][0]||(max(T[10][10])-1)==T[1][0]| |(max(T[10][10])-1)==T[2][0])&&((max(T[10][10])-2)==T[0][0]||(max(T[1 0][10])-2)==T[1][0]||(max(T[10][10])-2)==T[2][0])) // if(q=max(T[][10]))return 1;elsereturn 0;}

int E3(int T[10][10]){

if(T[0][0]==T[1][0]==T[2][0])return 1;else return 0;}

int E4(int T[10][10]){

if(T[0][0]==T[1][0]&&T[0][0]!=T[2][0])return 1;

else if(T[0][0]==T[2][0]&&T[0][0]!=T[1][0])return 1;

else if(T[1][0]==T[2][0]&&T[1][0]!=T[0][0])return 1;

else return 0;}

void main(){

int times=0,e1=0,e2=0,e3=0,e4=0,e5=0;int A[10][10],B[10][10];int r1=2,r2=3;

printf(\"请输⼊游戏的次数\\n\");scanf(\"%d\for(int j=0;j{

for(int i=0;i<3;i++){

A[i][0]=rabl(1,13,&r1);A[i][1]=rabl(14,17,&r2);B[i][0]=rabl(1,13,&r1);B[i][1]=rabl(14,17,&r2);}

if(E1(A[][10])>E1(B[][10])){e1++;

printf(\"A赢,同花顺\\n\");}

else if(E1(A[][10]){e1++;

printf(\"B赢,同花顺\\n\");}

else if(E1(A[][10])==E1(B[][10])&&E1(B[][10])==1){e1++;

if(max(A[][10])>max(B[][10]))printf(\"A赢,同花顺\\n\");else

printf(\"B赢,同花顺\\n\");}

else if(E2(A[][10])>E2(B[][10])){e2++;

printf(\"A赢,顺⼦\\n\");}

else if(E2(A[][10]){e2++;

printf(\"B赢,顺⼦\\n\");}

else if(E2(A[][10])==E2(B[][10])&&E2(B[][10])==1) {e2++;

if(max(A[][10])>max(B[][10]))printf(\"A赢,顺⼦\\n\");else

printf(\"B赢,顺⼦\\n\");}

else if(E3(A[][10])>E3(B[][10])){e3++;

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务