首页 > 其他分享 >软件测评师(中级)|画控制流图手把手教程

软件测评师(中级)|画控制流图手把手教程

时间:2024-04-03 16:23:56浏览次数:16  
标签:语句 代码 测评师 手把手 复杂度 控制流 循环 节点

1.控制流图概念

控制流图(Control Flow Graph, CFG)也叫控制流程图,是一个过程或程序的抽象表现,是用在编译器中的一个抽象数据结构,由编译器在内部维护,代表了一个程序执行过程中会遍历到的所有路径。它用图的形式表示一个过程内所有基本块执行的可能流向, 也能反映一个过程的实时执行过程

个人理解:代码中所有可行路径构成的有向控制流绘制的图

2.控制流图组成

2.1.控制节点:圆圈/圆圈+节点序号

2.2.控制流线:有向箭头 

3.控制流圈复杂度计算的三种方式

3.1.画出控制流图后,通过控制流线和控制节点计算:

V(G)=m-n+2
-- m为控制流线的条数
-- n为控制流节点

3.2.通过控制流图中的密封区域计算:

V(G)=A+1
-- A为密封的区域个数,1为未密封的外部区域

3.3.通过判定点的个数来计算:

V(G)=P+1
-- P为判定节点的个数 

4.常见的控制流图

 5.真题详解

5.1条件判断知识补充

考试一般考察对以上几种基础语句的组合构图,经常涉及到多种条件判断,同时也掌握对c语言基础知识的掌握程度。

5.1.1语句中常用到的判定符号

关系运算符

大于:>、大于等于:>=、等于:==、小于:<、小于等于:<=、不等于:!=

逻辑运算符

C语言中提供了三种逻辑运算符,分别是逻辑与(&&)、逻辑或(||)和逻辑非(!)。这些运算符在C语言中的使用情况和优先级如下:

  • 逻辑与(&&):当两个条件都为真时,整个表达式才为真。如果第一个条件为假,则整个表达式的结果已经确定为假,此时不会计算第二个条件。
  • 逻辑或(||):当两个条件中至少有一个为真时,整个表达式就为真。只有当两个条件都为假时,整个表达式才为假。
  • 逻辑非(!):这个运算符将一个条件的结果取反。如果条件为真,则结果为假;如果条件为假,则结果为真

相关关键字

continue语句

在C语言中用于跳过当前循环中剩余的代码,直接进入下一次循环的判断条件。它的使用可以减少不必要的计算或操作,提高程序的效率。continue语句通常与for、while和do-while循环结构一起使用,可以在循环中的任何位置使用。在使用continue时,需要注意循环的条件和循环变量的更新,以避免出现死循环或逻辑错误。

for (int i = 0; i < 10; i++) {

    if (i == 7) {

        continue;  // 当i等于7时,跳过本次循环
    }
    printf("%d ", i); // i==7的时候,不打印7

}
// 输出结果:0 1 2 3 4 5 6 8 9
中断语句break关键字

是C语言中的关键字,用于跳出循环或switch语句的执行。break语句通常用于在满足某个条件时提前终止循环,或在switch语句中匹配到某个case后跳出。

for (int i = 0; i < 5; i++) {
  if (i==3) {
      break; // 跳出循环
  }
  printf("%d",i);
}
//循环外
printf("循环结束");

//输出结果:0 1 2  循环结束
switch (条件) {
  case 1:
      // 相应的代码
      break; // 跳出switch语句
  case 2:
      // 相应的代码
      break; // 跳出switch语句
  default:
      // 相应的代码
}
return关键字

在c语言中用于将函数的执行结果返回给调用函数,并终止当前函数的执行

