一、循环语句的核心作用
在编程中,我们经常需要重复执行某些操作,比如:
- 计算 1 到 100 的和(重复加法运算)
- 遍历数组中的每个元素(重复访问操作)
- 处理用户输入直到满足退出条件(重复交互操作)
这时候就需要用到循环语句。C++ 提供了三种基本循环结构:for循环、while循环和do-while循环。本文将通过大量图解和示例,带你彻底掌握循环的使用方法。
二、for 循环:最常用的计数循环
2.1 语法结构
1 for(初始化表达式; 条件表达式; 更新表达式) {
2 循环体语句;
3 }
- 首先执行初始化表达式(仅执行一次)
- 检查条件表达式是否为真:
-
- 为真:执行循环体,然后执行更新表达式,回到步骤 2
-
- 为假:退出循环
2.2 经典示例:计算 1-100 的和
#include <iostream>
using namespace std;
int main() {
int sum = 0;
for(int i = 1; i <= 100; i++) { // i从1到100
sum += i; // 累加当前i的值
}
cout << "1-100的和为:" << sum << endl; // 输出5050
return 0;
}
2.3 灵活用法
- 初始化表达式可省略:
int i = 1;
for(; i <= 10; i++) { ... }
- 更新表达式可包含多个操作:
for(int i=0, j=10; i<j; i++, j--) { ... } // 相向移动
三、while 循环:条件驱动的循环
3.1 语法结构
初始化语句;
while(条件表达式) {
循环体语句;
更新语句;
}
- 先执行初始化语句(外部完成)
- 检查条件表达式:
-
- 为真:执行循环体和更新语句,回到步骤 2
-
- 为假:退出循环
3.2 示例:打印 1-5 的平方
#include <iostream>
using namespace std;
int main() {
int num = 1;
while(num <= 5) {
cout << num << "的平方是:" << num * num << endl;
num++; // 关键:必须包含更新条件,否则会无限循环
}
return 0;
}
3.3 注意事项
- 一定要包含使条件最终为假的更新语句,否则会形成死循环
- 适用于不确定循环次数,只知道终止条件的场景,比如:
while(userInput != 'q') { // 直到用户输入q才退出
获取用户输入;
}
四、do-while 循环:先执行后判断
4.1 语法结构
do {
循环体语句;
更新语句;
} while(条件表达式); // 注意末尾的分号!
- 先执行一次循环体和更新语句
- 检查条件表达式:
-
- 为真:回到步骤 1 继续执行
-
- 为假:退出循环
4.2 示例:至少执行一次的密码验证
#include <iostream>
#include <string>
using namespace std;
int main() {
string password;
do {
cout << "请输入密码(至少6位):";
cin >> password;
} while(password.length() < 6); // 密码不合法时继续循环
cout << "密码设置成功!" << endl;
return 0;
}
4.3 与 while 循环的区别
特性 | while 循环 | do-while 循环 |
执行顺序 | 先判断后执行 | 先执行后判断 |
最少执行次数 | 0 次 | 1 次 |
五、循环控制语句:break 和 continue
5.1 break 语句
- 作用:立即终止当前循环,跳出循环体
- 示例:找到第一个偶数
for(int i=1; i<=10; i++) {
if(i % 2 == 0) {
cout << "第一个偶数是:" << i << endl; // 输出2
break; // 找到后立即退出循环
}
}
5.2 continue 语句
- 作用:跳过本次循环的剩余语句,直接进入下一次循环
- 示例:打印 1-10 中的奇数
for(int i=1; i<=10; i++) {
if(i % 2 == 0) {
continue; // 遇到偶数就跳过本次循环
}
cout << i << " "; // 输出1 3 5 7 9
}
六、嵌套循环:循环中的循环
6.1 基本概念
一个循环体内包含另一个循环,称为嵌套循环。常见场景:
- 打印二维表格
- 遍历二维数组
- 实现排序算法(如冒泡排序)
6.2 示例:打印九九乘法表
#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;
}
6.3 执行流程
外层循环每执行一次,内层循环会完整执行一轮。总执行次数 = 外层次数 × 内层次数。
七、循环使用最佳实践
- 选择合适的循环类型:
-
- 已知循环次数:优先使用 for 循环
-
- 未知次数但知道终止条件:使用 while 循环
-
- 需要至少执行一次:使用 do-while 循环
- 避免死循环:
-
- 确保条件表达式最终会变为 false
-
- 调试时可设置循环次数上限
- 简化循环逻辑:
-
- 循环体尽量保持简洁,复杂逻辑可封装成函数
-
- 合理使用 break/continue 优化流程
- 循环变量作用域:
-
- for 循环的初始化变量(如 int i=0)作用域仅限于循环体
八、常见面试题解析
题目:用三种循环实现 1-100 的奇数和
8.1 for 循环实现
int sum = 0;
for(int i=1; i<=100; i+=2) {
sum += i;
}
8.2 while 循环实现
int sum = 0, i=1;
while(i <= 100) {
sum += i;
i += 2;
}
8.3 do-while 循环实现
int sum = 0, i=1;
do {
sum += i;
i += 2;
} while(i <= 100);
九、总结
三种循环的核心区别:
循环类型 | 执行顺序 | 适用场景 |
for 循环 | 先判断后执行 | 计数循环(已知次数) |
while 循环 | 先判断后执行 | 条件循环(未知次数) |
do-while | 先执行后判断 | 至少执行一次的循环 |
掌握循环语句是编写高效程序的基础,建议通过以下方式巩固:
- 手动推导循环执行流程
- 编写不同场景的循环代码(如质数判断、斐波那契数列)
- 调试时观察循环变量的变化过程
通过反复练习,你会对循环的使用越来越得心应手!如果有任何疑问,欢迎在评论区留言讨论~
求个三连!!!🥺