CC++ & Algorithm

do-while循环——先做一次,再决定要不要继续

中等7
语言版本:C++
概述:介绍do-while循环的特点和用法,通过生活例子和代码帮助小朋友理解“至少执行一次”的概念。

do-while循环——先做一次,再决定要不要继续

你已经学过了while循环:先检查条件,如果成立才执行循环里的代码。但有时候,我们希望不管条件成不成立,先做一次再说,做完之后再看要不要重复。这就是do-while循环的用处。

想象一下:老师让你每天放学后检查书包,看看有没有东西落在学校。你回到家,先检查一次,如果发现没落东西,今天就不用再检查了;如果落了,明天出门前再检查一次。这个“先检查一次,再决定要不要继续检查”的过程,就是do-while循环。再比如,你第一次尝一道菜,不管好不好吃都先吃一口,如果觉得好吃就再吃一口,否则就不吃了——这也是“先做一次再说”。

一、do-while的写法

do {
    // 要重复执行的代码(至少执行一次)
} while (条件);

注意:while的后面要加上分号 ;,这和while循环不一样。while循环的结束括号后面是不加分号的,而do-while必须加,否则程序会报错。

二、生活中的例子:猜数字游戏

让小朋友猜一个1到10之间的数字,猜对了就结束,猜错了继续猜。至少要先猜一次,所以用do-while非常合适。

#include <iostream>
using namespace std;

int main() {
    int secret = 7;  // 秘密数字
    int guess;       // 小朋友猜的数

    do {
        cout << "请猜一个1~10之间的数字:";
        cin >> guess;

        if (guess > secret) {
            cout << "猜大了,再试试!" << endl;
        } else if (guess < secret) {
            cout << "猜小了,再试试!" << endl;
        } else {
            cout << "恭喜你,猜对了!" << endl;
        }
    } while (guess != secret);  // 没猜对就继续

    return 0;
}

运行过程:
第一次一定会让用户输入,不管输入什么都会执行循环体。如果输入7,条件不成立,循环结束;如果输入别的,循环继续。

三、更多生活中的例子

1. 密码输入

很多手机或游戏会先让你输入一次密码,如果错误就让你再输一次。程序保证至少让你输入一次,这正是do-while的特点。

#include <iostream>
#include <string>   // 使用字符串类型
using namespace std;

int main() {
    string correctPassword = "123456";  // 正确的密码
    string input;                       // 用户输入的密码

    do {
        cout << "请输入密码:";
        cin >> input;

        if (input != correctPassword) {
            cout << "密码错误,请重试。" << endl;
        }
    } while (input != correctPassword);  // 密码不对就继续

    cout << "密码正确,欢迎进入!" << endl;
    return 0;
}

2. 菜单选择

游戏开始时,先显示一次主菜单,用户选一个选项。如果用户选的是“退出”就结束,否则继续显示菜单。因为至少要让用户看到一次菜单,所以用do-while最自然。

#include <iostream>
using namespace std;

int main() {
    int choice;  // 用户的选择

    do {
        cout << "====== 游戏菜单 ======" << endl;
        cout << "1. 开始游戏" << endl;
        cout << "2. 查看帮助" << endl;
        cout << "3. 退出" << endl;
        cout << "请输入你的选择(1-3):";
        cin >> choice;

        if (choice == 1) {
            cout << "游戏已启动!" << endl;
        } else if (choice == 2) {
            cout << "帮助文档:按方向键移动,按空格跳跃。" << endl;
        } else if (choice == 3) {
            cout << "感谢游玩,再见!" << endl;
        } else {
            cout << "无效选择,请重新输入。" << endl;
        }
    } while (choice != 3);  // 只要没选退出,就继续显示菜单

    return 0;
}

3. 轮流回答问题

上课时老师点一个同学回答问题,如果不正确就再点下一个同学,但至少有一个同学会被问到。这个“先问一次再决定”的过程也很像do-while。

四、新手容易犯的错误

错误1:忘记在while后面加分号 ;

do {
    cout << "执行一次" << endl;
} while (true)   // 少了分号,编译错误!

正确写法是 while (true); 千万不要忘记分号。

错误2:把do-while的条件写成永远为真,变成无限循环

比如猜数字游戏,如果条件写成 while (guess != secret);guess 从来没有被改变(比如忘了 cin >> guess),那么循环永远不会结束。写代码时一定要确保循环体里能改变条件中用的变量。

错误3:误以为while条件后面的分号是while循环带的

有些小朋友会把普通while循环也加上分号:

while (a < 10);  // 这不是do-while,普通while加分号会变成空循环体,容易死循环

只有do-while才需要分号,普通while不需要。

错误4:条件写反了

比如想“输入正确就停止”,结果写成 while (guess == secret),那就会在猜对时继续循环,猜错时反而退出,完全反了。务必想清楚:循环条件表示“还需要继续的情况”。

五、do-while和while的区别

循环类型先做再检查?能否一次都不执行?
while先检查条件能(条件初始为假)
do-while先执行一次不能(至少执行一次)

当你需要保证循环体至少执行一次的时候,就选用do-while。比如:

  • 先让用户输入一次密码,如果不对再让ta重新输入。
  • 先显示一次菜单,根据用户的选择决定是否继续显示。
  • 先问一次问题,答错再问下一次。

如果条件一开始就可能是假的,并且你希望一次也不执行,那就用while。

六、小总结

记住口诀:do-while,先做再说,至少一次,条件后跟分号哦。

七、相关知识点指引

学完do-while,你最好再巩固一下:

  • while循环:先判断条件,可能一次都不执行。
  • for循环:常用于知道循环次数的情况(比如数数1到10)。
  • break和continue:在循环里可以提前跳出(break)或跳过本次剩余代码(continue),它们同样适用于do-while。
  • 死循环:如何避免条件永远成立导致程序卡死。

如果遇到“至少做一次”的需求,马上想到do-while;如果不知道要做多少次,但可能一次都不做,就乖乖用while或for吧。多写几次就熟练啦!

例题精讲

1单选题

关于do-while循环,下列说法正确的是( )

Ado-while循环可能一次都不执行循环体
Bdo-while循环至少执行一次循环体
Cdo-while循环与while循环完全相同
Ddo-while循环的循环条件在循环体之前判断
2单选题

以下代码执行后,输出结果是( ) int i = 5; do { cout << i << " "; i--; } while (i > 0);

A5 4 3 2 1
B5 4 3 2 1 0
C5 4 3 2
D5 4 3 2 1 0 -1 ...
3判断题

do-while循环的循环体至少会执行一次,即使条件从一开始就不成立。

4填空题
以下代码使用do-while循环计算1到n的平方和,请补全循环条件。
int n, sum = 0, i = 1;
cin >> n;
do {
    sum += i * i;
    i++;
} while (___);
cout << sum << endl;
5填空题
以下代码使用do-while循环反复从键盘输入一个整数,直到输入的是正数为止。请补全循环条件。
int num;
do {
    cin >> num;
} while (___);