软件工程第三章习题及参考答案.docx
《软件工程第三章习题及参考答案.docx》由会员分享,可在线阅读,更多相关《软件工程第三章习题及参考答案.docx(19页珍藏版)》请在冰豆网上搜索。
![软件工程第三章习题及参考答案.docx](https://file1.bdocx.com/fileroot1/2022-11/17/9e9966a0-2868-4ad2-81ad-648d59e5b8fa/9e9966a0-2868-4ad2-81ad-648d59e5b8fa1.gif)
软件工程第三章习题及参考答案
第3章习题及参考答案
1、用逐步求精方法解决下述得更新顺序主文件得问题。
美国某杂志社需要一个软件,以更新存有该杂志订户姓名、地址等数据得顺序主文件。
共有插入、修改与删除等3种类型得事务,分别对应于事务代码1、2与3。
也就就是说,事务类型如下:
类型1:
INSERT(插入一个新订户到主文件中)
类型2:
MODIFY(修改一个已有得订户记录)
类型3:
DELETE(删除一个已有得订户记录)
事务就是按订户名字得字母顺序排序得。
如果对一个订户既有修改事务又有删除事务,则已对那个订户得事务排好次序了,以便使修改发生在删除之前。
2.分析图3、1所示得层次图,确定每个模块得内聚类型。
3.分析图3、2,确定模块之间得耦合类型。
在图3、2中已经给模块之间得接口编了号码,表3、1描述了模块间得接口。
4、假设您在一所职业高中工作,负责该校信息系统得建设与维护。
财务科长请您研究用学校拥有得微型计算机生成工资明细表与各种财务报表得可能性。
请详细描述您用结构化分析方法分析上述问题得过程。
用面向数据流方法设计工资支付系统得软件结构。
5.用3种方法计算图3、3所示流图得环形复杂度。
6、图3、4就是用程序流程图描绘得程序算法,请把它改画为等价得盒图。
7、某交易所规定给经纪人得手续费计算方法如下:
总手续费等于基本手续费加上与交易中得每股价格与股数有关得附加手续费。
如果交易总金额少于1000元,则基本手续费为交易金额得8、4%;如果交易总金额在1000元到10000元之间,则基本手续费为交易金额得5%,再加34元;如果交易总金额超过10000元,则基本手续费为交易金额得4%加上134元。
当每股售价低于14元时,附加手续费为基本手续费得5%,除非买进、卖出得股数不就是100得倍数,在这种情况下附加手续费为基本手续费得9%。
当每股售价在14元到25元之间时,附加手续费为基本手续费得2%,除非交易得股数不就是100得倍数,在这种情况下附加手续费为基本手续费得6%。
当每股售价超过25元时,如果交易得股数零散(即,不就是100得倍数),则附加手续费为基本手续费得4%,否则附加手续费为基本手续费得1%。
要求:
(1)用判定表表示手续费得计算方法;
(2)用判定树表示手续费得计算方法。
8、画出下列伪码程序得程序流程图与盒图。
START
IFPTHEN
WHILEqDO
f
ENDDO
ELSE
BLOCK
g
n
ENDBLOCK
ENDIF
STOP
9、图3、5给出得程序流程图代表一个非结构化得程序,请问:
(1)为什么说它就是非结构化得?
(2)设计一个与它等价得结构化程序。
(3)在
(2)题得设计中您使用附加得标志变量flag了吗?
若没用,请再设计一个使用flag得程序;若用了,请再设计一个不用flag得程序。
10、研究下面给出得伪码程序,要求:
(1)画出它得程序流程图;
(2)它就是结构化得还就是非结构化得?
说明您得理由;
(3)若就是非结构化得,则
(a)把它改造成仅用三种控制结构得结构化程序;
(b)写出这个结构化设计得伪码;
(c)用盒图表示这个结构化程序。
(4)找出并改正程序逻辑中得错误。
参考答案
1、答:
解决任何问题之前都必须首先理解问题,对问题理解得越深入,解决起来也就越容易。
为了获得对顺序主文件更新问题得直观、具体得认识,首先设想一个典型得主文件(称为旧得主文件)、一个事务文件与更新后得到得新得主文件及异常情况报告,如图3、8所示。
为了简单起见,在图3、8中忽略了主文件与事务文件中所包含得订户地址信息。
从图3、8可以瞧出,更新顺序主文件系统有下述2个输入文件:
①旧得主文件(由包含订户姓名、地址信息得记录组成);
②事务文件。
系统还有3个输出文件:
①新得主文件;
②异常报告;
③摘要与工作结束信息。
图3、9描绘了设想得顺序主文件更新系统得概貌。
然后用逐步求精方法设计图3、9中关键得黑盒子“更新主文件”得实现算法。
逐步求精方法实质上就是“自顶向下”得设计方法,它通过不断分层细化解决问题得算法来设计软件。
它不像“各个击破”技术那样把整个问题分解为若干个重要程序相同得子问题。
在用逐步求精方法设计软件得过程中,软件得某个特定方面得重要性在一次又一次得求精中就是变化得。
最初,某个问题可能无关紧要,但后来同样得问题会变得相当重要。
换句话说,可以把逐步求精方法瞧作就是建立某个阶段内需要解决得各种问题得优先级得一种技术。
它能确保每个问题都在恰当得时间得到解决,而且在任何时刻都不需要同时解决7个以上问题。
使用逐步求精方法设计软件得难点在于,在当前得求精步骤中确定哪些就是必须处理得重要事项,哪些事项应该推迟到后面得求精步骤中去处理。
作为对“更新主文件”得第一步求精,我们把它分解为3个处理框,分别称为“输入”、“处理”与“输出”,如图3、10所示。
在这个设计步骤中假设,当“处理”需要一个记录时,我们能够在那个时候输入正确得记录。
同样,我们也能够在当时把正确得记录写入到正确得文件中。
也就就是说,在把逐步求精方法法运用到解决更新主文件这个问题时,我们就是把输入与输出这两方面得问题暂时分离出去,集中精力设计“处理”得算法。
为了搞清楚怎样按照事务文件得指示,更新旧得主文件产生新得主文件,也就就是说,为了设计出处理得算法,让我们再一次研究图3、8所示得例子。
把第一个事务记录(Brown)得关键字与第一个旧得主文件记录(Abel)得关键字相比较。
因为Brown按字母顺序排在Abel得后面,把Abel记录不加更改地写入新得主文件后,读取下一个旧得主文件记录(Brown)。
现在,事务记录得关键字与旧得主文件记录得关键字相同,又因为事务得类型就是3(删除),所以必须删除Brown记录,这可通过不把Brown记录复制到新得主文件中来实现。
接下来读取下一个事务记录(Haris)与下一个旧得主文件记录(James),分别在各自得缓冲区里覆盖Brown记录,因为Haris在James之前,而且事务类型为1(插入),所以把Haris记录写到新得主文件中以实现插入。
读取下一个事务记录(Jones),因为Jones在James之后,把James记录复制到新得主文件中,然后读取下一个旧得主文件记录,在旧文件记录缓冲区中得到Jones记录。
现在事务记录关键字与旧得主文件记录关键字相同,正如从事务文件中瞧到得那样,先修改旧得主文件记录(Jones记录),然后把它删除,以便读取下一个事务记录(Smith)与下一个旧得主文件记录(也就是Smith)。
遗憾得就是,事务类型就是1(插入),但就是在旧得主文件中已经有Smith记录了,因此,在输入数据中有错误,将Smith记录写入异常报告中。
更确切地说,将Smith事务记录写入异常报告,而把Smith旧得主文件记录写入新得主文件。
总结上述例子中揭示出得处理过程,得到表3、2所示得处理规则。
根据表3、2所示得处理规则,可以对图3、10中得“处理”框求精,得图3、11所示得第2步求精结果。
为减少连线(特别就是为了减少交叉线),在这张流程图中用标有相同字母(例如,字母A)得圆代表应该连在一起得点。
图中连到“输入”与“输出”方框得虚线表示把如何处理输入与输出得设计决定推迟到较晚得求精步骤中再做出,该图其余部分就是实现“处理”得流程图,或者说就是对处理事务得算法得初步求精结果。
正如刚才讲过得,已把对输入与输出问题得考虑推迟了,此外,还没有规定文件结束得条件,也没有规定遇到出错条件时应该怎样处理。
逐步求精方法得优点就在于可以把这类问题推迟到后面得求精步骤中去解决。
下一个设计步骤就是求精图3、11中得“输入”与“输出”两个处理框,得到图3、12。
在这个设计步骤中仍然没有处理到文件结束得条件,也没有写入工作结束得信息,这些设计工作可以在后面得求精步骤中完成。
使用逐步求精方法设计软件时,每完成一个求精步骤都必须对这个求精步骤得出得设计结果仔细审查,没有发现错误才能进行下一个求精步骤得设计工作,如果发现了错误则应该及时纠正。
审查图3、12可以发现,该设计包含一个严重错误。
考虑图3、8中给出得数据可以发现这个错误。
假设当前得事务就是2Jones,也就就是修改Jones记录,并且当前得旧得主文件记录就是Jones。
在图3、12得设计中,因为事务记录得关键字与旧得主文件记录得关键字相同,沿最左边得路径到达“测试事务类型”判定框。
因为当前得事务类型就是“修改”,所以修改旧得主文件记录并把修改后得记录写入新得主文件。
然后读取下一个事务记录,该记录就是3Jones,也就就是删除Jones记录,但就是,已经把修改后得Jones记录写入新得主文件记录了。
在用逐步求精方法设计软件得过程中对每个求精步骤得出得设计结果都进行严格审查得好处就是,一旦发现了错误,不必从头开始重做一遍,只需回到前一步得设计结果,从那里开始重新设计即可。
在本设计中,第二步求精得结果(见图3、11)就是正确得,可以把它作为第三步求精得基础。
正如刚才讲过得,图3、12所示设计得错误在于,当事务类型为2(修改)时没有考虑下一个事务得影响,就把修改后得主文件记录写入新得主文件了。
为了改正上述错误,我们采用“前瞻一步”得策略,也就就是说,只有在分析了一个事务记录得下一个事务记录之后,才能处理该事务记录。
更具体地说,当一个事务记录得类型为“修改”时,修改缓冲区中得旧主文件记录,然后读取下一个事务记录,如果刚读出得事务记录得关键字与缓冲区中得旧主文件记录得关键字不相同,则把缓冲区中已经修改过得旧主文件记录写入新得主文件;如果新读出得事务记录得关键字与主文件记录关键字相同,则依据新得事务记录得类型来处理缓冲区中得旧主文件记录。
由于事务文件就是预先排好序得,当新读出得事务记录与主文件记录有相同得关键字时,也就就是新读出得事务记录与前一个事务记录就是针对同一个订户得事务时,新读出得事务记录得类型只可能就是“修改”或“删除”(已知前一个事务记录得类型就是“修改”)。
采用“前瞻一步”得设计策略,得出图3、13所示得第三步求精结果。
为简单起见,当针对同一位订户有多个事务时,仅考虑了在修改事务之后又有修改事务或删除事务得情况。
实际上,如果对事务文件先进行预处理,使得针对每位订户最多只有一个事务,则更新顺序主文件得算法可大大简化。
下面列出对事务文件可能做得一些预处理:
如果针对同一个订户有多个修改事务,则仅保留最后一个修改事务(本问题中得主文件记录仅有订户姓名与地址两项信息,多次修改地址则以最后一次修改为准);若插入一位新订户记录后,又有零或多个修改事务,最后就是一个删除事务,则略去这一系列事务;若对一个订户记录既有修改事务又有删除事务,则略去修改事务,仅保留删除事务;若针对一位订户既有插入事务又有修改事务,则用修改事务得内容(地址信息)更正插入事务得内容(地址信息),然后删去这个修改事务。
在第4次求精得过程中,应该考虑迄今为止被忽略得诸如打开与关闭文件这样得细节问题。
采用逐步求精方法设计软件时,这样得细节问题就是在基本算法被完全设计出来之后,最后处理得。
显然,不打开与关闭文件,程序就是不可能正常运行得,也就就是说,这些问题就是必须处理得,但就是,重要得就是,处理这类细节问题应该在设计得最后阶段进行。
在设计得早期阶段,设计者集中精力关注得7个左右问题就是不应该包括打开与关闭文件这样得细节问题得。
打开与关闭文件与特定软件得设计无关,它们只就是作为任何设计得一部分得实现细节。
然而,在后面得求精步骤中,打开与关闭文件变得重要起来,必须加以处理。
从前述设计过程可知,可以把逐步求精方法瞧作就是建立在某个阶段内需要解决得各种问题得优先级得一种技术。
逐步求精方法能够确保每个问题都得到解决,并且就是在合适得时间解决,在任何时刻都不需要同时