流程图的三种基本结构
困难33程序的三块魔法积木:顺序、分支和循环
大家好!今天我们来认识程序世界里最基础、最强大的三种“积木搭法”。就像乐高只有几种基础积木,却能拼出城堡、飞船和恐龙一样,任何程序(从计算器到游戏)都是由顺序、分支和循环这三种结构组合而成的。学会它们,你就能看懂并写出自己的程序啦!
1. 顺序结构——一步接一步,按规矩来
顺序结构最简单:就是从上往下,挨个执行,像念课文一样,不能跳行,也不能回头。
生活中的例子:
吃汉堡的步骤:①拿起面包 → ②放肉饼 → ③放生菜 → ④盖上面包。顺序一乱,汉堡就不好吃啦!
再比如:早上起床的顺序:①睁眼 → ②穿衣服 → ③刷牙 → ④吃早饭。如果先刷牙再穿衣服,牙膏可能弄脏睡衣哦。
流程图的样子:
几个矩形框用箭头从上到下串起来,像一列火车。
C++ 代码示例(保留了原来的代码,并加了更多注释):
#include <iostream>
using namespace std;
int main() {
// 第一步:定义两个数
int a = 2;
int b = 3;
// 第二步:计算它们的和
int sum = a + b; // sum = 5
// 第三步:把结果输出
cout << sum << endl;
// 第四步:程序结束(居然还有第四步!)
return 0;
}
注意:顺序结构中,每一行代码依次执行。如果调换
cout和return 0的顺序,程序会先输出再结束,看起来没区别,但如果有更多操作,顺序错了结果就会错。
2. 分支结构——像十字路口,看条件选路走
分支结构就是根据一个条件(是或否),决定走哪条路。流程图里用一个菱形框提问,下面分出两条路(“是”和“否”)。
生活中的例子:
- 过马路前看红绿灯:如果是绿灯,就过;否则(红灯)就等。
- 考试后看分数:如果分数 ≥ 60,就“及格了,开心”;否则“没及格,下次努力”。
- 玩游戏时:如果血量 > 0,继续玩;否则游戏结束。
C++ 代码示例(保留原来判断年龄的代码,增加了一个小例子):
#include <iostream>
using namespace std;
int main() {
// 判断年龄是成年还是未成年
int age;
cout << "请输入你的年龄:";
cin >> age;
if (age >= 18) {
cout << "你是成年人" << endl;
} else {
cout << "你是未成年人" << endl;
}
// 另一个例子:判断今天是星期几(周几)
int day;
cout << "请输入星期几(1-7):";
cin >> day;
if (day == 1) {
cout << "周一,要上学" << endl;
} else if (day == 6 || day == 7) {
cout << "周末,可以玩" << endl;
} else {
cout << "工作日,好好学习" << endl;
}
return 0;
}
注意:判断相等要用
==(两个等号),不是=(一个等号是赋值)。很多新手写成if (age = 18),这会把 18 赋给 age,永远成立,大坑!
3. 循环结构——像复读机,重复直到满足条件
循环结构用于重复执行一段代码,直到条件不再满足为止。流程图里有一条箭头从判断框的“是”分支绕回前面的处理框,形成回路。
生活中的例子:
- 写作业:写一题 → 检查一题 → 如果还有题没写,继续写 → 否则停笔。
- 投篮练习:投一次篮 → 如果没投中,再投一次 → 直到投中为止。
- 吃糖果:从糖盒里拿一颗糖 → 吃掉 → 如果还有糖,再拿一颗 → 直到盒子空了。
C++ 代码示例(保留原来输出1~5的代码,增加一个累加的例子):
#include <iostream>
using namespace std;
int main() {
// 例1:输出1到5
int i = 1;
while (i <= 5) {
cout << i << " "; // 输出当前数字
i++; // 每输出一次,i增加1(这是关键!)
}
cout << endl;
// 例2:计算1加到100的和
int num = 1;
int sum = 0;
while (num <= 100) {
sum = sum + num; // 把当前num加到sum里
num++; // num增加1,继续下一次
}
cout << "1+2+...+100 = " << sum << endl;
return 0;
}
常见错误:
- 忘记改变循环条件:比如只写了
while (i <= 5)却没写i++,程序会永远输出1,变成死循环,卡住不动。- 条件写反:比如
while (i > 5),一开始 i=1 就不满足,循环一次都不执行。- 循环体内忘记用花括号:如果只有一条语句可以不写花括号,但有两条或以上就要用花括号括起来,否则只重复第一条。
常见错误总结(新手必看!)
| 结构类型 | 容易犯的错误 | 正确做法 |
|---|---|---|
| 顺序 | 调换语句顺序导致结果错误 | 想清楚操作步骤,按合理顺序写 |
| 分支 | 1. 把 == 写成 = | 1. 比较用双等号,赋值用单等号 |
| 2. 忘记花括号(多条语句时) | 2. 即使只有一条也养成写花括号的好习惯 | |
3. 条件写错(比如 >= 写成 >) | 3. 仔细想清楚边界条件 | |
| 循环 | 1. 忘记改变循环变量,死循环 | 1. 确保循环体内有让条件变化的语句 |
| 2. 条件写反,循环一次也不执行 | 2. 先想好“什么时候继续”,再写条件 | |
| 3. 没有初始化变量(比如 sum 要赋初值 0) | 3. 使用变量前先给个确定值 |
完整示例:猜数字小游戏
把三种结构结合起来,我们写一个猜数字游戏:程序心里想一个1~100之间的数,你来猜,它会告诉你“大了”或“小了”,直到猜对为止。
#include <iostream>
#include <cstdlib> // 用于 rand() 随机数
#include <ctime> // 用于 time() 生成种子
using namespace std;
int main() {
// 1. 顺序:初始化随机数种子
srand(time(0));
// 2. 顺序:生成一个1~100的随机数
int secret = rand() % 100 + 1; // 1到100之间
// 3. 顺序:提示用户开始
int guess = 0; // 用户猜的数,先设为0
int attempts = 0; // 记录猜的次数
cout << "我心中想了一个1~100之间的数,你来猜猜看!" << endl;
// 4. 循环:直到猜对为止
while (guess != secret) {
// 4a. 顺序:让用户输入
cout << "请输入你猜的数:";
cin >> guess;
attempts++; // 猜的次数加1
// 4b. 分支:判断猜大了还是小了
if (guess > secret) {
cout << "大了,再小一点。" << endl;
} else if (guess < secret) {
cout << "小了,再大一点。" << endl;
} else {
cout << "恭喜你,猜对了!" << endl;
}
}
// 5. 顺序:输出最终结果
cout << "你一共猜了 " << attempts << " 次。" << endl;
return 0;
}
这个程序里,顺序结构用于一步步执行,分支结构用于判断猜大猜小,循环结构用于反复猜直到正确。三者完美配合!
还想了解更多?
- 画流程图时,顺序用矩形框,分支用菱形框,循环也用菱形框判断,但箭头会拐回去。试试用纸笔画出上面猜数字游戏的流程图吧!
- 除了
if-else,还有switch语句可以做多分支(比如星期几选择)。 - 除了
while循环,还有for循环(更常用在知道循环次数的时候),以及do-while循环(至少执行一次)。 - 把三种结构拼在一起,就能写出计算器、成绩统计、简单游戏等各种程序——你也是一位小小程序员啦!
例题精讲
流程图的三种基本结构是哪三种?
在流程图中,循环结构只能使用“当型循环”(while)一种形式。
以下哪个流程图描述的是分支结构?
以下程序是分支结构,根据输入的a是否大于0输出不同结果。补全if条件。
int a;
cin >> a;
if (___) {
cout << "正数";
} else {
cout << "非正数";
}以下程序是循环结构,计算1到n的和。补全for循环的增量部分。
int n, sum = 0;
cin >> n;
for (int i = 1; i <= n; ___) {
sum += i;
}
cout << sum;