列表

详情


阅读下列 C 程序,回答问题 1 至问题 3,将解答填入答题纸的对应栏内。
【C程序】
Int DoString(char*string){
  char   *argv[100];
  Int     argc=1; 
  while(1) {                                                                                //1
     while(*string&& *string!='-')                                                  //2,3
         String++;                                                                         //4
     if(!*string)                                                                            //5
         break;                                                                             //6
     argv[argc]=string;               
     while(*string && *string!="&& *string!='\n'&& *string!= '\t')   //7,8,9,10
       string++;                                                                          //11
    argc++;                                                                                 //12
  }
  return 0;                                                                                 //13

【问题1】
请针对上述C程序给出满足100%DC(判定覆盖)所需的逻辑条件。
【问题2】
请画出上述程序的控制流图,并计算其控制流图的环路复杂度V(G)。
【问题3】
请给出问题2中控制流图的线性无关路径。

参考答案: 【问题1】(3分)
*string && * String !=’-’   ;
!*string && * String =’-’  (或者是判定结果出现真假的等价答案)
!*String              ;
*String
*string && * String !=’ ’ &&*String !=’\n’ && *String!=’\t’  ;
!*string && * String =’ ’ &&*String =’\n’ && *String=’\t’ (或者是判定结果出现真假的等价答案)
 【问题2】(8分)

V(g)=8
【问题3】(4分)
1、2、5、6、13.
1、2、3、5、6、13
1、2、3、4、2、5、6、13
1、2、5、7、12、1. . .
1、2、5、7、8、12、1. . .
1、2、5、7、8、9、12、1. . .
1、2、5、7、8、9、10、12、1. . .
1、2、5、7、8、9、10、11、7、12、1. . .

详细解析:

【问题1】 
需要找出判定覆盖所需的逻辑条件,这种主要从两种结构中查找,即条件结构和循环结构。
题干代码中有条件为:
while(*string&& *string!='-') ;if(!*string)   ;while(*string && *string!="&& *string!='\n'&& *string!= '\t')
满足问题1要求的条件为括号中的代码。即参考答案中的代码段。
【问题2】  
需要绘制控制流图,此题代码中有多个循环,所以在绘制控制流图的时候,要注意走向,对于循环来说,真假都是从开始结点出发,只是若循环条件为真,则执行循环体,若循环条件为假,则结束循环,执行循环后面的代码。
控制流图的效果图为参考答案中的图例。环路复杂度为8,可以数结点数和边数,通过公式边数-结点数+2求得;也可以数区域数,数区域数记得是封闭的区域数+1。
【问题3】  
列出线性无关路径:
此题能回答正确的关键在于问题2的控制流图是否画对。线性无关路径即不走与之前完全重复的路径。也就是走之前至少有一条没有走过的路径。

上一题