Skip to content

C++ 循环

循环用于重复执行一段代码,直到满足特定条件。C++ 提供了三种循环语句:for循环、while循环和do-while循环。

1. for 循环

for循环是最常用的循环结构,适用于已知循环次数的情况。

1.1 基本语法

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

1.2 示例

cpp
#include <iostream>

int main() {
    // 打印 1 到 10
    for (int i = 1; i <= 10; i++) {
        std::cout << i << " ";
    }
    std::cout << std::endl;
    
    // 计算 1 到 100 的和
    int sum = 0;
    for (int i = 1; i <= 100; i++) {
        sum += i;
    }
    std::cout << "1 到 100 的和: " << sum << std::endl;
    
    return 0;
}

1.3 范围 for 循环(C++11)

范围 for 循环用于遍历容器或数组:

cpp
#include <iostream>
#include <vector>

int main() {
    // 遍历数组
    int arr[] = {1, 2, 3, 4, 5};
    for (int x : arr) {
        std::cout << x << " ";
    }
    std::cout << std::endl;
    
    // 遍历 vector
    std::vector<int> vec = {10, 20, 30, 40, 50};
    for (int x : vec) {
        std::cout << x << " ";
    }
    std::cout << std::endl;
    
    // 使用引用修改元素
    for (int& x : vec) {
        x *= 2;
    }
    for (int x : vec) {
        std::cout << x << " ";
    }
    std::cout << std::endl;
    
    return 0;
}

2. while 循环

while循环在条件为真时重复执行循环体,适用于不知道循环次数的情况。

2.1 基本语法

cpp
while (条件) {
    // 循环体
}

2.2 示例

cpp
#include <iostream>

int main() {
    // 打印 1 到 10
    int i = 1;
    while (i <= 10) {
        std::cout << i << " ";
        i++;
    }
    std::cout << std::endl;
    
    // 计算 1 到 100 的和
    int sum = 0;
    i = 1;
    while (i <= 100) {
        sum += i;
        i++;
    }
    std::cout << "1 到 100 的和: " << sum << std::endl;
    
    return 0;
}

3. do-while 循环

do-while循环先执行一次循环体,然后检查条件。即使条件为假,循环体也会至少执行一次。

3.1 基本语法

cpp
do {
    // 循环体
} while (条件);

3.2 示例

cpp
#include <iostream>

int main() {
    // 打印 1 到 10
    int i = 1;
    do {
        std::cout << i << " ";
        i++;
    } while (i <= 10);
    std::cout << std::endl;
    
    // 至少执行一次
    int count = 0;
    do {
        std::cout << "这个循环至少执行一次" << std::endl;
        count++;
    } while (count > 10);
    
    return 0;
}

4. 循环控制语句

4.1 break 语句

break语句用于立即退出循环:

cpp
#include <iostream>

int main() {
    // 找到第一个大于 100 的数
    for (int i = 1; i <= 1000; i++) {
        if (i > 100) {
            std::cout << "第一个大于 100 的数: " << i << std::endl;
            break;
        }
    }
    
    return 0;
}

4.2 continue 语句

continue语句用于跳过当前迭代,继续下一次迭代:

cpp
#include <iostream>

int main() {
    // 打印 1 到 10 中的偶数
    for (int i = 1; i <= 10; i++) {
        if (i % 2 != 0) {
            continue;  // 跳过奇数
        }
        std::cout << i << " ";
    }
    std::cout << std::endl;
    
    return 0;
}

4.3 goto 语句

goto语句用于无条件跳转到指定的标签,但通常不推荐使用:

cpp
#include <iostream>

int main() {
    int i = 0;
    
    start:
    std::cout << i << " ";
    i++;
    
    if (i <= 10) {
        goto start;
    }
    std::cout << std::endl;
    
    return 0;
}

5. 嵌套循环

循环可以嵌套使用,即在一个循环内部再使用另一个循环。

5.1 示例

cpp
#include <iostream>

int main() {
    // 打印乘法表
    for (int i = 1; i <= 9; i++) {
        for (int j = 1; j <= i; j++) {
            std::cout << j << " × " << i << " = " << i * j << "\t";
        }
        std::cout << std::endl;
    }
    
    return 0;
}

6. 无限循环

无限循环是指永远不会结束的循环,通常用于需要持续运行程序的情况。

6.1 示例

cpp
#include <iostream>

int main() {
    // 无限循环(需要手动终止)
    while (true) {
        std::cout << "这是一个无限循环" << std::endl;
        break;  // 添加 break 来终止循环
    }
    
    // 另一种无限循环
    for (;;) {
        std::cout << "这也是一个无限循环" << std::endl;
        break;  // 添加 break 来终止循环
    }
    
    return 0;
}

7. 循环的应用示例

7.1 计算阶乘

cpp
#include <iostream>

int main() {
    int n = 5;
    int factorial = 1;
    
    for (int i = 1; i <= n; i++) {
        factorial *= i;
    }
    
    std::cout << n << "! = " << factorial << std::endl;
    
    return 0;
}

7.2 斐波那契数列

cpp
#include <iostream>

