1 假设只有SEQUENCE和DO-WHILE两种控制结构,怎样利用它们完成 IF THEN ELSE操作?
答:
转化如下:
K=1 DO WHILE(条件 AND K EQ 1) 程序块1 K=K+1 END DO DO WHILE((NOT 条件)AND K EQ 1) 程序块2 K=K+1 END DO
2 假设只允许使用SEQUENCE和IF-THEN-ELSE两种控制结构,怎样利用它们完成DO WHILE操作?
答:
转化如下:
label:IF(条件) THEN 程序块 GOTO label ELSE 程序块 END IF
3 画出下列伪码程序的程序流程图和盒图:
START IF p THEN WHILE q DO f END DO ELSE BLOCK g n END BLOCK END IF STOP
流程图
盒图
4 图给出的程序流程图代表一个非结构化的程序,问:
(1)为什么说它是非结构化的?
(2)设计一个等价的结构化程序。
(3)在(2)题的设计中使用附加的标志变量flag了吗?若没用,再设计一个使用flag的程序;若用了,再设计一个不用flag的程序。
答:
(1)图示的程序的循环控制结构有两个出口,显然不符合狭义的
结构程序的定义,因此是非结构化的程序。
(2)使用附加的标志变量flag,至少有两种方法可以把该程序改造为等
价的结构化程序,图6-16描绘了等价的结构化程序的盒图。
(3)不使用flag把该程序改造为等价的结构化程序的方法如图6-17所示。
5. 研究下面的伪码程序:
LOOP:Set I to(START+FINISH)/2 IF TABLE(I)=ITME goto FOUND IF TABLE(I)<ITME Set START to(I+1) IF TABLE(I)>ITME Set FINSH to (I-1) IF (FINSH-START)>1 goto LOOP IF TABLE(START)=ITEM goto FOUND IF TABLE(FINSH)=ITEM goto FOUND Set FLAG to 0 Goto DONE FOUND:Set FLAG to 1 DONE:EXIT
要求:
(1)画出程序流程图。
(2)程序是结构化的吗?说明理由。
(3)若此程序是非结构化,设计一个等价的结构化程序并画出流程图。
(4)此程序的功能是什么?它完成预定功能有什么隐含的前提条件吗?
(1)该程序流程图如图所示。
(2)该程序不是结构化的,结构化的程序只有一个入口和一个出口,而该程序的流程图中有两个出口。
(3)等价的结构化程序的流程图如图所示。
(4)此程序有二分查找的功能,它完成预定功能的隐含前提条件是现有序列为从小到大顺序排好的有序序列。
6 用Ashcroft-Manna技术可以将非结构化的程序转换为结构化程序,下图是一个转换的例子。
(1)能否从这个例子总结出Ashcroft Manna技术的一些基本方法?
(2)进一步简化图6-20(b)给出的结构化设计。
答:
(1)从这个例子中看出,Ashcroft-Manna技术的基本方法是:当待改造的程序含有嵌套的非结构化的IF语句时,改造后的程序中增加DO_CASE语句和DO_UNTIL语句,并增加一个辅助变量I,I的初始值为1。最外层的IF语句在I=1时执行,执行完这个IF语句后把I赋值为随后应该执行的内层IF语句所对应的CASE标号值。DO-CASE语句的最大分支数(可执行的最大标号值)等于IF语句的个数。当执行完最内层的IF语句之后,把I赋值为可执行的最大标号值加1,而DO-UNTIL循环的结束条件就是I等于这个值。
(2)进一步简化后的结构化程序的流程图如图所示。
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)用判定树表示手续费的计算方法。
答:令P代表交易的总金额,Q代表每股的售价,n代表交易的股数。
(1)判定表如图所示。
(2)判定树如图所示。
8 画出下列伪码程序的流图,计算它的环形复杂度。这个程序的逻辑有什么问题吗?
C EXAMPLE LOOP:DO WHILE Z>0 A=B+1; IF A>10 THEN X=A ELSE Y=Z END IF IF Y<5 THEN PRINT X,Y ELSE IF Y=2 THEN GOTO LOOP ELSE C=3 END IF END IF G=H+R END DO IF F>0 THEN PRINT G ELSE PRINT K END IF STOP
答:(1)先画出图示。
① 该伪码的流程图如图6-24所示。
② 根据该程序流程图,可得该程序流图如图6-25所示
(2)计算
环形复杂度V(G)=流图中的区域数=流图中判定结点数目+1=5+1=6
(3)分析
该算法问题在于控制最外层循环的变量Z不仅没有经过初始化,并且在该循环内部没有任何有可能改变Z的语句。因此,该段代码中的WHILE循环部分代码要么不会执行,要么可能出现死循环。
9 把统计空格程序的Jackson图(图6-26)改画为等价的程序流程图和盒图。
答:(1)等价的程序流程图如图6-27所示。
(2)等价的盒图如图6-28所示
10 人机对话由操作员信息和系统信息交替组成。假设一段对话总是由操作员信息开始以系统信息结束,用Jackson图描绘这样的人机对话过程。
答:人机对话过程如图6-29、6-30、6-31、6-32所示。