- 分享
循环
- 2025-3-1 10:37:40 @
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; // 跳过偶数次循环} |
三、循环嵌套与复杂度
-
嵌套循环规则
// 打印九九乘法表 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))
-
常见考题类型
- 图形打印(三角形、菱形等)
- 矩阵操作(转置、对角线求和等)
- 多重条件筛选(质数判断、组合数计算等)
四、循环的经典应用
-
数组遍历
int arr[5] = {2,5,8,3,1}; for(int i=0; i<5; i++){ cout << arr[i] << " "; // 输出:2 5 8 3 1 }
-
累加/累乘计算
// 计算1-100的和 int sum = 0; for(int i=1; i<=100; i++){ sum += i; // 最终sum=5050 }
-
查找极值
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 |
混淆 break 与 continue |
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 条评论
目前还没有评论...