这份讲义将循环结构的核心语法、逻辑思想(枚举、标记、累加)与针对性练习结合,旨在帮助你彻底掌握 C++ 循环控制。
C++ 循环结构程序设计通关讲义
第一部分:循环基础与 while 系列
1. 核心概念
一个完整的循环通常包含四个要素:
1. 初始化:循环开始前变量的初始状态(如 int i = 1;)。
2. 条件表达式:判断循环是否继续(如 i <= 100)。
3. 循环体:重复执行的代码块。
4. 步长/更新:每次循环后变量的变化(如 i++),防止死循环。
2. while 循环(条件循环)
特点:先判断,后执行。可能一次都不执行。
* 不定行输入:while (cin >> n) 或 while (scanf("%d", &n) != EOF)。
* 次数循环简写:while (n--)。表示循环 n 次,n 减到 0 时停止。
3. do-while 循环
特点:先执行,后判断。至少执行一次。
do {
// 循环体
} while (条件); // 注意这里有分号!
✍️ 随堂练习
Q1. int n = 5; while(n--) { cout << n; } 的输出结果是?
解析:
n--是后置自减。第一次判断5为真,进入后n变4;最后一次判断1为真,进入后n变0。 答案:43210
Q2. [填空] 若想让循环体至少执行一次,应优先选择 __ 循环。
第二部分:for 循环(次数循环)
1. 语法框架
for (初始化; 条件; 步长) {
循环体;
}
- 多变量控制:
for(int i=1, j=10; i < j; i++, j--)。 - 枚举思想:把所有可能性都“数”一遍。例如从 1 到 n 逐个检查。
2. 典型应用
- 累加:
sum += i;(初始sum=0) - 累乘:
fact *= i;(初始fact=1)
✍️ 随堂练习
Q3. 执行以下代码后,sum 的值是多少?
int sum = 0;
for (int i = 1; i <= 5; i += 2) {
sum += i;
}
解析:i 的取值为 1, 3, 5。
1+3+5 = 9。
Q4. [编程] 用 for 循环计算 1 到 10 的乘积(阶乘)。
long long res = 1;
for (int i = 1; i <= 10; i++) {
res *= i;
}
第三部分:循环控制(break 与 continue)
1. 区别对比
- break:彻底结束。跳出当前整个循环体。
- continue:跳过本次。直接进入下一次条件的判断或步长更新。
2. 打标记思想 (Flag)
用于记录“是否发生过某事”。
* 例子:判断质数。只要发现一个约数,就把标志位 is_ok 设为 false 并 break。
✍️ 随堂练习
Q5. 下面程序段的输出是?
for (int i = 1; i <= 5; i++) {
if (i == 3) continue;
if (i == 5) break;
cout << i;
}
解析:i=1(输1), i=2(输2), i=3(跳过), i=4(输4), i=5(结束)。 答案:
124
第四部分:嵌套循环(多重循环)
1. 基本思想
外层循环执行一次,内层循环执行一整套。常用于处理二维数据、图形打印或组合问题。 * 例子:打印 3x3 星号矩形
for (int i = 1; i <= 3; i++) { // 控制行数
for (int j = 1; j <= 3; j++) { // 控制每行打印多少个
cout << "*";
}
cout << endl; // 换行
}
第五部分:综合过关练习(模拟考)
1. 选择题
执行 for(int i=0; i<10; i++); 后,变量 i 的值是( )
A. 9
B. 10
C. 11
D. 编译错误
解析:循环条件是
i < 10,当i增加到 10 时条件不成立跳出。
2. 代码分析题
写出下列代码的输出:
int count = 0;
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= i; j++) {
count++;
}
}
cout << count;
解析:i=1 时 j 循环 1 次;i=2 时 j 循环 2 次;i=3 时 j 循环 3 次。总共
1+2+3=6次。
3. 填空题
在不确定用户会输入多少个整数时,我们可以使用 while(________ >> n) 来读取数据。
4. 编程思维题(质数判断改进)
判断 n 是否为质数时,for 循环的条件 i < n 可以优化为 i <= sqrt(n)。为什么?
提示:如果 $n$ 有一个大于 $\sqrt{n}$ 的因数,则必然对应一个小于 $\sqrt{n}$ 的因数。
5. 找错误
指出下列死循环的原因:
for (int i = 10; i > 0; i++) {
cout << i << endl;
}
答案:初始化
i=10,步长是i++,i会越来越大,永远满足i > 0的条件。
💡 学习总结
- 计数用
for:知道具体循环多少次。 - 直到型用
while:只知道什么时候停止(如“直到读到文件末尾”)。 - 找东西用
break:找到了就停。 - 排除法用
continue:这个不要,看下一个。 - 初始化要注意:累加初始为 0,累乘初始为 1。
—— 本文来自火龙信奥(义乌睿码科技):义乌青少年信息学奥赛与编程教育平台,专注 CSP-J/S、NOIP、GESP 竞赛培训,线上线下融合教学,助力编程升学。网址:hlcoding.com