C++ while 循环

在实际编程中,我们经常需要让计算机重复做同一件事。比如把 1 到 100 的整数加起来,总不能手动写 100 行加法代码,对吧?C++ 提供了 “循环语句”,只要指定的条件成立,就能自动反复执行同一段代码。

在 C++ 中,循环语句共有 3 种:① while 循环;② do...while 循环;③ for 循环。这一节我们先来学习最基础的 while 循环。

C++ while 循环语法

while 在英文中是 “当……的时候” 的意思。在 C++ 中,while 循环表示:只要指定的条件成立,就一直重复执行花括号里的代码。

语法:

while (条件) {
    // 条件为 true 时循环执行的代码
}

说明:

程序执行到 while 语句时,会先判断小括号里的 “条件”。如果条件为 true(真),就会进入花括号 {} 执行里面的代码,这部分被重复执行的代码称为 “循环体”。

当执行完一轮 {} 内部的代码后,程序会再次回到 while 的小括号处重新判断条件。如果条件依然为 true,就继续执行下一轮……如此循环往复,直到某一次条件变为 false(假)才结束整个循环,接着往下执行后面的代码。

在使用 while 循环时,小伙伴们需要注意以下 2 点:

  • 循环体内部必须包含能让判断条件最终变为 false 的更新语句,比如 n++,否则循环会一直停不下来。
  • 即使循环体内部只有一条语句,也建议统一使用花括号 {} 括起来,让代码结构更清晰、更不容易出错。

C++ while 循环示例

下面我们先通过一个简单的计数例子,看看 while 循环是怎么一步步运行的。

示例 1:输出 1 到 5 的整数

#include <iostream>

int main() {
    int n = 1;

    while (n <= 5) {
        std::cout << n << '\n';
        n++;    // 计数加 1
    }

    return 0;
}

运行结果如下。

1
2
3
4
5

分析:

在这个例子中,变量 n 的初始值为 1,判断条件为 n <= 5。在循环体内部,每次先输出当前的 n,然后执行 n++ 让 n 的值加 1。具体执行过程如下:

  • 第 1 次判断:n 为 1,满足 n <= 5,进入循环输出 1,随后 n 变为 2。
  • 第 2 次判断:n 为 2,满足 n <= 5,进入循环输出 2,随后 n 变为 3。
  • 第 3 ~ 5 次判断:依次输出 3、4、5,当第 5 次循环执行完 n++ 后,n 变为 6。
  • 第 6 次判断:此时 n 为 6,判断条件 6 <= 5 返回 false,直接退出 while 循环。

由于 while 循环是 “先判断条件,再执行循环体”,如果第一次判断时条件就不成立,比如把上面代码中 n 的初值改成 6,那么花括号里的循环体一次都不会执行。

理清执行顺序后,我们再使用 while 循环来解决一个经典的累加问题:计算 1 到 100 所有整数的和。

示例 2:计算 1 到 100 的整数之和

#include <iostream>

int main() {
    int n = 1;
    int sum = 0;

    while (n <= 100) {
        sum += n;
        n++;
    }

    std::cout << "1 + 2 + 3 + ... + 100 = " << sum << '\n';
    return 0;
}

运行结果如下。

1 + 2 + 3 + ... + 100 = 5050

分析:

这里我们定义了两个整型变量:n 用来从 1 递增到 100,sum 用来保存累加的总和。注意在累加开始前,必须先把 sum 初始化为 0。如果只写 int sum; 而不赋初值,内存里会残留随机的垃圾值,算出来的总和就不对了。

在循环体内部,sum += n 等价于 sum = sum + n,用来把每一轮的 n 累加到 sum 中。

第 1 轮把 1 加进 sum 得到 1,第 2 轮再把 2 加进去得到 3……直到第 100 轮加完 100 后,n 自增变为 101。接着进行第 101 次判断时,101 <= 100 返回 false,程序退出循环并输出结果 5050。

提示 计算 1 到 100 的整数之和虽然可以直接套用等差数列求和公式 (1 + 100) * 100 / 2,但这里的重点是掌握循环累加的思路。在实际开发中,统计订单总额、逐行读取数据等任务都没有现成的数学公式,必须借助循环才能完成。

示例 3:计算 100 以内的奇数之和

#include <iostream>

int main() {
    int n = 1;
    int sum = 0;

    while (n < 100) {
        sum += n;
        n += 2;
    }

    std::cout << "1 + 3 + 5 + ... + 99 = " << sum << '\n';
    return 0;
}

运行结果如下。

1 + 3 + 5 + ... + 99 = 2500

分析:

n += 2; 表示每一轮循环让 n 的值增加 2,因此 n 会依次取 1、3、5、……、99,跳过所有偶数,把 100 以内的奇数全部累加到 sum 中。

对于这个例子来说,将判断条件 n < 100 改为 n <= 99 得到的结果也是一样的,因为当 n 从 99 加上 2 变成 101 时,这两个条件都会返回 false。同理,示例 2 中的 n <= 100 也等价于 n < 101,小伙伴们可以代入边界值验证一下。

C++ while 死循环

如果 while 小括号里的判断条件一直保持为 true,循环就永远不会自然停止,程序会一直运行下去,这种现象叫做 “死循环”。

示例 4:漏写更新语句导致死循环

#include <iostream>

int main() {
    int n = 1;

    while (n <= 5) {
        std::cout << "欢迎来到绿叶网\n";
    }

    return 0;
}

运行结果如下。

欢迎来到绿叶网
欢迎来到绿叶网
……
欢迎来到绿叶网

分析:

这就是初学者最容易写出的一种死循环。由于循环体内部漏写了 n++,变量 n 的值永远停留在 1,条件 n <= 5 始终为 true,屏幕就会不停地打印文字。如果在本地终端运行时遇到死循环,我们可以按下快捷键(Ctrl + C)强制停止程序。

除了漏写更新语句之外,如果在 while (条件) 的小括号后面不小心多加了一个英文分号(;),同样会导致死循环:

int n = 1;

// 正确方式
while (n <= 5) {
    std::cout << n << '\n';
    n++;
}

// 错误方式
while (n <= 5); {
    std::cout << n << '\n';
    n++;
}

在上面的错误方式中,while (n <= 5); 末尾的分号本身就是一条空语句,相当于循环体里什么也没干,后面的花括号 {} 跟 while 已经没有任何关系了。由于 n 一开始等于 1,在空循环里又不会改变,程序就会一直卡死在 while 这一行。

当然了,在实际开发中,有时我们也会故意写出 while (true),然后在循环体内部配合 break 语句,当满足某个条件时再主动跳出循环。但对于并非故意设计的意外死循环,平时写代码时一定要多加留意避免。

上一篇:

下一篇:

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号