From 630142288b0208d22587fc301992879b8b690e4f Mon Sep 17 00:00:00 2001 From: klarkxy <278370456@qq.com> Date: Fri, 10 Apr 2026 18:34:54 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=9D=20docs:=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=B5=81=E7=A8=8B=E5=9B=BE=E6=96=87=E6=A1=A3=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E5=92=8C=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/doc/4.0 流程图的画法与读法.md | 962 +++++++++--------------------- 1 file changed, 295 insertions(+), 667 deletions(-) diff --git a/web/doc/4.0 流程图的画法与读法.md b/web/doc/4.0 流程图的画法与读法.md index 889a75a..c64d2cb 100644 --- a/web/doc/4.0 流程图的画法与读法.md +++ b/web/doc/4.0 流程图的画法与读法.md @@ -1,760 +1,388 @@ # 4.0 流程图的画法与读法 ---- - -## 一、这一节要学什么? - -这一节不讲编程语法,也不讲电脑里怎么画图。 - -这一节只做两件事: - -- 学会读懂别人已经画好的流程图; -- 学会把自己的做题步骤,手绘成一张清楚的流程图。 - -很多同学觉得流程图“好像会看一点”,但真到题目里,还是容易出现这些问题: - -- 看着箭头走着走着就乱了; -- 判断框只看条件,不看“是”和“否”分别去哪; -- 一碰到循环就分不清到底什么时候停; -- 自己画图时,框倒是画了不少,但别人根本看不懂。 - -所以这节课的目标很明确: - -> 看到一张流程图,能按顺序说出它每一步在做什么; -> 想好一道题的做法,能把它画成一张条理清楚的手绘流程图。 - -只要这两件事学会了,后面的模拟题、分支题、循环题都会更容易做对。 +> 这一讲里的流程图,是老师用 Mermaid 画出来的电子示意图,方便课堂展示。 +> +> 你要学会的是:看懂流程图、会把步骤手绘出来。 +> +> 不要求你记 Mermaid 语法,更不要求你用 Mermaid 写题。 --- -## 二、先把流程图想成“做事路线图” +## 一、这节课到底学什么? -流程图不是图画比赛,它最重要的作用只有一个: +这节课只抓 3 件事: -> 把“做题步骤”按执行顺序画出来。 +1. 看到流程图,能顺着箭头说出每一步在干什么。 +2. 看到判断框,能分清“是”走哪条路,“否”走哪条路。 +3. 能把一道题的做法,手绘成清楚的流程图。 -你可以把它想成一张路线图。 +很多同学觉得流程图难,不是因为图形多,而是因为总会犯下面几种错: -- 框,表示“现在这一步要做什么”; -- 箭头,表示“下一步走到哪里去”。 +- 只盯着框看,不顺着箭头走。 +- 只看条件,不看两条分支分别去哪。 +- 看到回头箭头,没有意识到这是一段循环。 +- 自己画图时,漏了初始化、漏了结束、漏了更新变量。 -所以读流程图时,最关键的不是“这个图形漂不漂亮”,而是: - -- 现在在哪一步; -- 下一步往哪里走; -- 什么时候会换路; -- 什么时候会回头重复; -- 什么时候整个过程结束。 - -只要抓住这五件事,流程图就不神秘了。 +所以这份讲义不走“纯概念说明”路线,而是直接看图、读图、再学怎么手绘。 --- -## 三、手绘流程图常见的几种图形 +## 二、先看一张图,认识流程图里最常见的 4 种框 -流程图里最常见的图形不多,课堂上先记住下面这几种就够了。 - -### 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 ? +```mermaid +flowchart LR + A([开始]) --> B[/输入一个数 n/] + B --> C[把 n 加 1] + C --> D{n 是偶数吗?} + D -- 是 --> E[/输出 偶数/] + D -- 否 --> F[/输出 奇数/] + E --> G([结束]) + F --> G ``` -你不能只记住“它在判断 x 是不是 0”,还要看清: +这张图先不用细抠题意,只要认识图形就行: -- 是 0 时,是不是直接结束; -- 不是 0 时,是继续处理,还是进入下一个判断。 +- 圆角框:开始、结束。 +- 平行四边形:输入、输出。 +- 长方形:处理步骤,也就是“做一件事”。 +- 菱形:判断,要从这里分路。 -这是读流程图最容易出错的地方。 +你可以先把流程图想成“做事路线图”: -### 第 5 步:看到回头箭头,就想到“循环” +- 框,表示现在做什么。 +- 箭头,表示下一步去哪。 -只要箭头从后面又回到了前面的某个判断框,通常就说明: - -> 这几步要重复做。 - -也就是说,这就是循环。 - -例如: - -- 每次处理完一个数,再回去判断还有没有下一个数; -- 每次处理完一行,再回去判断还有没有下一行。 - -这时候你就要特别注意: - -- 循环变量是谁; -- 它在哪里更新; -- 什么时候停止。 - -### 第 6 步:最后看有没有“提前结束” - -有些流程不是一定走到最下面才结束。 - -它可能中途就停。 - -例如: - -- 一旦遇到 0 就停止; -- 一旦找到答案就停止; -- 一旦和超过 100 就停止。 - -这种情况一定要特别注意,因为它常常会让后面的步骤根本不执行。 +> 读流程图时,真正重要的不是图画得漂不漂亮,而是你能不能顺着箭头走清楚。 --- -## 五、读流程图时,真正要盯住什么? +## 三、示范 1:最基础的单判断流程图 -读流程图时,最该盯住的是“变量怎么变”。 +题目:输入一个整数,判断它是偶数还是奇数。 -因为流程图虽然看起来是一张图,但本质上其实是: - -> 变量的值,顺着箭头一步一步发生变化。 - -所以一张图里,下面这些内容尤其要留心: - -- sum = sum + x -- cnt = cnt + 1 -- i = i + 1 -- best 变大 -- found 变成“是” - -你可以这样想: - -- 输入,是把数据拿进来; -- 处理框,是在改数据; -- 判断框,是根据数据决定下一步; -- 箭头,是让这些变化连起来。 - -只要你能跟住变量变化,读图就会稳很多。 - ---- - -## 六、读流程图最可靠的方法:拿小数据手推 - -如果一张图你读着有点晕,不要硬看。 - -最有效的方法就是: - -> 拿一组很小很小的数据,自己顺着箭头走一遍。 - -例如有这样一个流程: - -- 输入 n 和一列数; -- 从第一个数开始处理; -- 如果当前数是 0,就结束; -- 如果当前数是偶数,就把它的一半加入 sum; -- 如果当前数是奇数,就把它的两倍加入 sum; -- 每处理一个数,cnt 加 1; -- 如果 sum 达到目标值 k,就结束; -- 否则继续处理下一个数。 - -设: - -```text -n = 6 -k = 20 -这一列数是:5,8,3,0,9,2 +```mermaid +flowchart TD + A([开始]) --> B[/输入 n/] + B --> C{n 能被 2 整除吗?} + C -- 是 --> D[/输出 偶数/] + C -- 否 --> E[/输出 奇数/] + D --> F([结束]) + E --> F ``` -我们就顺着流程一步一步推: +读这张图时,顺序应该这样说: -| 当前数 | 怎么处理 | sum | cnt | 下一步 | -|:---:|:---|:---:|:---:|:---| -| 5 | 奇数,加 10 | 10 | 1 | 继续 | -| 8 | 偶数,加 4 | 14 | 2 | 继续 | -| 3 | 奇数,加 6 | 20 | 3 | 结束 | +1. 从“开始”出发。 +2. 输入一个整数 n。 +3. 判断 n 能不能被 2 整除。 +4. 如果能,就输出“偶数”。 +5. 如果不能,就输出“奇数”。 +6. 结束。 -这时就停了。 +这类图最容易错的地方只有一个: -注意: +> 判断框一定要看两条路,不能只看条件本身。 -- 第 4 个数确实是 0; -- 但根本还没轮到它; -- 因为第 3 个数处理完以后,sum 已经达到目标了。 +也就是说,你看到菱形时,要同时问自己两句: -所以读图时一定要记住: - -> 不是图上写了什么都会执行,而是要看你顺着箭头能不能真的走到那一步。 +- 条件成立,往哪走? +- 条件不成立,往哪走? --- -## 七、自己手绘流程图,正确顺序是什么? +## 四、示范 2:看到回头箭头,就要想到“循环” -很多同学画流程图时,最大的问题不是不会画框,而是: +题目:输入 n,求 1 到 n 的和。 -- 一边想一边乱画; -- 画到后面才发现漏了步骤; -- 箭头接得很乱; -- 别人根本看不懂。 +```mermaid +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 +``` -最稳的办法是下面这 5 步。 +这张图里,最关键的是最后那条回头箭头: -### 第 1 步:先把做法写成“人话步骤” +- 它从后面回到了前面的判断框。 +- 这说明有一段步骤要重复做。 +- 这就是循环。 -不要一上来就画图。 +### 拿一组小数据,顺着图走一遍 -先用最普通的话,把步骤写下来。 +设 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,就立刻输出并结束。 + +```mermaid +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,找到就立刻输出它的位置。 + +```mermaid +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,就立刻停止并输出。 + +```mermaid +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 个地方: + +1. 外面有一个循环,因为最后会回到“i 还没超过 n 吗”。 +2. 中间有一个分支,因为要判断 i 是不是 3 的倍数。 +3. 还有一个提前结束,因为 sum 超过 100 时可以直接停。 + +如果你能把这张图读顺,说明你已经不是只会看“最基础单流程”了。 + +--- + +## 八、自己手绘流程图,应该怎么下笔? + +看到题目以后,不要一上来就急着画框。 + +更稳的顺序是下面这 6 步: + +### 第 1 步:先把做法写成人话 例如: 1. 输入 n。 2. 令 sum = 0,i = 1。 -3. 如果 i 大于 n,就输出 sum。 -4. 如果 i 是 3 的倍数,就把 i 加入 sum。 +3. 如果 i 已经超过 n,就输出 sum。 +4. 如果 i 是 3 的倍数,就把它加到 sum 里。 5. 如果 sum 已经超过 100,就输出 sum。 -6. 否则让 i 加 1。 -7. 回到第 3 步。 +6. 否则 i 加 1,再继续。 -如果这几句话都说不顺,流程图也很难画清楚。 +如果这几句话都说不顺,流程图通常也画不顺。 -### 第 2 步:找出图里有哪些变量 +### 第 2 步:先找变量 -一般先分成三类: +最常见的几类变量是: -- 输入变量 -- 循环变量 -- 统计结果的变量 - -有时还会有: - -- 标记变量 - -例如: - -- 输入变量:n -- 循环变量:i -- 结果变量:sum -- 标记变量:是否找到答案 - -先把角色分清,图就好画很多。 +- 输入变量:题目给你的数。 +- 循环变量:决定“做到第几个”的变量。 +- 结果变量:最后要输出的量。 +- 标记变量:比如“是否找到”。 ### 第 3 步:先搭大骨架 -大多数流程图,骨架其实就四种: +很多流程图,骨架其实都差不多: -1. 顺序做下去 -2. 遇到条件分路 -3. 走完一轮再回来重复 -4. 中途直接结束 +开始 → 输入 → 初始化 → 判断 → 处理 → 更新 → 回到判断 → 输出 → 结束 -所以你画图时,先不要急着填细节,先看这题属于哪几种结构拼起来。 +先把主干摆出来,再补细节,图就不会乱。 -例如: +### 第 4 步:每个判断框都要有两条路 -- “依次看每个数”通常是循环; -- “如果满足条件就这样,否则那样”通常是分支; -- “找到答案就停止”通常是提前结束。 +判断框不能只画一条路。 -### 第 4 步:每个判断框都必须有两条路 +你必须写清楚: -这是手绘时最容易漏掉的地方。 - -判断框只要出现,就必须想清楚: - -- 是,去哪; +- 是,去哪。 - 否,去哪。 -不能只画一条。 +### 第 5 步:循环的回边,通常回到判断框 -如果只画一条,图基本就是不完整的。 +很多同学会把箭头直接接回处理中间某一步,这很容易画错。 -### 第 5 步:把回头箭头接对地方 +更常见、更稳的画法是: -循环画错,大多数不是错在“要不要回去”,而是错在“回到哪里”。 +- 处理完一轮。 +- 更新变量。 +- 回到“是否继续”的判断框。 -通常应该回到: +### 第 6 步:画完以后,用小数据手推 -- 循环条件判断框。 +这一招非常重要。 -而不是: +你可以拿最小的几组数据来试: -- 回到循环体中间某一步。 +- n = 1 会怎样? +- n = 0 会怎样? +- 第一次就满足结束条件会怎样? -比如单循环通常应画成: - -```text -初始化 -> 判断 -> 处理 -> 更新 -> 回到判断 -``` - -如果把箭头接回“处理”那里,就很容易少掉下一轮该不该继续的判断。 +如果你自己都推不顺,说明图还得改。 --- -## 八、手绘时,图应该怎么摆才清楚? +## 九、手绘时最容易犯的错误 -就算步骤都对,如果摆放得乱,图也会很难读。 +下面这些错,课堂上特别常见: -下面是最实用的几个手绘习惯。 - -### 1. 尽量从上往下画 - -最清楚的布局通常是: - -- 开始在上面; -- 结束在下面; -- 中间顺着往下走。 - -这样别人一眼就知道阅读方向。 - -### 2. “是”和“否”要标清楚 - -从判断框出来的两条路,最好直接标: - -- 是 -- 否 - -或者: - -- 满足 -- 不满足 - -总之不要让人猜。 - -### 3. 一步只写一件主要的事 - -一个框里不要塞太多句子。 - -例如: - -- 好:`sum = sum + x` -- 好:`i = i + 1` -- 不太好:把整段说明话塞进去 - -流程图不是作文,框里要短、准、清楚。 - -### 4. 复杂流程要留空位 - -如果知道后面还有分支或回边,画的时候就不要把框挤得太紧。 - -留出位置,箭头才不会绕成一团。 - -### 5. 双重循环要分层画 - -例如“按行扫描,再按列扫描”时: - -- 外层一层是一圈; -- 内层一层再包一圈; -- 不要把所有箭头都挤在同一块。 - -你可以把它想成: - -- 先把大圈画清; -- 再在里面补小圈。 +1. 漏掉开始和结束。 +2. 忘了初始化变量。 +3. 判断框只画出一条路。 +4. 循环变量没有更新,结果图会一直转圈。 +5. 回边接错位置,没有回到判断框。 +6. 双重循环里,没有分清是结束一层还是结束全部。 +7. 一个框里塞太多话,别人读不清楚。 +8. 箭头方向不清,让人只能靠猜。 --- -## 九、单循环怎么手绘? - -单循环是最基础的一类。 - -它的常见骨架就是: - -```text -开始 - ↓ -输入 - ↓ -初始化 - ↓ -是否继续? - ├─ 是 → 处理当前内容 → 更新变量 → 回到“是否继续?” - └─ 否 → 输出 → 结束 -``` - -如果中途还可能提前结束,那么通常会在循环体中间多一个判断: - -```text -开始 - ↓ -输入 - ↓ -初始化 - ↓ -是否继续? - ├─ 否 → 输出 → 结束 - └─ 是 → 读当前数据 - ↓ - 是否提前结束? - ├─ 是 → 输出 → 结束 - └─ 否 → 处理 → 更新 → 回到“是否继续?” -``` - -这类图画顺了,很多基础题都会简单很多。 - ---- - -## 十、双重循环怎么手绘? - -双重循环是流程图里最容易乱的地方。 - -因为这时你其实同时在处理两层“重复”。 - -例如: - -- 先一行一行处理; -- 每一行里再一个一个处理。 - -这时你一定要分清: - -- 外层变量是谁; -- 内层变量是谁; -- 一层结束后回哪; -- 两层都结束后回哪。 - -一个最基本的样子可以写成: - -```text -开始 - ↓ -输入 - ↓ -外层初始化 - ↓ -外层是否继续? - ├─ 否 → 输出 → 结束 - └─ 是 → 内层初始化 - ↓ - 内层是否继续? - ├─ 否 → 外层更新 → 回到“外层是否继续?” - └─ 是 → 处理当前内容 → 内层更新 → 回到“内层是否继续?” -``` - -这张骨架图里最重要的是: - -- 内层结束,不代表整张图结束; -- 内层结束之后,通常是回到外层继续; -- 只有外层也结束了,才真正走到输出和结束。 - ---- - -## 十一、最容易弄混的地方:结束一层,还是结束全部? - -这是初学流程图时最常见的大问题。 - -例如题目说: - -> 每一行从左往右看,遇到 0 就停止这一行。 - -这句话的意思一般是: - -- 当前这一行后面的内容不看了; -- 但是下一行还要继续。 - -这只是: - -> 结束内层。 - -再比如题目说: - -> 一旦找到答案,整个过程结束。 - -这就表示: - -- 当前这一行不继续; -- 后面的行也不继续; -- 整张流程图直接走向输出和结束。 - -这才是: - -> 结束全部。 - -所以你读图或画图时,一定要问清楚: - -- 这个箭头,是退出一小层; -- 还是退出整个过程。 - ---- - -## 十二、从文字步骤到手绘流程图,示范一次 - -题目:输入一个整数 n,求 1 到 n 中所有 3 的倍数之和;如果和第一次超过 100,就立刻停止并输出。 - -### 1. 先写做人话步骤 - -1. 输入 n。 -2. 令 sum = 0,i = 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] - ↓ - - ├─ 否 → [输出 sum] → [结束] - └─ 是 → - ├─ 是 → [sum = sum + i] - └─ 否 → 不加 - ↓ - 100 ?> - ├─ 是 → [输出 sum] → [结束] - └─ 否 → [i = i + 1] → 回到 -``` - -从这张图里,你应该能看出三件事: - -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. 每个判断框是不是都画出了两条路? +3. 初始化有没有漏掉? +4. 每个判断框是不是都有两条路? 5. 每个循环变量有没有更新? -6. 回头箭头是不是回到了正确的位置? -7. 中途停止时,是停一层还是停全部,有没有画清楚? -8. 能不能拿一组小数据,从头到尾手推一遍? +6. 回头箭头是不是回到了合适的位置? +7. 如果有提前停止,是不是画清楚了? +8. 如果有双重循环,是不是分清了结束一层和结束全部? +9. 能不能拿一组小数据,从头走到尾? -只要这 8 条都能过,流程图一般就比较靠谱了。 +只要这 9 条都能过,这张图一般就比较靠谱了。 --- -## 十五、这一节最该记住的几句话 +## 十一、课堂练习 -最后把最重要的内容收成几句: +下面 3 题,不要求你写代码,先试着手绘流程图: -1. 流程图本质上是做事步骤的路线图。 -2. 读流程图时,要顺着箭头走,不要跳着猜。 -3. 判断框不能只看条件,还要看两条路分别去哪。 -4. 箭头回到前面,通常就是循环。 -5. 中途直接走向输出或结束,通常就是提前停止。 -6. 画流程图前,先把步骤用人话写清楚。 -7. 双重循环最容易错的地方,是没有分清“结束一层”和“结束全部”。 -8. 检查流程图最可靠的方法,是拿小数据手推。 +### 练习 1 + +输入 n,输出 1 到 n 中偶数的个数。 + +### 练习 2 + +从左到右读一串数,遇到 0 就停止,输出前面所有数的和。 + +### 练习 3 + +读一个 3 行 4 列的表,找到第一个大于 100 的数,输出它的位置;如果没有找到,就输出“没有”。 + +做这 3 题时,请先写“人话步骤”,再画图。 --- -## 十六、课后练习建议 +## 十二、这一节最该记住的几句话 -如果你想真正把这节学会,建议按下面顺序练: +1. 流程图不是背图形,而是按顺序表达做事步骤。 +2. 读图时,最重要的是顺着箭头走。 +3. 看到菱形,就要同时看“是”和“否”两条路。 +4. 看到回头箭头,通常就要想到循环。 +5. 不是图上写了什么都会执行,要看箭头能不能真的走到那一步。 +6. 画图前先把步骤说清楚,画完后再拿小数据手推。 -1. 先练最基础的“顺序 + 单判断”流程图。 -2. 再练“单循环 + 中途停止”流程图。 -3. 最后练“按行按列处理”的双重循环流程图。 - -练的时候,不要只看答案。 - -最好自己先画,再让同学按你的图读一遍。 - -如果别人能顺着你的图完整说出步骤,那说明你真的画清楚了。 \ No newline at end of file +如果你能做到这 6 条,流程图这一关就算真正入门了。 \ No newline at end of file