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