物协 C Gateway Course 3 循环语句详解
引言
在C语言中,循环语句是一种强大的编程结构,允许我们重复执行一组语句。循环语句提供了有效的方法来处理需要反复执行的任务,从而提高了程序的灵活性和效率。C语言中有三种主要的循环语句:for
、while
和do-while
。
1. for循环语句
for (初始化表达式; 条件表达式; 更新表达式) {
// 循环体
}
-
在C语言中,
for
循环的三个表达式的执行顺序如下:-
初始化表达式: 在
for
循环开始时,初始化表达式会被执行一次。这个表达式通常用于初始化循环控制变量,例如int i = 0;
。这个初始化表达式是可选的,你可以在for
循环中不使用它。 -
条件表达式: 在每次循环迭代开始之前,条件表达式会被求值。如果条件为真(非零),则执行循环体;如果条件为假(零),则退出循环。如果条件表达式为空,它被假定为始终为真。
-
更新表达式: 在每次循环迭代结束后,更新表达式会被执行。这个表达式通常用于更新循环控制变量的值,例如
i++
(递增)或i--
(递减)。这个更新表达式是可选的,你可以在for
循环中不使用它。
综合起来,
for
循环的执行过程如下:- 执行初始化表达式(一次)。
- 求值条件表达式,如果为真执行循环体,否则退出循环。
- 执行循环体。
- 执行更新表达式。
- 回到步骤2,重复以上过程。
这个流程一直持续,直到条件表达式为假为止,然后程序跳出循环。
-
2. while循环语句
while (条件表达式) {
// 循环体
}
- 条件表达式: 在每次循环迭代前求值,如果条件为真,则执行循环体;如果为假,则退出循环。这是一个必须的表达式,控制循环何时终止。例如,
i <= 5
表示只要i
小于或等于 5 就继续执行循环。
3. do-while循环语句
do {
// 循环体
} while (条件表达式);
- 条件表达式: 在每次循环迭代后求值,如果条件为真,则继续执行循环体;如果为假,则退出循环。这是一个必须的表达式,确保循环体至少执行一次。例如,
i <= 5
表示只要i
小于或等于 5 就继续执行循环。
4. 循环控制语句
-
break语句: 用于立即终止循环,跳出循环体。当
break
语句执行时,程序将跳出当前循环,不再执行循环体内的后续语句,直接执行循环后的代码。示例:
for (int i = 1; i <= 10; i++) { if (i == 5) { break; // 当 i 等于 5 时,跳出循环 } printf("%d ", i); }
-
continue语句: 用于跳过当前循环迭代的剩余部分,进入下一次迭代。当
continue
语句执行时,程序将跳过当前循环体内continue
语句之后的部分,直接进行下一次循环迭代。示例:
for (int i = 1; i <= 5; i++) { if (i == 3) { continue; // 当 i 等于 3 时,跳过本次循环迭代 } printf("%d ", i); }
5.三种循环之间的区别
for
、while
和 do-while
是 C 语言中的三种主要循环结构,它们在语法和执行时机上有一些区别:
-
for 循环:
- 语法:
for (初始化表达式; 条件表达式; 更新表达式) { 循环体 }
- 执行顺序: 初始化表达式只在循环开始前执行一次,条件表达式在每次迭代前求值,更新表达式在每次迭代结束后执行。
- 用途: 适用于循环次数已知的情况,例如遍历数组。
for (int i = 0; i < 5; i++) { // 循环体 }
- 语法:
-
while 循环:
- 语法:
while (条件表达式) { 循环体 }
- 执行顺序: 条件表达式在每次迭代前求值,如果为真则执行循环体,否则退出循环。
- 用途: 适用于循环次数不确定但有可能为零的情况。
int i = 0; while (i < 5) { // 循环体 i++; }
- 语法:
-
do-while 循环:
- 语法:
do { 循环体 } while (条件表达式);
- 执行顺序: 先执行循环体,然后条件表达式在每次迭代后求值,如果为真则继续执行循环体,否则退出循环。保证循环体至少执行一次。
- 用途: 适用于需要确保循环体至少执行一次的情况。
int i = 0; do { // 循环体 i++; } while (i < 5);
- 语法:
总的来说,这三种循环结构在不同的场景下有不同的应用。选择合适的循环结构取决于具体问题的需求。for
通常用于已知迭代次数的情况,while
适用于不确定次数的情况,而 do-while
用于确保至少执行一次的情况。
6.循环的嵌套
循环的嵌套是指在一个循环结构内部包含另一个或多个循环结构。这种结构可以用来处理复杂的问题,其中需要对问题的多个层面进行迭代。C语言支持循环的嵌套,允许在一个循环体内使用另一个完整的循环结构。
以下是一个简单的例子,展示了两个嵌套的循环,其中外层循环使用 for
,而内层循环使用 while
:
#include <stdio.h>
int main() {
// 外层循环
for (int i = 1; i <= 3; i++) {
printf("外层循环,第 %d 次迭代\n", i);
// 内层循环
int j = 1;
while (j <= 2) {
printf(" 内层循环,第 %d 次迭代\n", j);
j++;
}
}
return 0;
}
在这个例子中,外层循环执行3次,而内层循环每次在外层循环的一次迭代中执行2次。因此,内层循环的总迭代次数是外层循环次数的两倍。
需要注意的是,循环的嵌套可能会导致代码可读性下降,因此应该谨慎使用。在使用嵌套循环时,确保代码结构清晰,并使用适当的缩进和注释来使代码易于理解。
循环的嵌套在处理多维数组、矩阵,或者需要对问题的多个层面进行迭代的情况下非常有用。