【C++】零基础入门 · 第 4 节:循环结构(while、for、do-while)

上一节我们学习了条件判断,这一节来学习循环结构。循环让程序能够重复执行某段代码,直到满足特定条件为止。C++ 提供了三种循环语句:whilefordo-while

1. while 循环:先判断后执行

while 循环在每次执行前先检查条件,如果条件为 true 就执行循环体,否则退出循环。

1.1 基本语法

cpp 复制代码
while (条件) {
    // 循环体:条件为 true 时重复执行
}

1.2 实例:打印 1 到 5

cpp 复制代码
#include <iostream>
using namespace std;

int main() {
    int i = 1;
    while (i <= 5) {
        cout << i << " ";
        i++;
    }
    cout << endl;
    return 0;
}

输出结果:1 2 3 4 5

这里 i++i = i + 1 的简写,每次循环让 i 增加 1。如果没有这行,i 永远是 1,条件 i <= 5 永远成立,就会变成死循环。

1.3 实例:计算 1 到 100 的和

cpp 复制代码
#include <iostream>
using namespace std;

int main() {
    int sum = 0;
    int i = 1;
    while (i <= 100) {
        sum += i;  // 等价于 sum = sum + i
        i++;
    }
    cout << "1 到 100 的和为:" << sum << endl;
    return 0;
}

输出结果:1 到 100 的和为:5050

2. for 循环:计数循环的首选

for 循环把初始化、条件判断、更新三个部分写在一行,结构更紧凑,特别适合已知循环次数的场景。

2.1 基本语法

cpp 复制代码
for (初始化; 条件; 更新) {
    // 循环体
}

执行顺序:初始化 → 判断条件 → 执行循环体 → 更新 → 判断条件 → ......

2.2 实例:打印 1 到 5

cpp 复制代码
#include <iostream>
using namespace std;

int main() {
    for (int i = 1; i <= 5; i++) {
        cout << i << " ";
    }
    cout << endl;
    return 0;
}

这段代码和上面 while 的例子效果完全一样,但写法更简洁。for 循环把变量初始化、循环条件、变量更新都集中在一行,逻辑一目了然。

2.3 实例:计算阶乘

计算 5 的阶乘(5! = 5 × 4 × 3 × 2 × 1):

cpp 复制代码
#include <iostream>
using namespace std;

int main() {
    int n = 5;
    int factorial = 1;
    for (int i = 1; i <= n; i++) {
        factorial *= i;  // 等价于 factorial = factorial * i
    }
    cout << n << "! = " << factorial << endl;
    return 0;
}

输出结果:5! = 120

2.4 for 循环的变体

for 循环的三个部分都可以省略(但分号不能省):

cpp 复制代码
// 省略初始化(在循环外初始化)
int i = 0;
for (; i < 5; i++) { ... }

// 省略更新(在循环体内更新)
for (int i = 0; i < 5; ) {
    cout << i << endl;
    i++;
}

// 无限循环(不推荐,除非配合 break 使用)
for (;;) {
    // 无限循环
}

3. do-while 循环:先执行后判断

do-while 循环先执行一次循环体,再判断条件。也就是说,无论条件是否成立,循环体至少会执行一次。

3.1 基本语法

cpp 复制代码
do {
    // 循环体:至少执行一次
} while (条件);  // 注意这里有分号

3.2 实例:简单的猜数字游戏

cpp 复制代码
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int main() {
    srand(time(0));  // 用当前时间作为随机数种子
    int target = rand() % 100 + 1;  // 生成 1-100 的随机数
    int guess;

    do {
        cout << "猜一个 1-100 的数字:";
        cin >> guess;
        if (guess > target) {
            cout << "大了!" << endl;
        } else if (guess < target) {
            cout << "小了!" << endl;
        }
    } while (guess != target);

    cout << "恭喜你猜对了!" << endl;
    return 0;
}

这个例子中,玩家至少要猜一次才能知道结果,所以用 do-whilewhile 更合适。

4. 循环控制:break 和 continue

4.1 break:立即跳出循环

cpp 复制代码
#include <iostream>
using namespace std;

int main() {
    for (int i = 1; i <= 10; i++) {
        if (i == 6) {
            break;  // 当 i 等于 6 时跳出循环
        }
        cout << i << " ";
    }
    cout << endl;
    return 0;
}

输出结果:1 2 3 4 5

4.2 continue:跳过本次循环

cpp 复制代码
#include <iostream>
using namespace std;

int main() {
    for (int i = 1; i <= 10; i++) {
        if (i % 2 == 0) {
            continue;  // 跳过偶数
        }
        cout << i << " ";
    }
    cout << endl;
    return 0;
}

输出结果:1 3 5 7 9

5. 嵌套循环

循环可以嵌套使用,外层循环每执行一次,内层循环就完整执行一遍。

5.1 实例:打印九九乘法表

cpp 复制代码
#include <iostream>
using namespace std;

int main() {
    for (int i = 1; i <= 9; i++) {
        for (int j = 1; j <= i; j++) {
            cout << j << " × " << i << " = " << i * j << "\t";
        }
        cout << endl;
    }
    return 0;
}

这段代码会输出完整的九九乘法表。\t 是制表符,用来对齐输出。

6. 三种循环怎么选

简单原则:

  • 已知循环次数 → 用 for
  • 不知道循环次数,但知道结束条件 → 用 while
  • 循环体至少执行一次 → 用 do-while

实际开发中 for 用得最多,while 次之,do-while 较少使用。

7. 常见错误

7.1 死循环

忘记更新循环变量会导致死循环:

cpp 复制代码
// 错误:i 永远是 1
int i = 1;
while (i <= 5) {
    cout << i << endl;
    // 忘记 i++
}

7.2 循环变量作用域

for 循环初始化中声明的变量,只在循环内部有效:

cpp 复制代码
for (int i = 0; i < 5; i++) {
    // i 在这里有效
}
// cout << i;  // 错误:i 未定义

8. 小结

这一节我们学习了三种循环结构:while 适合条件循环,for 适合计数循环,do-while 适合至少执行一次的场景。重点掌握 for 循环的写法和 breakcontinue 的用法。下一节我们将学习函数,让代码更加模块化。

相关推荐
西西弗Sisyphus几秒前
Qt 分类导航区的实现
开发语言·qt
zhanghaha13148 分钟前
Python进阶教程:27_subprocess 模块 零基础超详细教程
开发语言·python
兄弟加油,别颓废了。9 分钟前
bugku题目
开发语言·前端·python
zh_xuan13 分钟前
c++ string_view
开发语言·c++
阿里嘎多学长16 分钟前
2026-09-05 GitHub 热点项目精选
开发语言·程序员·github·代码托管
古少侠19 分钟前
用 DS随心转 把 AI 画的 Mermaid 流程图转成 Word 里的高清图
开发语言·c#·word
FFZero124 分钟前
[mpv架构] (4) demux 线程到底在“预读“什么?
c++·架构·音视频·多媒体
万年咸鱼25 分钟前
Java BufferedOutputStream 详解:原理、用法与性能优化
java·开发语言·性能优化
西西弗Sisyphus32 分钟前
C++ 实现 替代 OpenCV resize INTER_LINEAR 的一种方式
c++·opencv
万年咸鱼33 分钟前
Java BufferedInputStream 详解:原理、用法与实战
java·开发语言·python