软件工程参考解答点滴.docx
参照答案1 .假设只有SEQUENCE和DO_WHILE两种控制构造,怎样运用它们完毕IF_THEN_ELSE操作?答:转化如下:K=1DOWHILE(条件.AND.K.EQ.1)程序块1K=K+1ENDDODOWHILE(.NOT.条件).AND.K.EQ.1)程序块2K=K+1ENDDO2 .假设容许使用SEQUENCE和IF_THEN_ELSE两种控制构造,怎样运用它们完毕DO_WHILE操作?答:转化如下;label:IF(条件)THEN程序块GOTOlabelELSE程序块ENDIF3 .画出下列伪码程序的程序流程图和盒图:STARTIFpTHENWHILEqDOfENDDOELSEBLOCKgnENDBLOCKENDIFSTOP答:(1)流程图如图6T所示:图6-1从伪码变成的程序流程图(2)该程序H勺盒图如图6-2所示:图6-2从伪码变成的程序盒图4 .下图给出的程序流程图代表一种非构造化的程序,请问:(1)为何说它是非构造化的?(2)设计一种等价的构造化程序。(3)在(2)题的设计中你使用附加的标志变量Oag吗?若没用,请再设计一种使用11ag的程序;若用了,再设计一种不用Hag的程序。答:(1)一般所说的构造化程序,是按照狭义的构造程序H勺定义衡量,符合定义规定的程序。图示的程序的循环控制构造有两个出口,显然不符合狭义的构造程序H勺定义,因此是非构造化的程序。(2)使用附加的标志变量flag,至少有两种措施可以把该程序改造为等价的构造化程序,(NOTq)OR(NOTflag)(b)解法2图6-3与该图等价IT、J构造化程序(用flag)(3)不使用Hag把该程序改造为等价的构造化程序的措施如图6-4所示。.研究下面的伪代码程序:1.OOP:SetIto(START+FINISH)2IfTABLE(I)=ITEMgotoFOUNDIfTABLE(I)<ITEMSetSTARTto(I+l)IfTABLE(I)MTEMSetFINISHto(I-I)If(FINISH-START)>1gotoLOOPIfTABLE(START)=ITEMgotoFOUNDIfTABLE(FINISH)=ITEMgotoFOUNDSetFLAGto0GotoDONEFOUND:SetFLAGto1DONEjExit(1)画出程序流程图。(2)程序是构造化吗?阐明理由。(3)若程序是非构造化的,设计一种等价的构造化程序并且画出流程图。(4)此程序的功能是什么?它完毕预定功能有什么隐含的前提条件。答:(1)该程序流程图如下:(2)该程序不是构造化口勺,构造化的程序只有一种入口和一种出口,而该程序的流程途中有两个出口。(3)等价的构造化程序的流程图如下:(4)此程序有二分查找的功能,它完毕预定功能的隐含前提条件是既有序列为从小到大次序排好口勺有序序列。5 .用AShCrofLManna技术可以将非构造化的程序转化为构造化程序,图6.19是一种转换0¾例子。(1)能否从这个例子总结出Ashcroft-Manna技术的某些基本措施?深入简化6.19(b)给出的构造化设计。答:(1)从这个例子中看出,AshcroftJIanna技术的J基本措施是,当待改造的序具有嵌套的非构造化的IF语句时,改造后的程序中增长Do-CASE语句和DOUN11L语句,并增长一种辅助变量I,1的初始值为1。最外层0IF语句在I=1时执行,执行完这个IF语句后把I赋值为随即应当执行的内层IF语句所对应勺CASE标号值。DO-CASE语句口勺最大分支数(可执行的最大标号值)等于IF语句的个数。当执行完最内层的JlF语句之后,把I赋值为可执行甲、J最大标号值加1,而DO-UNTIL循环的结束条件就是I等于这个值。(2)深入简化后的构造化程序的流程图如下所示。图6-5深入简化后的构造化程序7.某交易所规定给经纪人的手续费计算措施如下:总手续费等于基本手续费加上与交易中的每股价格和股数有关的附加手续费。假如交易总金额少于IoOo元,则基本手续费为交易金额的8.4%,假如交易总金额在IooO元到100oO元之间,则基本手续费为交易金额的5%,再加34元;假如交易总金额超过IooOO元,则基本手续费为交易金额的4%加上134元。当每股售价低于14元时,附加手续费为基本手续费的5%,除非买进、卖出的股数不是100的倍数,在这种状况下附加手续费为基本手续费的9%。当每股售价在14元到25元之间时,附加手续费为基本手续费的2%,除非交易的股数不是100的倍数,在这种状况下附加手续费为基本手续费的6%当每股售价超过25元时,假如交易的股数零碎(即,不是100的倍数),则附加手续费为基本手续费04%,否则附加手续费为基本手续费的1%。规定:(1)用鉴定表体现手续费的计算措施;(2)用鉴定树体现手续费的计算措施。答:(1)鉴定表如图6-6所示:II11'TTTTTTTTTTTTT1TTTTTTTTT11TTTFI卜TFIFTFIFIFI卜XXXXXXXXXXXXXX/元交易金颔SVl(M)OIT交易金额1000<=S<=10000交易金额>10000股价dvl4TT股价4v-dv-25股价d>25股数是100倍数TFS*8.4%*(I÷5%)XS*8.4%*(1+9%)XS*8.4%*(l÷2%)S*8.4%*(1+6%)S*8.4%*(1+4%)S*8.4%*(l÷l%)(S*5%34)(1÷5%)(S*5%-34)(l÷9%)(S5%-34)*Cl÷2%)(S*5%-34)*(1÷6%)(S*5%-34)*(1+4%)(S*5%-34)*(1÷1%)(S*4%T34)*(1÷5%)(S*4%*134)*(l÷9%)(S*4%-134)*(1÷2%)(S*4%*134)*/t-COZ、图6-6鉴定表(2)鉴定树如图6-7所示:经纪人于续费计算方法股价小于14元股数是100倍数股数不是一Kx)倍数S*8.4%*(1+5%)s8.4%*(1+9%)交易总金股数是(1÷2%)额S少J股价14到100倍数0*0.4VkT100o元25元股数不足一100倍数股数是S*8.4%*(1+6%)(1+4%)股价大于】00倍数OO./O25元股数不是一】00倍数S8.4%*<1÷1%)_股数是股价小了100倍数(S*5%+34)*(1+5%)14元_股数不是100倍数(S*5%÷34)(1+9%)额S100Oj?l100(X)7股价14到股数是_100倍数(S*5%+34)(1+2%)25元股数不是一(S*5%+34)*(1+6%)100倍数股数是股价大于100倍数(S*5%+34)(1+4%)257C股数不是100倍数(S5%+34)*(1+1%)股价小于1"般数是_100倍数(S*4%÷134)(1+5%)14元股数不是一100倍数CS*4%+I34)(1+9%)1”后尽8.画出下列伪码程序的流图,计算它的环形复杂度。你觉得这个程序的逻辑有什么问题吗?CEXAMPLE1.OOP:DOWHILEX>0A=B+1IFA>10THENX=AELSEY=ZENDIFIFY<5THENPRINTX,YELSEIFY=2THENGOTOLOOPELSEC=3ENDIFENDIFG=H+RENDDOIFF>OTHENPRINTGELSEPRINTKENDIFSTOP答:(1)该伪码的J流程图如图6-8所示:图6-8程序流程图根据该程序流程图,可得该程序流图如图6-9所示:环形复杂度V(G)二流图中的区域数二流图中鉴定结点数目+1=5+1=6(2)该算法问题在于控制最外层循环H勺变量Z不仅没有通过初始化,并且在该循环内部没有任何有也许该变Z的语句。因此,该段代码中的WHILE循环部分代码要么不会执行,要么也许出现死循环。