```void peintpassage()
{
    printf("使用return\n");
    return;
    printf("本条语句不会被执行哦\n");

5.2真题画控制流图

2010年真题下午卷

 

 

 【问题1答案】程序中的逻辑判断子语句如下:

i<=k
m%i==0
i>=k+1

【问题2答案】 白盒测试用例设计方法:判定覆盖法又称为逻辑覆盖,是通过对程序逻辑结构的遍历实现程序的覆盖

【问题3答案】 

控制流程图:(条件是为了便于理解,正式作图的时候不需要标)

 

环路复杂度V(G)=控制流线-节点+2=8-6+2=4

 环路复杂度V(G)=密封区域+1=3+1=4

 

环路复杂度V(G)=判定节点数+1 =3+1=4 /通过代码看判断条件

注:环路复杂度任选一种答题即可

 

总结

  • 根据控制流图计算复杂度,如果没有代码,只有控制流图的情况下,尽可能使用【控制流线-节点+2】的方式计算V(G),这种情况一般会出现在选择题中,如果有代码没有图,可以使用【判定点+1】的方式计算V(G)
  • 画控制流图正确与否可以通过计算3种复杂度计算结果相同来校验图是否画正确
  • 本题的代码中没有给定具体的节点,那么我们可以根据判定节点画图,重点必须包含本题代码的所有判定节点路径

 2011年真题下午卷

 【问题1答案】

 【问题2答案】

解析:本题给出了画控制流图的节点数,具体可见代码中//数字,本题代码中给出了节点数为12个,这种题给了节点,那么我们做图的时候节点中需要有数字标明是几号节点

图不需要跟标准答案一致,只要保证节点和控制流线链接正确即可

 

或者

 

复杂度V(G)=6 

总结

画图技巧:分析每个判定节点可能执行的路径(为真的路径、为假的路径)有哪些,只要每个节点可能执行的路径全部分析正确,控制流图就掌握了80%,另外20%,细心一定要细心,不要把线连错啦,导致失分

【问题3答案】 

构造一个6个字符构成的字符串(设置x,y,z,u,v,w6个字符),使得每个字符覆盖一条基本路径。其中,x='r', y='f', z∈['0','9'], u<'0', v>'9'并且v!='f',w为任意,这6个字符可以任意排列。例如:mode="r0faa"

参考文档

https://blog.csdn.net/qq_44654974/article/details/106179849

https://blog.csdn.net/weixin_41162823/article/details/103385017

 

标签:语句,代码,测评师,手把手,复杂度,控制流,循环,节点
From: https://www.cnblogs.com/momo-nancy/p/18108549

相关文章

  • 20240402,<<,>>,控制流:while语句 ,for语句
    ……学很少,学很慢还是比不学强点是吧,救命昨天不是很懂<<,>>输入输出iostream,输入流istream输出流ostream,COUT,CIN,CERR,CLOG#include<iostream>intmain(){ std::cout<<"entertwonumbers:"<<std::endl; intv1=0,v2=0; std::cin>>v1......
  • 手把手教你做阅读理解题-初中中考阅读理解解题技巧009-There are many different part
    PDF格式公众号回复关键字:ZKYD009阅读理解技巧,在帮助读者有效获取和理解文本信息方面发挥着重要作用,熟练掌握如下6个技巧,可快速突破阅读理解1预览文章结构在开始深入阅读之前,快速浏览文章的标题、段落开头和结尾,可以迅速把握文章的主题、大致内容和结构标题通常能概括文章......
  • 如何修改电脑里的文件属性?手把手教你修改文件属性
    一,文件属性含义:文件属性是指将文件分为不同类型的文件,以便存放和传输,它定义了文件的某种独特性质。常见的文件属性有系统属性、隐藏属性、只读属性和归档属性。二、文件属性作用:属性是一些描述性的信息,可用来帮助您查找和整理文件。属性未包含在文件的实际内容中,而是提供了......
  • 手把手教你做阅读理解题-初中中考阅读理解解题技巧008-Where to spend the weekend
    PDF格式公众号回复关键字:ZKYD008阅读理解技巧,在帮助读者有效获取和理解文本信息方面发挥着重要作用,熟练掌握如下6个技巧,可快速突破阅读理解1预览文章结构在开始深入阅读之前,快速浏览文章的标题、段落开头和结尾,可以迅速把握文章的主题、大致内容和结构标题通常能概括文章......
  • python学习笔记——控制流
    目录1. 控制流****1.1. if-elif-else语句****1.2. 循环结构****1.2.1. for循环****1.2.2. While循环****1.2.3. 嵌套循环****1.2.4. 循环的控制****1.2.4.1. Break****1.2.4.2. Continue****1.2.5. 遍历****1.2.5.1. dict****1.2.5.1.1. 遍历key:****......
  • Visual Studio 2022的安装 - 编程手把手系列文章
          工欲善其事,必先利其器。      今天讲的是编程开发工具VisualStudio2022的安装。作为手把手系列的开始,需要先对进行编程所使用的工具进行了解。此博文从下面几个步骤入手,对VS2022这个开发工具IDE进行安装等介绍,让读者们能够从入门开始进行学习。 1......
  • 手把手教你做阅读理解题-初中中考阅读理解解题技巧007-Mapping out the future
    手把手教你做阅读理解题-初中中考阅读理解解题技巧007-MappingoutthefuturePDF格式公众号回复关键字:ZKYD007阅读理解技巧,在帮助读者有效获取和理解文本信息方面发挥着重要作用,熟练掌握如下6个技巧,可快速突破阅读理解1预览文章结构在开始深入阅读之前,快速浏览文章的标......
  • 《手把手教你》系列技巧篇(六十二)-java+ selenium自动化测试-RemoteWebDriver让你的代
    1.简介当本机上没有浏览器,需要远程调用浏览器进行自动化测试时,需要用到RemoteWebDirver。宏哥申请服务器还没有下来,也懒得自己在本地安装虚拟机,等的时间太长了于是就网上找了一个可以免费试用2天的服务器(网址:DedicatedServerHostingService|BareMetal|Varidata),注册一......
  • 《手把手教你》系列技巧篇(六十一)-java+ selenium自动化测试 - 截图三剑客 -下篇(详细教
    1.简介按照计划宏哥今天将介绍java+selenium自动化测试截图操作实现的第三种截图方法,也就是截图的第三剑客-截取某个元素(或者目标区域)的图片。在测试的过程中,有时候不需要截取整个屏幕,只需要截取某个元素(或者目标区域)的图片,今天宏哥就来讲解和分享这些内容。2. 截取某个......
  • 手把手教你做阅读理解题-初中中考阅读理解解题技巧006-Andy's South American travel
    PDF格式公众号回复关键字:ZKYD006阅读理解技巧,在帮助读者有效获取和理解文本信息方面发挥着重要作用,熟练掌握如下6个技巧,可快速突破阅读理解1预览文章结构在开始深入阅读之前,快速浏览文章的标题、段落开头和结尾,可以迅速把握文章的主题、大致内容和结构标题通常能概括文章......