内容正文:
专题五 循环结构(二)
【考纲要求】
知识要点
考试条目
4.循环结构程序设计
(1)了解 while、do…while、for 循环语句的异同;
(2)掌握 while、do…while、for 循环语句的使用;
(3)了解循环的嵌套;
(4)掌握 break 语句和 continue 语句的使用。
【课时安排】
2课时
【知识梳理】
For 语句
一、for 循环的语法结构
for (初始化表达式; 条件表达式; 更新表达式) {
// 循环体(需要重复执行的代码)
}
核心要素:
初始化表达式:在循环开始时执行一次,通常用于定义并初始化循环变量(如 int i = 0)。
条件表达式:每次循环开始前检查,若为真(非0),执行循环体;若为假(0),退出循环。
更新表达式:每次循环体执行后运行,通常用于更新循环变量(如 i++)。
二、执行流程详解
步骤1:执行初始化表达式(仅一次)。
步骤2:检查条件表达式:
若为真 → 执行循环体 → 执行更新表达式 → 回到步骤2。
若为假 → 退出循环。
流程图:
开始 → 初始化 → 检查条件 → 条件为真 → 执行循环体 → 更新表达式 → 再次检查条件 → 条件为假 → 退出循环 → 后续代码
三、for 循环 vs. while 循环
特性
for 循环
while 循环
适用场景
已知循环次数(如遍历数组)
不确定循环次数(如条件循环)
结构紧凑性
将初始化、条件、更新集中在一行
分散在代码中
灵活性
可缺省任意表达式(如 for(;;))
必须显式写条件
四、关键注意事项
1. 表达式可缺省,但分号不可省略
int i = 0;
for (; i < 5; i++) { // 初始化已提前完成
// ...
}
for (;;) { // 等效于 while(1),无限循环
// ...
}
2. 避免在循环体内重复初始化变量
for (int i = 0; i < 3; i++) {
int i = 5; // 错误:内层i覆盖外层i,导致死循环
printf("%d ", i);
}
输出:5 5 5(外层循环变量被覆盖)。
五、典型应用场景
1. 遍历数组
int arr[] = {2, 4, 6, 8};
for (int i = 0; i < 4; i++) {
printf("%d ", arr[i]);
}
// 输出:2 4 6 8
2. 固定次数的循环
// 输出5次 "Hello"
for (int i = 0; i < 5; i++) {
printf("Hello ");
}
3. 嵌套循环(如打印乘法表)
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
printf("%d*%d=%-2d ", j, i, i*j);
}
printf("
");
}
六、练习题
1. 以下代码的输出结果是( )
for (int i = 0; i < 3; i++) {
printf("%d ", i);
}
答案:0 1 2
2. 补全代码,计算1~10的累加和:
int sum = 0;
for (_______; _______; _______) {
sum += i;
}
答案:int i = 1、i <= 10、i++
3. 以下代码的输出结果是( )
for (int i = 1; i <= 5; i += 2) {
printf("%d ", i);
}
答案:1 3 5
4. 编写代码,输出所有3位数中的水仙花数(如153=1³+5³+3³)。
for (int num = 100; num < 1000; num++) {
int a = num / 100, b = num / 10 % 10, c = num % 10;
if (a*a*a + b*b*b + c*c*c == num) {
printf("%d ", num);
}
}
5. 输入一个正整数n,用for循环计算n!(阶乘)。
int n, fact = 1;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
fact *= i;
}
printf("%d", fact);
Break 语句 和continue 语句
一、Break 语句
1. 核心作用
立即终止当前所在的循环或 switch 语句,并跳出其代码块,继续执行后续代码。
2. 适用场景
循环中:满足特定条件时提前退出循环。
switch 语句:结束 case 分支的执行(防止“穿透”)。
3. 语法示例
示例1:循环中使用 break
int i = 0;
while (i < 10) {
if (i == 5) {
break; // 当i=5时,直接退出循环
}
printf("%d ", i);
i++;
}
// 输出:0 1 2 3 4
示例2:switch 中使用 break
char grade = 'B';
switch (grade) {
case 'A':
printf("优秀");
break;
case 'B':
printf("良好");
break; // 结束switch语句
default:
printf("未知");
}
// 输出:良好
4. 注意事项
仅退出当前层循环:若嵌套循环,break 仅跳出最内层循环。
不可用于条件语句:break 不能用于 if 或其他非循环/非switch结构。
二、continue 语句
1. 核心作用
跳过当前循环迭代的剩余代码,直接进入下一次循环的条件判断(while/do-while)或更新表达式(for)。
2. 适用场景
忽略某些特定值的处理(如跳过偶数、跳过无效数据)。
优化循环效率,减少不必要的计算。
3. 语法示例
示例1:跳过偶数的输出
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) {
continue; // 跳过偶数,直接进入i++
}
printf("%d ", i);
}
// 输出:1 3 5 7 9
示例2:在 while 循环中跳过特定条件
int i = 0;
while (i < 5) {
i++;
if (i == 3) {
continue; // 跳过i=3的后续代码
}
printf("%d ", i);
}
// 输出:1 2 4 5
4. 注意事项
不终止循环:仅跳过当前迭代,循环继续执行。
在 for 循环中的行为:continue 会跳过循环体剩余代码,但仍会执行更新表达式(如 i++)。
三、break 与 continue 的对比
特性
作用范围
循环影响
典型场景
break
循环或 switch 语句
立即终止整个循环
搜索到目标后提前退出
continue
仅循环内部
仅跳过当前迭代,继续下一次循环
过滤不符合条件的数据项
【限时练习】
1. 以下代码的输出结果是( )
for (int i = 0; i < 5; i++) {
if (i == 3) break;
printf("%d ", i);
}
A. 0 1 2
B. 0 1 2 3
C. 0 1 2 3 4
D. 0 1 2 3 4 5
【答案】A
2.以下代码的循环次数是( )
for (int i = 1; i <= 10; i += 2) {
i *= 2;
}
A. 2 次
B. 3 次
C. 4 次
D. 5 次
【答案】B
3. 以下代码的输出结果是( )
for (int i = 0; i < 5; i++) {
if (i % 2 == 0) continue;
printf("%d ", i);
}
A. 0 1 2 3 4
B. 1 2 3 4
C. 1 3 4
D. 1 3
【答案】D
4. 以下代码的执行次数是( )
for (int i = 0; i < 10; i += 2) {
i *= 3;
}
A. 0 次
B. 1 次
C. 2 次
D. 3次
【答案】B
5.以下代码的循环次数是( )
for (int i = 0; i < 10; i++) {
if (i > 5) continue;
i++;
}
A. 3 次
B. 4 次
C. 5 次
D. 6 次
【答案】A
6.以下代码的输出结果是( )
int sum = 0;
for (int i = 1; i <= 10; i++) {
if (i % 3 == 0) {
sum += i;
continue;
}
sum -= i;
}
printf("%d", sum);
A. -22
B. -18
C. -15
D. -10
【答案】B
7.for循环的初始化部分只能声明变量,不能进行赋值操作。( )
【答案】×
8.在 C 语言中,for循环的三个表达式都可以省略。( )
【答案】√
9.for循环的循环体必须用花括号{}包围。( )
【答案】×
10.编写程序:输入一个整数,判断其是否为水仙花数(如 153=1³+5³+3³)。
【答案】
#include <stdio.h>
#include <math.h>
int main() {
int num, original, sum = 0, digit;
scanf("%d", &num);
original = num;
while (num > 0) {
digit = num % 10;
sum += pow(digit, 3);
num /= 10;
}
printf("%s", sum == original ? "是水仙花数" : "不是水仙花数");
return 0;
}
11.编写程序:打印杨辉三角形的前 10 行。
【答案】
#include <stdio.h>
int main() {
int n = 10, i, j, coef;
for (i = 0; i < n; i++) {
for (j = 0; j <= n - i; j++) printf(" "); // 对齐
for (j = 0; j <= i; j++) {
if (j == 0 || i == j) coef = 1;
else coef = coef * (i - j + 1) / j;
printf("%4d", coef);
}
printf("
");
}
return 0;
}
【内容小结】
学科网(北京)股份有限公司
$$