程序流程图怎么画?标准符号与三种基本结构

程序流程图扣分最多的不是画得丑,是判断框只有一个出口、循环回连线接错位置、处理框里塞了半段代码。本文讲清国标符号的准确用法、顺序选择循环三种基本结构,以及代码转流程图的对照规则。

程序流程图示例

程序流程图是用标准符号把一段程序的执行逻辑画出来的图,横竖三件事:算什么、在哪儿分岔、哪儿要绕回去。

它和业务流程图看着像,规矩却严得多——符号由国家标准规定,判断框必须两个出口,循环必须回连到确定位置。考试扣分和评审被打回,几乎都出在这些硬规矩上,不是画得好不好看。

一、和业务流程图不是一回事

程序流程图 业务流程图
描述对象 一段程序或算法的执行逻辑 一项业务的办理过程
符号 国标 GB/T 1526(等同 ISO 5807) 约定俗成,可自定义
判断框出口 必须恰好两个 可以多路分支
典型场景 算法说明、课程设计、软考、二级 审批流、报销流、办理流程

最实质的区别是自由度。 业务流程图里加个自定义图形、让判断分出三条路,通常没人计较;程序流程图不行。要画部门之间怎么流转,那该看流程图怎么画,本文的规矩对你过严了。

二、六个标准符号

符号 形状 用途 出入口
起止框 圆角矩形或椭圆 程序的开始和结束 开始只出,结束只入
处理框 矩形 赋值、计算等动作 1 入 1 出
判断框 菱形 条件判断 1 入 2 出
输入输出框 平行四边形 读入数据、输出结果 1 入 1 出
预定义处理 双竖边矩形 调用子程序或已有函数 1 入 1 出
连接符 小圆圈,内标字母 跨页续接流程线 成对出现

再加上流程线——带箭头的直线。三个最常见的错误:

  • 用矩形当判断框。条件判断必须用菱形,写成 if x > 0 塞进矩形不算
  • 判断框只引出一条线。菱形必须两个出口且都标注"是/否"。只画满足条件的那条路等于没写 else
  • 输入输出用了处理框。scanf / print / 读文件用平行四边形,计算和赋值才用矩形

还有一条常被忽略的规矩:一张图只能有一个"开始",但可以有多个"结束"。多个入口是逻辑错误,多个出口不是。

三、三种基本结构

结构化程序设计的结论是:任何程序都能由三种基本结构组合而成。图的合法性就是看能不能拆成这三种结构的嵌套。

流程结构示例

顺序结构——处理框自上而下串联,没有分岔。

选择结构——一个判断框引出两条路,在下方汇合再继续往下。双分支对应 if-else;单分支是一条路有处理、另一条空着直接到汇合点;多分支(switch-case)的标准画法是多个判断框串联,而不是从一个菱形引出四五条线。

循环结构——判断框的一个出口经过若干处理后,用流程线回连到确定位置。分两种:

当型循环(while 型、前测试)先判断后执行,条件一开始不成立就一次都不执行,判断框在循环体上方;直到型循环(until 型、后测试、do-while)先执行一次再判断,最少执行一次,判断框在循环体下方。

"最少执行几次"是两者唯一实质的区别,也是考试最爱考的点。 写代码时随手就选了,画图时必须明确表达。

四、从代码到流程图的对照规则

代码结构和图形结构一一对应:

代码 图形
scanf() / input() / print() 输入输出框
if (cond) { A } 判断框,"是"走 A,"否"直接到汇合点
if (cond) { A } else { B } 判断框两个出口分别走 A 和 B,下方汇合
while (cond) { A } 判断框在上,末尾回连到判断框上方
do { A } while (cond); A 在上,判断框在下,"是"回连到 A 上方
for (i=0; i<n; i++) { A } 拆成三块:i=0 处理框、i<n 判断框、A 加 i++ 循环体

for 循环最容易画错。 代码里是一行,图里必须拆成三部分:初始化在循环之前,条件判断在循环顶部,自增在循环体末尾。i++ 漏掉或放错位置,图上就是死循环。

五、先定粒度,再动笔

同一段代码可粗可细,粒度选错图就废了。依据是"这张图给谁看":

  • 讲算法思路——粗粒度。一个处理框对应一个逻辑步骤
  • 课程设计、软考、二级考试——中粒度。每个框对应一到两条语句,判断条件写成可执行表达式(i < n 而不是"还没遍历完")
  • 代码评审、交接文档——按函数粒度。一个函数一个预定义处理框,细节留在子图里

自查标准:一张图控制在 15 到 20 个框以内。超过就把一段逻辑收成预定义处理框,另开子图展开。硬塞在一张图里流程线会交叉,一多就没人读得下去。

