10 KiB
4.0 流程图的画法与读法
一、这节课到底学什么?
很多同学觉得流程图难,不是因为图形多,而是因为总会犯下面几种错:
- 只盯着框看,不顺着箭头走。
- 只看条件,不看两条分支分别去哪。
- 看到回头箭头,没有意识到这是一段循环。
- 自己画图时,漏了初始化、漏了结束、漏了更新变量。
所以这份讲义不走“纯概念说明”路线,而是直接看图、读图、再学怎么手绘。
二、先看一张图,认识流程图里最常见的 4 种框
flowchart LR
A([开始]) --> B[/输入一个数 n/]
B --> C[把 n 加 1]
C --> D{n 是偶数吗?}
D -- 是 --> E[/输出 偶数/]
D -- 否 --> F[/输出 奇数/]
E --> G([结束])
F --> G
这张图先不用细抠题意,只要认识图形就行:
- 圆角框:开始、结束。
- 平行四边形:输入、输出。
- 长方形:处理步骤,也就是“做一件事”。
- 菱形:判断,要从这里分路。
你可以先把流程图想成“做事路线图”:
- 框,表示现在做什么。
- 箭头,表示下一步去哪。
读流程图时,真正重要的不是图画得漂不漂亮,而是你能不能顺着箭头走清楚。
三、示范 1:最基础的单判断流程图
题目:输入一个整数,判断它是偶数还是奇数。
flowchart TD
A([开始]) --> B[/输入 n/]
B --> C{n 能被 2 整除吗?}
C -- 是 --> D[/输出 偶数/]
C -- 否 --> E[/输出 奇数/]
D --> F([结束])
E --> F
读这张图时,顺序应该这样说:
- 从“开始”出发。
- 输入一个整数 n。
- 判断 n 能不能被 2 整除。
- 如果能,就输出“偶数”。
- 如果不能,就输出“奇数”。
- 结束。
这类图最容易错的地方只有一个:
判断框一定要看两条路,不能只看条件本身。
也就是说,你看到菱形时,要同时问自己两句:
- 条件成立,往哪走?
- 条件不成立,往哪走?
四、示范 2:看到回头箭头,就要想到“循环”
题目:输入 n,求 1 到 n 的和。
flowchart TD
A([开始]) --> B[/输入 n/]
B --> C[sum = 0, i = 1]
C --> D{i 还没超过 n 吗?}
D -- 否 --> E[/输出 sum/]
E --> F([结束])
D -- 是 --> G[sum = sum + i]
G --> H[i = i + 1]
H --> D
这张图里,最关键的是最后那条回头箭头:
- 它从后面回到了前面的判断框。
- 这说明有一段步骤要重复做。
- 这就是循环。
拿一组小数据,顺着图走一遍
设 n = 4。
| 现在的 i | 做完以后 sum | 接下来去哪? |
|---|---|---|
| 1 | 1 | i 变成 2,回去继续判断 |
| 2 | 3 | i 变成 3,回去继续判断 |
| 3 | 6 | i 变成 4,回去继续判断 |
| 4 | 10 | i 变成 5,回去继续判断 |
| 5 | 不再累加 | 因为 5 已经超过 4,所以输出 10 |
这就是读流程图最稳的方法:
如果看图有点晕,就拿一组很小的数据,自己沿着箭头走一遍。
五、示范 3:有些流程会“提前停止”
题目:从 1 开始往上加,如果和第一次超过 20,就立刻输出并结束。
flowchart TD
A([开始]) --> B[/输入 n/]
B --> C[sum = 0, i = 1]
C --> D{i 还没超过 n 吗?}
D -- 否 --> E[/输出 sum/]
E --> F([结束])
D -- 是 --> G[sum = sum + i]
G --> H{sum 已经大于 20 吗?}
H -- 是 --> E
H -- 否 --> I[i = i + 1]
I --> D
这张图比上一张多了一个判断框。
它告诉你:
- 有时候流程不一定走到最下面才结束。
- 只要中途满足条件,就可以直接输出并结束。
为什么这类图容易读错?
因为很多同学会下意识地认为:
“图上有的步骤,都会执行。”
其实不是。
真正正确的想法是:
只有你顺着箭头真的能走到那一步,那一步才会执行。
比如 n = 10:
- 1 + 2 + 3 + 4 + 5 = 15。
- 再加 6,sum 变成 21。
- 这时已经大于 20,所以直接结束。
- 后面的 7、8、9、10 根本不会再处理。
六、示范 4:双重循环最容易把人绕晕
题目:老师给你一张 3 行 4 列的表,从左到右、从上到下寻找第一个 0,找到就立刻输出它的位置。
flowchart TD
A([开始]) --> B[row = 1]
B --> C{row 还在第 1 到第 3 行吗?}
C -- 否 --> D[/输出 没找到/]
D --> E([结束])
C -- 是 --> F[col = 1]
F --> G{col 还在第 1 到第 4 列吗?}
G -- 否 --> H[row = row + 1]
H --> C
G -- 是 --> I[/读当前位置的数 x/]
I --> J{x 是 0 吗?}
J -- 是 --> K[/输出 row 和 col/]
K --> E
J -- 否 --> L[col = col + 1]
L --> G
这一张图里,其实有两层重复:
- 外层:一行一行看。
- 内层:每一行里,一列一列看。
读双重循环时,一定要问清楚:
- 现在正在动的是哪一个变量?
- 这一条回边,是回到内层判断,还是回到外层判断?
- 找到答案以后,是结束一层,还是结束全部?
这题里有两种“结束”意思完全不同
第一种:一整行看完了。
- 这不是整张图结束。
- 只是 col 走完了。
- 所以下一步是 row 加 1,去下一行。
第二种:已经找到第一个 0。
- 这不是只结束当前一行。
- 而是整个过程直接输出并结束。
双重循环最容易错的地方,不是看不见箭头,而是分不清“结束一层”和“结束全部”。
七、示范 5:分支、循环、提前结束放在同一张图里
题目:输入 n,求 1 到 n 中所有 3 的倍数之和;如果和第一次超过 100,就立刻停止并输出。
flowchart TD
A([开始]) --> B[/输入 n/]
B --> C[sum = 0, i = 1]
C --> D{i 还没超过 n 吗?}
D -- 否 --> E[/输出 sum/]
E --> F([结束])
D -- 是 --> G{i 是 3 的倍数吗?}
G -- 是 --> H[sum = sum + i]
G -- 否 --> I[i = i + 1]
H --> J{sum 已经大于 100 吗?}
J -- 是 --> E
J -- 否 --> I
I --> D
这张图值得你重点观察 3 个地方:
- 外面有一个循环,因为最后会回到“i 还没超过 n 吗”。
- 中间有一个分支,因为要判断 i 是不是 3 的倍数。
- 还有一个提前结束,因为 sum 超过 100 时可以直接停。
如果你能把这张图读顺,说明你已经不是只会看“最基础单流程”了。
八、自己手绘流程图,应该怎么下笔?
看到题目以后,不要一上来就急着画框。
更稳的顺序是下面这 6 步:
第 1 步:先把做法写成人话
例如:
- 输入 n。
- 令 sum = 0,i = 1。
- 如果 i 已经超过 n,就输出 sum。
- 如果 i 是 3 的倍数,就把它加到 sum 里。
- 如果 sum 已经超过 100,就输出 sum。
- 否则 i 加 1,再继续。
如果这几句话都说不顺,流程图通常也画不顺。
第 2 步:先找变量
最常见的几类变量是:
- 输入变量:题目给你的数。
- 循环变量:决定“做到第几个”的变量。
- 结果变量:最后要输出的量。
- 标记变量:比如“是否找到”。
第 3 步:先搭大骨架
很多流程图,骨架其实都差不多:
开始 → 输入 → 初始化 → 判断 → 处理 → 更新 → 回到判断 → 输出 → 结束
先把主干摆出来,再补细节,图就不会乱。
第 4 步:每个判断框都要有两条路
判断框不能只画一条路。
你必须写清楚:
- 是,去哪。
- 否,去哪。
第 5 步:循环的回边,通常回到判断框
很多同学会把箭头直接接回处理中间某一步,这很容易画错。
更常见、更稳的画法是:
- 处理完一轮。
- 更新变量。
- 回到“是否继续”的判断框。
第 6 步:画完以后,用小数据手推
这一招非常重要。
你可以拿最小的几组数据来试:
- n = 1 会怎样?
- n = 0 会怎样?
- 第一次就满足结束条件会怎样?
如果你自己都推不顺,说明图还得改。
九、手绘时最容易犯的错误
下面这些错,课堂上特别常见:
- 漏掉开始和结束。
- 忘了初始化变量。
- 判断框只画出一条路。
- 循环变量没有更新,结果图会一直转圈。
- 回边接错位置,没有回到判断框。
- 双重循环里,没有分清是结束一层还是结束全部。
- 一个框里塞太多话,别人读不清楚。
- 箭头方向不清,让人只能靠猜。
十、画完之后,按这张检查单自查
- 有没有明确的开始和结束?
- 输入和输出有没有写清楚?
- 初始化有没有漏掉?
- 每个判断框是不是都有两条路?
- 每个循环变量有没有更新?
- 回头箭头是不是回到了合适的位置?
- 如果有提前停止,是不是画清楚了?
- 如果有双重循环,是不是分清了结束一层和结束全部?
- 能不能拿一组小数据,从头走到尾?
只要这 9 条都能过,这张图一般就比较靠谱了。
十一、课堂练习
下面 3 题,不要求你写代码,先试着手绘流程图:
练习 1
输入 n,输出 1 到 n 中偶数的个数。
练习 2
从左到右读一串数,遇到 0 就停止,输出前面所有数的和。
练习 3
读一个 3 行 4 列的表,找到第一个大于 100 的数,输出它的位置;如果没有找到,就输出“没有”。
做这 3 题时,请先写“人话步骤”,再画图。
十二、这一节最该记住的几句话
- 流程图不是背图形,而是按顺序表达做事步骤。
- 读图时,最重要的是顺着箭头走。
- 看到菱形,就要同时看“是”和“否”两条路。
- 看到回头箭头,通常就要想到循环。
- 不是图上写了什么都会执行,要看箭头能不能真的走到那一步。
- 画图前先把步骤说清楚,画完后再拿小数据手推。
如果你能做到这 6 条,流程图这一关就算真正入门了。