用流程图描述算法
较难35用流程图画出你的想法——算法可视化入门
你有没有想过,做一件事之前先画一张“路线图”会有什么好处?比如做一道番茄炒蛋,先洗番茄、切番茄、打鸡蛋……要是中间忘了放盐,整道菜就毁了。如果提前把每一步画成图,就能一眼看出哪里可能出问题。
这就是今天要学的 流程图——它把算法(解决问题的方法和步骤)用图形画出来,就像一张“施工图”。在写C++代码之前,先画出流程图,能帮你理清思路,避免逻辑错误。
一、认识流程图的基础符号
流程图有几种固定的图形,每种代表不同的操作。记住它们,就像记住路标一样简单。
| 图形 | 名称 | 含义 | 生活中例子 |
|---|---|---|---|
| 椭圆 | 起止框 | 表示开始或结束 | 就像做菜第一步“开始做饭”和最后一步“开吃” |
| 平行四边形 | 输入/输出框 | 读取数据或显示结果 | 比如“尝尝咸不咸”的尝结果 |
| 矩形 | 处理框 | 执行一个操作 | “切番茄”、“放两勺盐” |
| 菱形 | 判断框 | 根据条件决定走哪条路(二选一) | “番茄酸不酸?”——酸就加糖,不酸就不加 |
箭头连接这些图形,表示顺序。
小窍门:只要记住“开始→输入→处理→判断→输出→结束”这个顺序,就能画出大部分流程图。
二、实战:用流程图找出三个数中的最大值
1. 自然语言描述
第一步,先把算法的步骤用文字写出来:
- 输入三个整数 a、b、c。
- 先把 a 和 b 比较,谁大就暂时记为“当前最大值”。
- 再把这个“当前最大值”和 c 比较,谁大谁就是最终的最大值。
- 输出这个最大值。
2. 画出流程图(文字版)
想象一下,你拿着笔按顺序画:
椭圆(开始) → 平行四边形(输入a,b,c) → 菱形(a > b?) → 如果“是”,走左边矩形(max = a);如果“否”,走右边矩形(max = b) → 然后两个分支汇合到另一个菱形(当前最大值 > c?) → 如果“是”,走左边(max不变);如果“否”,走右边矩形(max = c) → 最终汇合到平行四边形(输出max) → 椭圆(结束)。
(用实际图形画出来会更直观,这里用文字帮你想象)
3. 对应的C++代码(保留原有内容)
下面这段代码就是根据上面的流程图写出来的:
#include <iostream>
using namespace std;
int main() {
int a, b, c, max;
cin >> a >> b >> c;
if (a > b) {
max = a;
} else {
max = b;
}
if (max > c) {
// max不变
} else {
max = c;
}
cout << max;
return 0;
}
小提示:为了让代码更好理解,建议把变量定义分开写,并加上中文注释。比如:
int a; // 第一个数 int b; // 第二个数 int c; // 第三个数 int max; // 存放最大值生活中写代码也推荐这样,读起来像在说“我放了个盒子叫a,里面装第一个数”。
三、生活中的流程图小例子
例1:早上起床的流程
开始 → 闹钟响了吗?(菱形:是→起床,否→继续睡) → 起床 → 洗脸 → 刷牙 → 吃饭 → 出门 → 结束。
如果在“闹钟响”那里加了“再睡5分钟”,就变成循环了(后续学习循环时你会更明白)。
例2:买零食的决策
开始 → 口袋里有多少钱?(比如10元) → 想看零食价格是否≤10元(菱形) → 是→买;否→不买 → 结束。
这个流程和电脑里判断打折的逻辑一模一样。
例3:计算打折价格
假设超市搞活动:满50元打8折,否则不打折。
算法文字描述:
- 输入商品总价 price。
- 如果 price >= 50,则 final = price * 0.8;否则 final = price。
- 输出 final。
流程图:椭圆开始 → 平行四边形输入price → 菱形 price >= 50? → 是(矩形 final=price*0.8) → 否(矩形 final=price) → 汇合 → 平行四边形输出final → 椭圆结束。
对应的C++代码(逐行注释):
#include <iostream>
using namespace std;
int main() {
double price; // 商品原价
double final; // 最终价格
cin >> price; // 输入原价
if (price >= 50) { // 判断是否满50
final = price * 0.8; // 打8折
} else {
final = price; // 不打折
}
cout << final; // 输出最终价格
return 0;
}
四、新手常见的流程图错误
-
忘记开始和结束
很多同学画着画着就忘了开头画椭圆“开始”,结尾画椭圆“结束”。没有起止,别人不知道程序从哪里开始、到哪里停。 -
条件判断的分支没标清
菱形判断框一定要在两条箭头上分别写上“是”或“否”(有时也写“Y”和“N”),否则看到图的人会迷茫:“走哪边啊?” -
箭头乱飞或交叉
箭头应该尽量从一个框的底部或右侧出发,指向下一个框的顶部或左侧。如果箭头交叉,会像一团乱麻。 -
一个判断框里写多个条件
比如“a > b 且 a > c”?这样做容易混淆。正确的做法是拆成多个菱形,一步步判断(就像上面的最大值例子)。 -
输入框和输出框用反
输入数据用平行四边形,输出结果也是平行四边形。有些人把输入画成矩形,那是不对的。
正确做法:画完流程图后,跟着箭头走一遍“模拟运行”,确保每一步都有路可走、没有死胡同。
五、完整可运行代码示例(另一个例子:判断奇偶数)
下面展示一个“输入一个整数,判断它是奇数还是偶数”的流程图和代码,用来巩固知识。
流程图文字描述
开始 → 平行四边形输入数字 num → 菱形 num % 2 == 0? → 是(矩形输出“偶数”) → 否(矩形输出“奇数”) → 结束
C++代码(逐行注释)
#include <iostream>
using namespace std;
int main() {
int num; // 输入的数字
cin >> num; // 读取数字
if (num % 2 == 0) { // 如果除以2余数为0
cout << "偶数"; // 输出“偶数”
} else {
cout << "奇数"; // 否则输出“奇数”
}
return 0;
}
你可以试着把这个题目画成真正的流程图,然后再看代码,是不是一一对应?
六、相关指引,继续前进
学完流程图,你就掌握了“先画图再写代码”的好习惯。接下来你可以学习:
- 伪代码:另一种把算法写成“半英文半中文”的方式,比流程图更简洁。
- 程序框图的更多符号:比如循环框(第六边型)、子程序框(带竖线的矩形),用于更复杂的算法。
- 条件判断与多分支:if-else if-else 结构,在流程图中用多个菱形串联。
- 循环结构:比如 while 循环和 for 循环,流程图里会用菱形加回路表示。
记住:流程图是思考的助手,不是束缚。当你熟悉了C++语法后,简单的问题可以直接写代码,但遇到复杂题目(比如计算全班同学成绩的平均分、最高分、最低分),先画一张流程图,能让你思路清晰,少走弯路。
现在,试着画一个“从1加到100”的流程图吧! 可以先想想它的算法(循环累加),画出流程图,再写出C++代码,这才是学习编程最扎实的方法。
例题精讲
在流程图中,用于表示条件判断的图形是哪个?
流程图中,以下哪个图形通常表示赋值或计算操作?
流程图中的流程线可以任意弯曲,只要箭头方向正确即可。
流程图中,开始和结束框应使用圆角矩形或椭圆形。
根据以下流程图描述:开始→输入整数n→判断n是否为偶数(n%2==0)?是→输出“偶数”并结束;否→输出“奇数”并结束。请补全对应的C++代码片段:
int n;
cin >> n;
if (___) {
cout << "偶数";
} else {
cout << "奇数";
}