📜  门| GATE-CS-2015(套装1)|第 65 题

📅  最后修改于: 2021-09-26 04:42:53             🧑  作者: Mango

考虑以下 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 

对于给定的程序,控制流图为:

q100

E = 13, N = 10.

Therefore, E - N + 2 = 5. 

这个问题的测验