feat: 添加文档标题规范化功能和优化文档显示逻辑

This commit is contained in:
2026-04-10 18:16:03 +08:00
parent d1cd73ccdb
commit 470b6ad776
3 changed files with 780 additions and 2 deletions

View File

@@ -0,0 +1,760 @@
# 4.0 流程图的画法与读法
---
## 一、这一节要学什么?
这一节不讲编程语法,也不讲电脑里怎么画图。
这一节只做两件事:
- 学会读懂别人已经画好的流程图;
- 学会把自己的做题步骤,手绘成一张清楚的流程图。
很多同学觉得流程图“好像会看一点”,但真到题目里,还是容易出现这些问题:
- 看着箭头走着走着就乱了;
- 判断框只看条件,不看“是”和“否”分别去哪;
- 一碰到循环就分不清到底什么时候停;
- 自己画图时,框倒是画了不少,但别人根本看不懂。
所以这节课的目标很明确:
> 看到一张流程图,能按顺序说出它每一步在做什么;
> 想好一道题的做法,能把它画成一张条理清楚的手绘流程图。
只要这两件事学会了,后面的模拟题、分支题、循环题都会更容易做对。
---
## 二、先把流程图想成“做事路线图”
流程图不是图画比赛,它最重要的作用只有一个:
> 把“做题步骤”按执行顺序画出来。
你可以把它想成一张路线图。
- 框,表示“现在这一步要做什么”;
- 箭头,表示“下一步走到哪里去”。
所以读流程图时,最关键的不是“这个图形漂不漂亮”,而是:
- 现在在哪一步;
- 下一步往哪里走;
- 什么时候会换路;
- 什么时候会回头重复;
- 什么时候整个过程结束。
只要抓住这五件事,流程图就不神秘了。
---
## 三、手绘流程图常见的几种图形
流程图里最常见的图形不多,课堂上先记住下面这几种就够了。
### 1. 开始和结束
通常画成圆角框或椭圆。
里面常写:
- 开始
- 结束
它表示:
- 从哪里出发;
- 在哪里停止。
### 2. 输入和输出
通常画成平行四边形。
里面常写:
- 输入 n
- 输入 a, b
- 输出 sum
- 输出答案
它表示:
- 从外面拿数据进来;
- 把最后结果送出去。
### 3. 处理步骤
通常画成长方形。
里面常写:
- sum = 0
- i = i + 1
- cnt = cnt + 1
- 把当前数加入答案
它表示:
- 做计算;
- 改变量;
- 更新状态。
### 4. 判断条件
通常画成菱形。
里面常写:
- i <= n ?
- x == 0 ?
- sum > 100 ?
- 是否找到答案?
它表示:
- 到了一个要“分路走”的地方;
- 条件不同,走的方向不同。
### 5. 箭头
箭头很重要。
因为流程图真正表示顺序的,不是框,而是箭头。
箭头的作用是告诉你:
- 下一步去哪;
- 是继续往下;
- 还是回到前面重新做;
- 还是直接结束。
所以手绘时,箭头一定要方向明确,不能含糊。
### 6. 一个最简单的记忆法
可以记成下面四句话:
- 开始结束用圆框;
- 输入输出用斜框;
- 处理步骤用方框;
- 判断分路用菱形。
---
## 四、读流程图,先看什么,再看什么?
很多同学读流程图时,喜欢盯着某个判断框反复看,结果越看越乱。
更稳的方法是按顺序读。
### 第 1 步:先找开始和结束
先确认:
- 这张图从哪里开始;
- 最后可能从哪里结束。
如果一张图连开始和结束都找不清,后面就很容易走偏。
### 第 2 步:再找输入和输出
要先知道:
- 题目给了什么;
- 最后要求什么。
例如:
- 输入一个整数 n
- 输入一行数;
- 输出最大值;
- 输出计数结果。
这一点非常重要,因为它决定了你后面到底在盯哪个量。
### 第 3 步:看初始化
初始化就是“一开始先把变量定成什么值”。
最常见的有:
- sum = 0
- cnt = 0
- i = 1
- best = 0
- found = 否
如果你漏看了初始化,后面很容易整张图都理解错。
比如:
- `sum = 0` 表示还没开始累计;
- `cnt = 0` 表示还没数到任何东西;
- `i = 1` 表示从第一个开始;
- `found = 否` 表示现在还没有找到答案。
### 第 4 步:遇到判断框,一定要看两条路
判断框不是只看条件本身,而是要一起看:
- 条件成立时去哪;
- 条件不成立时去哪。
例如看到:
```text
x == 0 ?
```
你不能只记住“它在判断 x 是不是 0”还要看清
- 是 0 时,是不是直接结束;
- 不是 0 时,是继续处理,还是进入下一个判断。
这是读流程图最容易出错的地方。
### 第 5 步:看到回头箭头,就想到“循环”
只要箭头从后面又回到了前面的某个判断框,通常就说明:
> 这几步要重复做。
也就是说,这就是循环。
例如:
- 每次处理完一个数,再回去判断还有没有下一个数;
- 每次处理完一行,再回去判断还有没有下一行。
这时候你就要特别注意:
- 循环变量是谁;
- 它在哪里更新;
- 什么时候停止。
### 第 6 步:最后看有没有“提前结束”
有些流程不是一定走到最下面才结束。
它可能中途就停。
例如:
- 一旦遇到 0 就停止;
- 一旦找到答案就停止;
- 一旦和超过 100 就停止。
这种情况一定要特别注意,因为它常常会让后面的步骤根本不执行。
---
## 五、读流程图时,真正要盯住什么?
读流程图时,最该盯住的是“变量怎么变”。
因为流程图虽然看起来是一张图,但本质上其实是:
> 变量的值,顺着箭头一步一步发生变化。
所以一张图里,下面这些内容尤其要留心:
- sum = sum + x
- cnt = cnt + 1
- i = i + 1
- best 变大
- found 变成“是”
你可以这样想:
- 输入,是把数据拿进来;
- 处理框,是在改数据;
- 判断框,是根据数据决定下一步;
- 箭头,是让这些变化连起来。
只要你能跟住变量变化,读图就会稳很多。
---
## 六、读流程图最可靠的方法:拿小数据手推
如果一张图你读着有点晕,不要硬看。
最有效的方法就是:
> 拿一组很小很小的数据,自己顺着箭头走一遍。
例如有这样一个流程:
- 输入 n 和一列数;
- 从第一个数开始处理;
- 如果当前数是 0就结束
- 如果当前数是偶数,就把它的一半加入 sum
- 如果当前数是奇数,就把它的两倍加入 sum
- 每处理一个数cnt 加 1
- 如果 sum 达到目标值 k就结束
- 否则继续处理下一个数。
设:
```text
n = 6
k = 20
这一列数是583092
```
我们就顺着流程一步一步推:
| 当前数 | 怎么处理 | sum | cnt | 下一步 |
|:---:|:---|:---:|:---:|:---|
| 5 | 奇数,加 10 | 10 | 1 | 继续 |
| 8 | 偶数,加 4 | 14 | 2 | 继续 |
| 3 | 奇数,加 6 | 20 | 3 | 结束 |
这时就停了。
注意:
- 第 4 个数确实是 0
- 但根本还没轮到它;
- 因为第 3 个数处理完以后sum 已经达到目标了。
所以读图时一定要记住:
> 不是图上写了什么都会执行,而是要看你顺着箭头能不能真的走到那一步。
---
## 七、自己手绘流程图,正确顺序是什么?
很多同学画流程图时,最大的问题不是不会画框,而是:
- 一边想一边乱画;
- 画到后面才发现漏了步骤;
- 箭头接得很乱;
- 别人根本看不懂。
最稳的办法是下面这 5 步。
### 第 1 步:先把做法写成“人话步骤”
不要一上来就画图。
先用最普通的话,把步骤写下来。
例如:
1. 输入 n。
2. 令 sum = 0i = 1。
3. 如果 i 大于 n就输出 sum。
4. 如果 i 是 3 的倍数,就把 i 加入 sum。
5. 如果 sum 已经超过 100就输出 sum。
6. 否则让 i 加 1。
7. 回到第 3 步。
如果这几句话都说不顺,流程图也很难画清楚。
### 第 2 步:找出图里有哪些变量
一般先分成三类:
- 输入变量
- 循环变量
- 统计结果的变量
有时还会有:
- 标记变量
例如:
- 输入变量n
- 循环变量i
- 结果变量sum
- 标记变量:是否找到答案
先把角色分清,图就好画很多。
### 第 3 步:先搭大骨架
大多数流程图,骨架其实就四种:
1. 顺序做下去
2. 遇到条件分路
3. 走完一轮再回来重复
4. 中途直接结束
所以你画图时,先不要急着填细节,先看这题属于哪几种结构拼起来。
例如:
- “依次看每个数”通常是循环;
- “如果满足条件就这样,否则那样”通常是分支;
- “找到答案就停止”通常是提前结束。
### 第 4 步:每个判断框都必须有两条路
这是手绘时最容易漏掉的地方。
判断框只要出现,就必须想清楚:
- 是,去哪;
- 否,去哪。
不能只画一条。
如果只画一条,图基本就是不完整的。
### 第 5 步:把回头箭头接对地方
循环画错,大多数不是错在“要不要回去”,而是错在“回到哪里”。
通常应该回到:
- 循环条件判断框。
而不是:
- 回到循环体中间某一步。
比如单循环通常应画成:
```text
初始化 -> 判断 -> 处理 -> 更新 -> 回到判断
```
如果把箭头接回“处理”那里,就很容易少掉下一轮该不该继续的判断。
---
## 八、手绘时,图应该怎么摆才清楚?
就算步骤都对,如果摆放得乱,图也会很难读。
下面是最实用的几个手绘习惯。
### 1. 尽量从上往下画
最清楚的布局通常是:
- 开始在上面;
- 结束在下面;
- 中间顺着往下走。
这样别人一眼就知道阅读方向。
### 2. “是”和“否”要标清楚
从判断框出来的两条路,最好直接标:
-
-
或者:
- 满足
- 不满足
总之不要让人猜。
### 3. 一步只写一件主要的事
一个框里不要塞太多句子。
例如:
- 好:`sum = sum + x`
- 好:`i = i + 1`
- 不太好:把整段说明话塞进去
流程图不是作文,框里要短、准、清楚。
### 4. 复杂流程要留空位
如果知道后面还有分支或回边,画的时候就不要把框挤得太紧。
留出位置,箭头才不会绕成一团。
### 5. 双重循环要分层画
例如“按行扫描,再按列扫描”时:
- 外层一层是一圈;
- 内层一层再包一圈;
- 不要把所有箭头都挤在同一块。
你可以把它想成:
- 先把大圈画清;
- 再在里面补小圈。
---
## 九、单循环怎么手绘?
单循环是最基础的一类。
它的常见骨架就是:
```text
开始
输入
初始化
是否继续?
├─ 是 → 处理当前内容 → 更新变量 → 回到“是否继续?”
└─ 否 → 输出 → 结束
```
如果中途还可能提前结束,那么通常会在循环体中间多一个判断:
```text
开始
输入
初始化
是否继续?
├─ 否 → 输出 → 结束
└─ 是 → 读当前数据
是否提前结束?
├─ 是 → 输出 → 结束
└─ 否 → 处理 → 更新 → 回到“是否继续?”
```
这类图画顺了,很多基础题都会简单很多。
---
## 十、双重循环怎么手绘?
双重循环是流程图里最容易乱的地方。
因为这时你其实同时在处理两层“重复”。
例如:
- 先一行一行处理;
- 每一行里再一个一个处理。
这时你一定要分清:
- 外层变量是谁;
- 内层变量是谁;
- 一层结束后回哪;
- 两层都结束后回哪。
一个最基本的样子可以写成:
```text
开始
输入
外层初始化
外层是否继续?
├─ 否 → 输出 → 结束
└─ 是 → 内层初始化
内层是否继续?
├─ 否 → 外层更新 → 回到“外层是否继续?”
└─ 是 → 处理当前内容 → 内层更新 → 回到“内层是否继续?”
```
这张骨架图里最重要的是:
- 内层结束,不代表整张图结束;
- 内层结束之后,通常是回到外层继续;
- 只有外层也结束了,才真正走到输出和结束。
---
## 十一、最容易弄混的地方:结束一层,还是结束全部?
这是初学流程图时最常见的大问题。
例如题目说:
> 每一行从左往右看,遇到 0 就停止这一行。
这句话的意思一般是:
- 当前这一行后面的内容不看了;
- 但是下一行还要继续。
这只是:
> 结束内层。
再比如题目说:
> 一旦找到答案,整个过程结束。
这就表示:
- 当前这一行不继续;
- 后面的行也不继续;
- 整张流程图直接走向输出和结束。
这才是:
> 结束全部。
所以你读图或画图时,一定要问清楚:
- 这个箭头,是退出一小层;
- 还是退出整个过程。
---
## 十二、从文字步骤到手绘流程图,示范一次
题目:输入一个整数 n求 1 到 n 中所有 3 的倍数之和;如果和第一次超过 100就立刻停止并输出。
### 1. 先写做人话步骤
1. 输入 n。
2. 令 sum = 0i = 1。
3. 如果 i 大于 n输出 sum。
4. 如果 i 是 3 的倍数,就把 i 加入 sum。
5. 如果 sum 大于 100输出 sum。
6. 否则让 i 加 1。
7. 回到第 3 步。
### 2. 再整理成手绘流程
画图时可以按下面顺序摆:
```text
[开始]
[输入 n]
[sum = 0, i = 1]
<i <= n ?>
├─ 否 → [输出 sum] → [结束]
└─ 是 → <i 是 3 的倍数 ?>
├─ 是 → [sum = sum + i]
└─ 否 → 不加
<sum > 100 ?>
├─ 是 → [输出 sum] → [结束]
└─ 否 → [i = i + 1] → 回到 <i <= n ?>
```
从这张图里,你应该能看出三件事:
1. 外面有一个循环,因为最后会回到 `i <= n ?`
2. 中间有一个分支,因为要判断 `i` 是不是 3 的倍数。
3. 还有一个提前结束,因为 `sum > 100` 时不用继续往下做了。
---
## 十三、画流程图时最常见的错误
### 1. 漏掉开始和结束
有些同学上来就画处理步骤,却没写清楚从哪开始,到哪结束。
这样的图不完整。
### 2. 漏掉初始化
例如图里有 `i <= n ?`,却没有说明 `i` 一开始是多少。
别人就没法准确读图。
### 3. 判断框只画一条路
判断框至少应有两条路:
- 是 / 否
- 满足 / 不满足
如果只画一边,基本就是漏了步骤。
### 4. 忘了更新循环变量
例如有 `i <= n ?`,却没有 `i = i + 1`
这样很容易变成永远转圈的图。
### 5. 回边接错地方
循环一轮做完以后,通常应该回到“是否继续”的判断框。
如果回到了中间某一步,流程往往就变味了。
### 6. 分不清结束一层和结束全部
双重循环里尤其容易犯这个错。
你一定要分清:
- 是只停止当前这一层;
- 还是整个流程直接停止。
### 7. 一个框里塞太多内容
流程图要清楚,不要把整段话都塞在同一个框里。
一个框最好只写一步主要操作。
### 8. 箭头方向不清楚
如果别人需要猜箭头是往哪走,那这张图就已经不够清楚了。
---
## 十四、画完以后,怎样自查?
一张流程图画完后,可以按下面这张检查单自己过一遍:
1. 有没有明确的开始和结束?
2. 输入和输出有没有写清楚?
3. 需要的初始化有没有漏掉?
4. 每个判断框是不是都画出了两条路?
5. 每个循环变量有没有更新?
6. 回头箭头是不是回到了正确的位置?
7. 中途停止时,是停一层还是停全部,有没有画清楚?
8. 能不能拿一组小数据,从头到尾手推一遍?
只要这 8 条都能过,流程图一般就比较靠谱了。
---
## 十五、这一节最该记住的几句话
最后把最重要的内容收成几句:
1. 流程图本质上是做事步骤的路线图。
2. 读流程图时,要顺着箭头走,不要跳着猜。
3. 判断框不能只看条件,还要看两条路分别去哪。
4. 箭头回到前面,通常就是循环。
5. 中途直接走向输出或结束,通常就是提前停止。
6. 画流程图前,先把步骤用人话写清楚。
7. 双重循环最容易错的地方,是没有分清“结束一层”和“结束全部”。
8. 检查流程图最可靠的方法,是拿小数据手推。
---
## 十六、课后练习建议
如果你想真正把这节学会,建议按下面顺序练:
1. 先练最基础的“顺序 + 单判断”流程图。
2. 再练“单循环 + 中途停止”流程图。
3. 最后练“按行按列处理”的双重循环流程图。
练的时候,不要只看答案。
最好自己先画,再让同学按你的图读一遍。
如果别人能顺着你的图完整说出步骤,那说明你真的画清楚了。