【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 的用法。下一节我们将学习函数,让代码更加模块化。

相关推荐
森G几秒前
61、信号与槽机制在 TCP 编程中的应用---------网络编程
网络·c++·qt·网络协议·tcp/ip
syagain_zsx13 分钟前
STL 之 vector 讲练结合
c++·算法
聚名网39 分钟前
域名net,com,cn有区别吗?有哪些不同呢?
服务器·开发语言·php
牛油果子哥q42 分钟前
STL set与map底层精讲,红黑树适配原理、有序去重特性、迭代器遍历、API实战与面试核心考点全解
开发语言·数据结构·c++·面试
foundbug99944 分钟前
直流电机 PID 速度控制 MATLAB 仿真程序
开发语言·matlab
奇妙方程式1 小时前
2026年第九届GXCPC广西大学生程序设计大赛(热身赛)题解
c++·编程比赛·编程竞赛·gxcpc
Tian_Hang2 小时前
C++原型模式(Protype)
开发语言·c++·算法
天天讯通2 小时前
OKCC 呼叫中心安全性能全解析:技术防护与管理措施指南
大数据·开发语言·网络·人工智能·安全·语音识别
xufengzhu2 小时前
第三方 Python 库 redis-py + hiredis 的使用
开发语言·redis·python
jingling5553 小时前
go | 环境安装和快速入门
开发语言·后端·golang