CC++ & Algorithm

流程图的三种基本结构

困难33
语言版本:C++Python
概述:顺序、分支和循环就像搭积木的三种基础搭法,任何程序都由它们组成。

程序的三块魔法积木:顺序、分支和循环

大家好!今天我们来认识程序世界里最基础、最强大的三种“积木搭法”。就像乐高只有几种基础积木,却能拼出城堡、飞船和恐龙一样,任何程序(从计算器到游戏)都是由顺序、分支和循环这三种结构组合而成的。学会它们,你就能看懂并写出自己的程序啦!


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;
}

注意:顺序结构中,每一行代码依次执行。如果调换 coutreturn 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 循环(至少执行一次)。
  • 把三种结构拼在一起,就能写出计算器、成绩统计、简单游戏等各种程序——你也是一位小小程序员啦!

例题精讲

1单选题

流程图的三种基本结构是哪三种?

A顺序、分支、循环
B输入、输出、处理
C顺序、选择、重复
D开始、结束、判断
2判断题

在流程图中,循环结构只能使用“当型循环”(while)一种形式。

3单选题

以下哪个流程图描述的是分支结构?

A一个矩形框后接另一个矩形框
B一个菱形判断框后分两支
C一个矩形框后箭头返回前面
D多个矩形框并列排列
4填空题
以下程序是分支结构,根据输入的a是否大于0输出不同结果。补全if条件。
int a;
cin >> a;
if (___) {
    cout << "正数";
} else {
    cout << "非正数";
}
5填空题
以下程序是循环结构,计算1到n的和。补全for循环的增量部分。
int n, sum = 0;
cin >> n;
for (int i = 1; i <= n; ___) {
    sum += i;
}
cout << sum;