int main() {
    int n = 10;
    int first = 0, second = 1;
    
    std::cout << "斐波那契数列前 " << n << " 项: ";
    for (int i = 0; i < n; i++) {
        std::cout << first << " ";
        int next = first + second;
        first = second;
        second = next;
    }
    std::cout << std::endl;
    
    return 0;
}

7.3 判断素数

cpp
#include <iostream>
#include <cmath>

bool is_prime(int n) {
    if (n <= 1) {
        return false;
    }
    for (int i = 2; i <= sqrt(n); i++) {
        if (n % i == 0) {
            return false;
        }
    }
    return true;
}

int main() {
    int n = 17;
    if (is_prime(n)) {
        std::cout << n << " 是素数" << std::endl;
    } else {
        std::cout << n << " 不是素数" << std::endl;
    }
    
    return 0;
}

8. 示例:综合运用

现在,让我们看一个综合运用各种循环的例子:

cpp
#include <iostream>
#include <vector>
#include <cmath>

// 判断素数
bool is_prime(int n) {
    if (n <= 1) {
        return false;
    }
    for (int i = 2; i <= sqrt(n); i++) {
        if (n % i == 0) {
            return false;
        }
    }
    return true;
}

int main() {
    // for 循环:打印 1 到 10
    std::cout << "for 循环:打印 1 到 10" << std::endl;
    for (int i = 1; i <= 10; i++) {
        std::cout << i << " ";
    }
    std::cout << "\n\n";
    
    // while 循环:计算 1 到 100 的和
    std::cout << "while 循环:计算 1 到 100 的和" << std::endl;
    int sum = 0;
    int i = 1;
    while (i <= 100) {
        sum += i;
        i++;
    }
    std::cout << "和: " << sum << "\n\n";
    
    // do-while 循环:至少执行一次
    std::cout << "do-while 循环:至少执行一次" << std::endl;
    int count = 0;
    do {
        std::cout << "这个循环至少执行一次" << std::endl;
        count++;
    } while (count > 10);
    std::cout << std::endl;
    
    // 范围 for 循环:遍历 vector
    std::cout << "范围 for 循环:遍历 vector" << std::endl;
    std::vector<int> vec = {1, 2, 3, 4, 5};
    for (int x : vec) {
        std::cout << x << " ";
    }
    std::cout << "\n\n";
    
    // break 语句:找到第一个大于 100 的数
    std::cout << "break 语句:找到第一个大于 100 的数" << std::endl;
    for (int i = 1; i <= 1000; i++) {
        if (i > 100) {
            std::cout << "第一个大于 100 的数: " << i << "\n\n";
            break;
        }
    }
    
    // continue 语句:打印偶数
    std::cout << "continue 语句:打印 1 到 10 中的偶数" << std::endl;
    for (int i = 1; i <= 10; i++) {
        if (i % 2 != 0) {
            continue;
        }
        std::cout << i << " ";
    }
    std::cout << "\n\n";
    
    // 嵌套循环:打印乘法表
    std::cout << "嵌套循环:打印乘法表" << std::endl;
    for (int i = 1; i <= 9; i++) {
        for (int j = 1; j <= i; j++) {
            std::cout << j << " × " << i << " = " << i * j << "\t";
        }
        std::cout << std::endl;
    }
    std::cout << std::endl;
    
    // 计算阶乘
    std::cout << "计算阶乘" << std::endl;
    int n = 5;
    int factorial = 1;
    for (int i = 1; i <= n; i++) {
        factorial *= i;
    }
    std::cout << n << "! = " << factorial << "\n\n";
    
    // 斐波那契数列
    std::cout << "斐波那契数列" << std::endl;
    int fib_n = 10;
    int first = 0, second = 1;
    std::cout << "前 " << fib_n << " 项: ";
    for (int i = 0; i < fib_n; i++) {
        std::cout << first << " ";
        int next = first + second;
        first = second;
        second = next;
    }
    std::cout << "\n\n";
    
    // 判断素数
    std::cout << "判断素数" << std::endl;
    int prime_n = 17;
    if (is_prime(prime_n)) {
        std::cout << prime_n << " 是素数" << std::endl;
    } else {
        std::cout << prime_n << " 不是素数" << std::endl;
    }
    
    return 0;
}

小结

C++ 循环包括:

  1. for 循环

    • 基本语法:for (初始化; 条件; 更新) { 循环体 }
    • 范围 for 循环(C++11):for (元素 : 容器) { 循环体 }
  2. while 循环

    • 基本语法:while (条件) { 循环体 }
  3. do-while 循环

    • 基本语法:do { 循环体 } while (条件);
  4. 循环控制语句

    • break:立即退出循环
    • continue:跳过当前迭代,继续下一次迭代
    • goto:无条件跳转(不推荐使用)
  5. 嵌套循环:在一个循环内部再使用另一个循环

  6. 无限循环:永远不会结束的循环

关键概念:

  • 循环条件:决定循环是否继续执行
  • 循环变量:用于控制循环次数
  • 循环体:需要重复执行的代码

掌握循环是编写 C++ 程序的基础,在后续章节中,我们将学习 C++ 的判断语句。