文章目录
一般情况下,语句是按顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。循环结构是编程中用于重复执行某段代码的强大工具。C语言提供了三种主要的循环结构:for 循环、while 循环和 do…while 循环。
1. while 循环
while 循环会在条件为真时反复执行循环体内的代码。它先判断条件,再决定是否执行。
语法:
while (condition) {
// 要重复执行的代码(循环体)
}
执行流程:
1、判断 condition 是否为真(非零)。
2、如果为真,执行循环体内的语句。
3、执行完毕后,再次回到第1步判断条件。
4、如果条件为假(零),则退出循环,执行后续代码。
示例:打印数字 1 到 5
#include <stdio.h>
int main() {
int i = 1; // 初始化计数器
while (i <= 5) { // 循环条件
printf("%d\n", i);
i++; // 更新计数器
}
return 0;
}
输出:
1
2
3
4
5
特点: 如果初始条件就不满足,循环体一次都不会执行。
2. do…while 循环
do…while 循环会先执行一次循环体,然后再判断条件。这意味着循环体至少会执行一次。
语法:
do {
// 要重复执行的代码(循环体)
} while (condition);
执行流程:
1、先执行一次循环体内的语句。
2、然后判断 condition 是否为真。
3、如果为真,再次执行循环体。
4、如果为假,则退出循环。
示例:验证用户输入
#include <stdio.h>
int main() {
int number;
do {
printf("请输入一个正整数: ");
scanf("%d", &number);
} while (number <= 0); // 如果输入不满足条件,则继续循环提示输入
printf("你输入的是: %d\n", number);
return 0;
}
特点: 无论条件如何,循环体至少执行一次。
3. for 循环
for 循环是最常用、最紧凑的循环,它将初始化、条件判断和计数器更新都写在一行。
语法:
for (initialization; condition; update) {
// 要重复执行的代码(循环体)
}
1、initialization(初始化):循环开始前执行一次,通常用于初始化计数器。
2、condition(条件):每次循环前都会检查,为真则继续循环。
3、update(更新):每次循环体执行完毕后执行,通常用于更新计数器。
执行流程:
1、执行 initialization(仅一次)。
2、检查 condition。
3、如果条件为真,执行循环体。
4、执行 update。
5、回到第2步。
示例:打印数字 1 到 5
#include <stdio.h>
int main() {
for (int i = 1; i <= 5; i++) {
printf("%d\n", i);
}
return 0;
}
输出:
1
2
3
4
5
特点: 结构清晰,特别适合已知循环次数的场景。
4. 循环控制语句
控制语句 | 描述 |
---|---|
break语句 | 终止循环或 switch 语句,程序流将继续执行紧接着循环或 switch 的下一条语句。 |
continue 语句 | 告诉一个循环体立刻停止本次循环迭代,重新开始下次循环迭代。 |
goto 语句 | 将控制转移到被标记的语句。但是不建议在程序中使用 goto 语句。 |
4.1、break 语句
作用:立即终止整个循环,跳出循环体,执行循环后面的代码。
示例:在找到所需元素后提前退出循环。
for (int i = 1; i <= 10; i++) {
if (i == 5) {
break; // 当 i 等于 5 时,终止循环
}
printf("%d\n", i);
}
// 输出: 1 2 3 4
4.2、continue 语句
作用:跳过本次循环中剩余的语句,直接进入下一次循环的条件判断(for 循环会先执行 update 部分)。
示例:跳过某些不需要处理的情况。
for (int i = 1; i <= 5; i++) {
if (i == 3) {
continue; // 跳过 i=3 这次的打印
}
printf("%d\n", i);
}
// 输出: 1 2 4 5
4.3、goto 语句
goto语句是无条件跳转,慎用。
语法:
goto label; // 跳转到标签处
// ... 其他代码 ...
label: // 标签定义
// 要执行的代码
5. 无限循环
有时我们需要创建一个永不停止的循环(例如服务器的主循环),可以通过以下方式实现:
使用 while:
while (1) { // 条件永远为真
// 循环体
}
使用 for:
for (;;) { // 三个表达式都省略
// 循环体
}
在无限循环中,通常使用 break 语句在满足某个条件时退出。
如何选择循环
1、for 循环:最常用。当你事先知道循环需要执行多少次时,它是首选。例如,遍历数组、重复操作n次。
2、while 循环:当你不确定要循环多少次,而是根据某个条件是否满足来决定时使用。例如,读取文件直到末尾,等待用户输入有效值。
3、do…while 循环:当你希望循环体至少执行一次,然后再根据条件判断是否继续时使用。例如,显示菜单并等待用户选择。
总结
循环类型 | 特点 | 适用场景 |
---|---|---|
while | 先判断,后执行(可能执行0次) | 条件驱动,循环次数未知 |
do…while | 先执行1次,后判断(至少执行1次) | 需要至少执行一次的情况 |
for | 结构紧凑,集初始化、判断、更新于一体 | 计数驱动,循环次数已知 |