4. 图6.18给出的程序流程图代表一个非结构化的程序,问:
(1)为什么说它是非结构化的?
答:通常所说的结构化程序,是按照狭义的结构程序的定义衡量,符合定义规定的程序,每个代码块只有一个入口和一个出口。图示的程序的循环控制结构有两个出口,显然不符合狭义的结构程序的定义,因此是非结构化的程序。
(2)设计一个等价的结构化程序。
答:使用附加的标志变量flag,至少有两种方法可以把该程序改造为等价的结构化程序,图示盒图描绘了等价的结构化程序。
(3)在(2)题的设计中使用附加的标识变量flag了吗?若没用,再设计一个使用flag的程序;若用了,再设计一个不用flag 的程序。
答:不使用flag把该程序改造为等价的结构化程序的方法如图所示。
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 FINISH to (I-1)
If (FINISH-START) > 1 goto LOOP
If TABLE(START) = ITEM goto FOUND
If TABLE(FINISH) = ITEM goto FOUND
Set FLAG to 0
Goto DONE
FOUND: Set FLAG to 1
DONE: Exit
要求:
(1)画出程序流程图。
(2)程序是结构化的吗?说明理由。
答:该程序不是结构化的,结构化的程序只有一个入口和一个出口,而该程序的流程途中有两个口。
(3)若此程序是非结构化,设计一个等价的结构化程序并画出流程图。
(4)此程序的功能是什么?它完成预定功能有什么隐含的前提条件吗?
答:此程序有二分查找的功能,它完成预定功能的隐含前提条件是现有序列为从小到大顺序排好的有序序列。
9. 把统计空格程序的Jackson 图(图6.13)该画为等价的程序流程图和盒图。
答:流程图:
盒图: