图5是用程序流程图 描绘的程序算法,请把它改为 等价的盒图。
a b x1 x2 x5 c f x6Biblioteka x3x4d
e x8 j
g
h
i
x7
答:分析图5可以看出,该处理过程由顺序执行的3个程序块组成:首先执行a, 然后执行一个Do-UNTIL型循环,最后执行处理j。 DO-UNTIL型循环的循环体是处理b和一个IF-THEN-ELSE型分支结构,循环 结束条件为X8。其中,IF-THEN-ELSE型分支结构;ELSE部分是一个CASE型 多分支结构。。。。。 一层一层的分析下去,可以画出如图6所示的与图5等价的盒图。 a b x1 Case xi i=2,3,4 x2 x5 d c x8 j e h x7 x3 x4 g
Flag=TRUE
P AND flag g F T F
Flag=FA f LSE
Flag=TRUE
F p g p T g
T
flag=FALSE
(NOT p)OR(NOT q)
(NOT q)OR(NOT flag) (b) 图2
(a)
图3
用三种方法计算图4所示流图的环形复杂度。
a 1 2 e f g h b 3 4 c d
5
图4 一个程序的流图
(1)环形复杂度等于流图中的区域数 图4所示流图共有5个区域,因此它的环形复杂度等于5。 图5用数字标注出该流图中的区域,其中区域1为图的外部区域。
(2)环形复杂度等于流图中边的条数减去结点数 之后再加2,图4所示流图共有11条边,8个结点, 所以它的环形复杂度为 11-8+2=5 (3)环形复杂度等于程序中的判断数加1 流图中有2条输出弧的结点(c,f)对应于程序中的1 个判断,有n条(n>2)条输出弧的结点(a)对 应于程序中的n-1个判断。因此图4所示流图的环 形复杂度为 2*1+1*(3-1)+1=5