C++ 循环结构知识点整理(CSP-J 重点版)


一、基础循环结构

循环类型 语法结构 执行流程 适用场景
for 循环 for(初始化; 条件; 更新){<br> // 循环体} 1. 执行初始化
2. 检查条件 → 真则执行循环体 → 执行更新 → 重复步骤2
3. 条件为假时退出循环
已知循环次数(如遍历数组)
while 循环 cpp<br>while(条件){<br> // 循环体<br>} 1. 检查条件 → 真则执行循环体 → 重复步骤1
2. 条件为假时直接退出
条件控制循环(如输入验证)
do-while 循环 cpp<br>do{<br> // 循环体<br>} while(条件); 1. 先执行循环体 → 检查条件 → 真则重复步骤1
2. 条件为假时退出
至少执行一次的情况(如菜单选择)

二、循环控制语句

关键字 作用 示例
break 立即终止当前循环 for(int i=0; i<10; i++){ if(i==5) break; // 循环在i=5时终止}
continue 跳过当前迭代,进入下一次循环 for(int i=0; i<10; i++){ if(i%2==0) continue; // 跳过偶数次循环}

三、循环嵌套与复杂度

  1. 嵌套循环规则

    // 打印九九乘法表
    for(int i=1; i<=9; i++){         // 外层循环控制行
        for(int j=1; j<=i; j++){     // 内层循环控制列
            cout << j << "*" << i << "=" << i*j << "\t";
        }
        cout << endl;
    }
    
    • 时间复杂度:外层循环执行 (N) 次,内层循环执行 (M) 次 → 总复杂度 (O(N \times M))
  2. 常见考题类型

    • 图形打印(三角形、菱形等)
    • 矩阵操作(转置、对角线求和等)
    • 多重条件筛选(质数判断、组合数计算等)

四、循环的经典应用

  1. 数组遍历

    int arr[5] = {2,5,8,3,1};
    for(int i=0; i<5; i++){ 
        cout << arr[i] << " "; // 输出:2 5 8 3 1
    }
    
  2. 累加/累乘计算

    // 计算1-100的和
    int sum = 0;
    for(int i=1; i<=100; i++){
        sum += i; // 最终sum=5050
    }
    
  3. 查找极值

    int max_val = INT_MIN;
    for(int num : {7,3,9,2,5}){
        if(num > max_val) max_val = num; // max_val=9
    }
    

五、常见错误与调试技巧

错误类型 示例错误代码 修正方案
死循环 cpp<br>while(1); 确保循环条件会变为假
循环变量未初始化 for(int i; i<5; i++){...} 初始化变量:for(int i=0; i<5; i++)
越界访问 int arr[3]={1,2,3};for(int i=0; i<=3; i++){...} 修改条件为 i < 3
混淆 breakcontinue for(...){<br> if(x) continue;<br> else break; // 逻辑错误} 根据需求选择合适的关键字

六、C++11 增强循环(了解)

// 遍历数组/容器(无需手动控制索引)
vector<int> nums = {2,4,6,8};
for(int num : nums){ 
    cout << num << " "; // 输出:2 4 6 8
}
  • 适用场景:简化容器遍历代码
  • 限制:无法直接获取元素索引

七、真题演练

题目(2023年CSP-J模拟题):
以下代码的输出结果是什么?

int sum = 0;
for(int i=1; i<=5; i++){
    if(i % 2 == 0) continue;
    sum += i;
}
cout << sum; // 输出:9(1+3+5)

附:循环选择决策树

是否需要至少执行一次?
├── 是 → 使用 do-while
└── 否 → 
    ├── 循环次数是否明确?
    │   ├── 是 → 使用 for
    │   └── 否 → 使用 while
    └── 需要遍历容器? → 使用范围for循环

0 条评论

目前还没有评论...