六、循环回连线怎么画不容易错

循环是唯一需要"往回画"的地方,线最容易乱:

第一,回连线走图形外侧,不穿过任何框。 三段折线:从循环体末尾横向拉出,竖直向上,水平接回,不走斜线。

第二,回连点必须明确。 当型回到判断框的上方入口,直到型回到循环体第一个框上方。接到判断框侧面,会看不出这是循环还是分支。

第三,continue 和 break 方向相反。 continue 回连到循环体开头或判断框,break 是跳出循环、连到循环结构汇合点之后。画反逻辑就全错。

三层以上嵌套时回连线必然交叉,不要硬画——用连接符在断点和续接处画一对同字母小圆圈,或把内层循环抽成子程序。

七、七个高频扣分点

  • 判断框只有一个出口——必须两个,且都标注是/否
  • 判断条件写成自然语言——写"数据合法吗"不如写 x >= 0 && x <= 100
  • 处理框里塞了三行代码——一个框一件事,多了就拆
  • 流程线没有箭头——所有流程线必须带箭头,即使方向"显而易见"
  • 分支不汇合就各自接结束框——后面还有逻辑的,必须先汇合再往下
  • for 循环漏掉自增——i++ 必须作为处理框出现在循环体末尾
  • 开始框有入口、结束框有出口——开始只能出,结束只能进

八、N-S 图和 PAD 图:什么时候换一种画法

程序流程图有个先天问题:流程线可以随便连,所以画得出非结构化的程序。为此出现过两种替代画法:

  • N-S 图(盒图)——取消流程线,用嵌套矩形块表示结构,物理上就画不出跳转
  • PAD 图——二维树形结构,从左向右展开层次,纵向表示顺序,适合深度嵌套

逻辑清晰、嵌套不深用程序流程图;要强制检查结构化程度用 N-S 图;教学和逐步求精用 PAD 图。实际工作中程序流程图仍是默认选择,门槛最低。

九、从伪代码快速出图

手工拖拽很慢——加一个判断框,下面所有图形都要往下挪。更快的是先用文本描述结构,再转成图。Mermaid 的 flowchart 语法可以直接表达:

flowchart TD
    S([开始]) --> I[/输入 n/]
    I --> A["i = 1, sum = 0"]
    A --> C{i <= n?}
    C -- 是 --> B["sum = sum + i"]
    B --> D["i = i + 1"]
    D --> C
    C -- 否 --> O[/输出 sum/]
    O --> E([结束])

形状语法:([文字]) 圆角起止框,[文字] 处理框,{文字} 判断框,[/文字/] 输入输出框。D --> C 就是循环的回连线。

可编辑画布上的图形编辑

文本语法改得快、能进版本管理,缺点是版式不可控。所以常见做法是两步走:用文本把逻辑写对,再导入画布调布局。英飞·思想家支持把 Mermaid 代码转成可编辑图形,每个框都能单独拖动、改大小和配色,见Mermaid 转图表。

纸上的草稿可以拍照后用手绘转图表数字化;要表达模块之间的调用往来而非单段逻辑,那该换成时序图。

常见问题

程序流程图和业务流程图有什么区别?

程序流程图描述一段程序的执行逻辑,符号由国标 GB/T 1526 约定,判断框恰好两个出口;业务流程图描述业务办理过程,符号约定俗成,允许多路分支,通常体现部门或岗位。

判断框可以有三个出口吗?

不可以,标准判断框是一进两出。多分支(switch-case)的正确画法是多个判断框串联。

当型循环和直到型循环怎么区分?

当型(while)先判断后执行,条件一开始不成立就一次都不执行;直到型(do-while)先执行一次再判断,最少执行一次。

for 循环怎么画成流程图?

拆成三部分:初始化画成循环之前的独立处理框,条件判断画成循环顶部的判断框,自增画成循环体末尾的处理框。漏掉自增就是死循环。

一张程序流程图画多少个框合适?

15 到 20 个以内。超过就把一段逻辑收成预定义处理框,另开子图展开。框太多流程线会交叉,图就读不下去。

结语

程序流程图的规矩比业务流程图严,但也就几条:符号按国标用、判断框两个出口、三种基本结构不许破、分支必须汇合、循环回连点要明确。守住这五条,图就是对的。

画之前先定粒度——给谁看决定了一个框该装多少内容。先用文本把逻辑写通,再进画布调版式,比一开始拖图形省下大量返工。

英飞·思想家

让想法,立刻成形

集无限画布、AI创作、流程图、思维导图、音视频会议与智能体工作流编排于一体

相关文章

查看更多
程序流程图怎么画:标准符号与三种基本结构 | 英飞思想家