考虑以下 C 程序段。
while (first <= last)
{
if (array [middle] < search)
first = middle +1;
else if (array [middle] == search)
found = True;
else last = middle – 1;
middle = (first + last)/2;
}
if (first < last) not Present = True;
程序段的圈复杂度为 __________。
(一) 3
(乙) 4
(三) 5
(四) 6答案: (C)
解释:结构化程序[a]的圈复杂度是参考程序的控制流图定义的,一个包含程序基本块的有向图,如果控制可以从第一个通过,则在两个基本块之间有一条边到第二。复杂度 M 定义为
M = E − N + 2P,
where
E = the number of edges of the graph.
N = the number of nodes of the graph.
P = the number of connected components.
来源:http://en.wikipedia.org/wiki/Cyclomatic_complexity
对于单个程序(或子程序或方法),P 始终等于 1。因此,单个子程序的一个更简单的公式是
M = E − N + 2
对于给定的程序,控制流图为:
E = 13, N = 10.
Therefore, E - N + 2 = 5.
这个问题的测验