9. C 语言 循环控制结构详解
本章目录:
- 前言
- 1. C 语言中的循环结构
- 1.1 `while` 循环
- 基本语法:
- 示例:求 1 到 100 的奇数和
- 1.2 `for` 循环
- 基本语法:
- 示例:求 1 到 100 的偶数和
- 1.3 `do...while` 循环
- 基本语法:
- 示例:用 `do...while` 求平方根
- 1.4 无限循环
- 2. 循环控制语句
- 2.1 `break` 语句
- 示例:使用 `break` 提前退出循环
- 2.2 `continue` 语句
- 示例:使用 `continue` 输出 100 到 200 之间不能被 3 整除的数字
- 2.3 `goto` 语句
- 示例:使用 `goto` 跳转
- 3. 总结
前言
在 C 语言中,循环是一种非常重要的控制结构,它允许程序员重复执行一段代码,直到满足某个条件。使用循环,我们可以避免编写大量重复的代码,使程序更加简洁、高效。本文将详细介绍 C 语言中的三种主要循环结构:while
循环、for
循环、do...while
循环,并结合具体实例,帮助你理解它们的使用方式、特点和实际应用场景。
1. C 语言中的循环结构
1.1 while
循环
while
循环是最基本的循环结构,它首先检查循环条件,如果条件为真,则执行循环体内的代码,并在每次执行完后再次检查条件。如果条件为假,循环终止。
基本语法:
while (条件) {
// 循环体
}
示例:求 1 到 100 的奇数和
#include <stdio.h>
int main() {
int sum = 0;
int num = 1; // 从 1 开始
while (num <= 100) {
sum += num;
num += 2; // 每次增加 2,得到下一个奇数
}
printf("1 到 100 的奇数和为: %d\n", sum);
return 0;
}
在这个例子中,while
循环从 1 开始,每次加 2,直到达到 100 为止。每次加的数字是奇数,所以最终计算的是奇数的和。
1.2 for
循环
for
循环是一种更加简洁和常见的循环结构。它通常用于已知循环次数的场景。for
循环在一行内定义了初始化、循环条件、以及循环体内的更新步骤,简化了代码的管理。
基本语法:
for (初始化; 条件; 更新) {
// 循环体
}
示例:求 1 到 100 的偶数和
#include <stdio.h>
int main() {
int sum = 0;
for (int num = 2; num <= 100; num += 2) {
sum += num;
}
printf("1 到 100 的偶数和为: %d\n", sum);
return 0;
}
在这个例子中,for
循环从 2 开始,每次加 2,直到 100。这个循环简洁地计算了 1 到 100 之间偶数的和。
1.3 do...while
循环
do...while
循环与 while
循环的主要区别在于它首先执行循环体,然后再检查条件。这意味着无论条件是否为真,循环体至少会执行一次。
基本语法:
do {
// 循环体
} while (条件);
示例:用 do...while
求平方根
#include <stdio.h>
double DoSqrt(double z) {
double a = 1, b = 0, c = 0;
do {
if (b * b < z) {
b += a;
} else {
c = b;
b -= a;
a /= 10;
}
} while (a > 0.000001); // 继续直到精度满足要求
return (b + c) / 2;
}
int main() {
double x, y;
printf("请输入一个数字:");
scanf("%lf", &x);
if (x < 0) {
printf("输入错误。\n");
} else {
y = DoSqrt(x);
printf("%g 的平方根为: %g.\n", x, y);
}
return 0;
}
在这个例子中,do...while
循环用于计算数字的平方根。由于我们至少需要执行一次平方根的计算,所以使用了 do...while
循环。
1.4 无限循环
有时,我们希望循环永不停止,直到手动中断。一个典型的无限循环就是没有条件的 for
循环:
for(;;) {
// 无限执行的代码
}
例如:
#include <stdio.h>
int main() {
for(;;) {
printf("该循环会永远执行下去!\n");
}
return 0;
}
当条件为空时,for
循环会默认条件为真,因此会无限执行,直到我们通过外部操作(如按 Ctrl + C
)中断程序。
2. 循环控制语句
除了常规的循环结构,C 语言还提供了一些控制语句,允许我们在循环中更灵活地控制执行流:
2.1 break
语句
break
语句用于立即终止循环(或 switch
语句)。当程序执行到 break
语句时,循环会停止,并且程序会继续执行循环之后的代码。
示例:使用 break
提前退出循环
#include <stdio.h>
int main() {
for (int i = 1; i <= 10; i++) {
if (i == 5) {
break; // 当 i 等于 5 时,退出循环
}
printf("%d ", i);
}
return 0;
}
在这个例子中,循环会输出 1 2 3 4
,因为当 i
等于 5 时,break
语句会终止循环。
2.2 continue
语句
continue
语句用于跳过当前循环的剩余部分,并直接开始下一次循环。当程序遇到 continue
语句时,它会停止当前迭代,立即进入下一次循环的判断阶段。
示例:使用 continue
输出 100 到 200 之间不能被 3 整除的数字
#include <stdio.h>
int main() {
for (int n = 100; n <= 200; n++) {
if (n % 3 == 0) {
continue; // 如果 n 能被 3 整除,跳过当前循环
}
printf("%d ", n);
}
return 0;
}
此程序会输出 100 到 200 之间所有不能被 3 整除的数字。每次 n % 3 == 0
时,continue
会跳过当前循环,继续检查下一个数字。
2.3 goto
语句
goto
语句可以将程序控制流跳转到标记的位置。虽然它在某些特定场景下可能有用,但它的使用会使得程序的结构混乱,因此不推荐在大多数情况下使用 goto
语句。
示例:使用 goto
跳转
#include <stdio.h>
int main() {
int num = 0;
start: // 标签
printf("请输入一个正数:");
scanf("%d", &num);
if (num <= 0) {
printf("输入无效,请重新输入。\n");
goto start; // 如果输入无效,跳转到 start 标签
}
printf("您输入的正数是: %d\n", num);
return 0;
}
在这个例子中,goto
用于实现一种简单的输入验证机制。虽然可以工作,但这种方式不如 while
循环更简洁和清晰。
3. 总结
循环结构是 C 语言中的基础且强大的控制结构,它使得我们能够有效地执行重复的任务。掌握 while
、for
和 do...while
循环的使用,可以使你更高效地处理各种问题。除了基本的循环结构外,循环控制语句如 break
、continue
和 goto
提供了更灵活的执行方式,但它们需要谨慎使用,以保持代码的清晰和可维护性。
while
循环适用于事先不知道循环次数的场景;for
循环适用于已知循环次数或需要特定步骤增量的场景;do...while
循环确保至少执行一次循环体。
了解并掌握这些循环结构的应用,能够让你写出更加高效和优雅的 C 语言程序。