跳转到内容

C++ for 循环

来自代码酷

C++ For循环[编辑 | 编辑源代码]

For循环是C++中最常用的控制流结构之一,用于在满足特定条件时重复执行代码块。它特别适合在已知循环次数的情况下使用,提供了初始化、条件检查和迭代三个关键部分。

基本语法[编辑 | 编辑源代码]

C++中for循环的标准语法如下:

for (初始化表达式; 条件表达式; 迭代表达式) {
    // 循环体
}
  • 初始化表达式:在循环开始时执行一次,通常用于初始化计数器变量
  • 条件表达式:每次循环前检查,如果为true则执行循环体
  • 迭代表达式:每次循环后执行,通常用于更新计数器

工作原理[编辑 | 编辑源代码]

flowchart TD A[开始] --> B[初始化] B --> C{条件检查} C -->|true| D[执行循环体] D --> E[迭代] E --> C C -->|false| F[结束循环]

基础示例[编辑 | 编辑源代码]

以下是一个简单的for循环示例,打印数字1到5:

#include <iostream>
using namespace std;

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

输出:

1 2 3 4 5

高级用法[编辑 | 编辑源代码]

多变量初始化[编辑 | 编辑源代码]

可以在for循环中初始化多个变量:

for (int i = 0, j = 10; i < j; i++, j--) {
    cout << "i: " << i << ", j: " << j << endl;
}

省略部分表达式[编辑 | 编辑源代码]

for循环的三个表达式都可以省略(但分号必须保留),创建无限循环:

for (;;) {
    // 无限循环
    break; // 通常需要break语句退出
}

范围for循环(C++11)[编辑 | 编辑源代码]

C++11引入了基于范围的for循环,简化容器遍历:

vector<int> nums = {1, 2, 3, 4, 5};
for (int num : nums) {
    cout << num << " ";
}

性能考虑[编辑 | 编辑源代码]

for循环的性能通常优于while循环,因为:

  • 循环控制逻辑集中在一处
  • 编译器更容易优化
  • 减少意外无限循环的风险

实际应用案例[编辑 | 编辑源代码]

计算阶乘[编辑 | 编辑源代码]

int factorial(int n) {
    int result = 1;
    for (int i = 1; i <= n; i++) {
        result *= i;
    }
    return result;
}

矩阵乘法[编辑 | 编辑源代码]

void matrixMultiply(int a[][N], int b[][N], int result[][N]) {
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            result[i][j] = 0;
            for (int k = 0; k < N; k++) {
                result[i][j] += a[i][k] * b[k][j];
            }
        }
    }
}

常见错误[编辑 | 编辑源代码]

1. 无限循环:忘记更新迭代变量

   for (int i = 0; i < 10; ) { // 缺少i++
       // 无限循环
   }

2. 作用域问题:在循环外访问循环变量

   for (int i = 0; i < 10; i++) {
       // ...
   }
   cout << i; // 错误:i未定义

3. 浮点数比较:使用浮点数作为计数器可能导致精度问题

   for (double d = 0.0; d != 1.0; d += 0.1) { // 可能永远不会等于1.0
       // ...
   }

数学表示[编辑 | 编辑源代码]

for循环可以表示为: for(init;cond;iter)init;while(cond){body;iter}

其中:

  • init是初始化表达式
  • cond是条件表达式
  • iter是迭代表达式
  • body是循环体

最佳实践[编辑 | 编辑源代码]

1. 使用有意义的变量名(避免简单的i,j,k) 2. 保持循环体简洁(考虑提取复杂逻辑为函数) 3. 优先使用前缀递增(++i)而非后缀(i++),可能有性能优势 4. 对于容器遍历,优先使用范围for循环 5. 避免在循环体内修改循环变量

练习建议[编辑 | 编辑源代码]

1. 编写一个程序,使用for循环打印乘法表 2. 实现一个函数,使用for循环计算斐波那契数列 3. 创建一个程序,使用嵌套for循环打印各种图案(如金字塔) 4. 使用范围for循环处理字符串中的每个字符