循环结构概述
循环结构是 C 语言中重要的程序控制结构之一,它允许程序重复执行一段代码,直到满足特定的条件为止。通过循环结构,可以有效地处理需要重复执行的任务,提高代码的效率和可读性。
C 语言中有三种主要的循环结构:while
循环、do - while
循环和for
循环。每种循环都有其特点和适用场景,下面将分别进行详细介绍。
while
循环
- 语法格式
while (表达式) {
// 循环体语句
}
- 执行过程:首先计算表达式的值,若表达式的值为真(非零值),则执行循环体中的语句;执行完循环体后,再次计算表达式的值,若仍为真,则继续执行循环体,如此反复,直到表达式的值为假(零值)时,循环结束。
- 示例:计算 1 到 100 的整数之和。
#include <stdio.h>
int main() {
int i = 1;
int sum = 0;
while (i <= 100) {
sum += i;
i++;
}
printf("1到100的整数之和为:%d\n", sum);
return 0;
}
do - while
循环
- 语法格式
do {
// 循环体语句
} while (表达式);
- 执行过程:先执行一次循环体中的语句,然后计算表达式的值。若表达式的值为真,则继续执行循环体;否则,循环结束。与
while
循环不同的是,do - while
循环至少会执行一次循环体。 - 示例:要求用户输入一个正整数,直到输入合法为止。
#include <stdio.h>
int main() {
int num;
do {
printf("请输入一个正整数:");
scanf("%d", &num);
} while (num <= 0);
printf("你输入的正整数是:%d\n", num);
return 0;
}
for
循环
- 语法格式
for (表达式1; 表达式2; 表达式3) {
// 循环体语句
}
- 执行过程:首先计算表达式 1,通常用于初始化循环变量;然后计算表达式 2,若其值为真,则执行循环体语句;执行完循环体后,计算表达式 3,通常用于更新循环变量。接着再次计算表达式 2,重复上述过程,直到表达式 2 的值为假时,循环结束。
- 示例:打印出 1 到 10 的乘法表。
#include <stdio.h>
int main() {
int i, j;
for (i = 1; i <= 10; i++) {
for (j = 1; j <= i; j++) {
printf("%d x %d = %d\t", j, i, i * j);
}
printf("\n");
}
return 0;
}
循环嵌套
- 在 C 语言中,循环结构可以嵌套使用,即在一个循环体内可以包含另一个循环。常见的有
for
循环嵌套for
循环、while
循环嵌套while
循环、for
循环嵌套while
循环等。 - 循环嵌套常用于处理二维数组、矩阵运算、图形绘制等需要多层循环控制的问题。例如,用
for
循环嵌套打印一个九九乘法表,外层循环控制行数,内层循环控制列数。
循环控制语句
break
语句:用于跳出当前循环结构,提前结束循环。当break
语句在循环体中被执行时,程序将立即跳出循环,继续执行循环后面的语句。它通常与条件语句一起使用,用于在满足特定条件时提前结束循环。continue
语句:用于跳过当前循环体中剩余的语句,直接进入下一次循环的条件判断。当continue
语句在循环体中被执行时,程序将不再执行continue
后面的语句,而是直接跳转到循环条件的判断处,继续下一次循环。
循环结构的应用场景
- 数值计算:如计算数列的和、积,求阶乘,迭代计算等。例如,使用循环计算斐波那契数列的前
n
项。 - 数据处理:对数组、字符串等数据结构进行遍历、查找、排序等操作。例如,使用循环对一个整数数组进行冒泡排序。
- 图形绘制:通过循环控制图形的行数和列数,实现各种简单图形的绘制,如矩形、三角形、菱形等。
- 模拟与仿真:在一些模拟程序中,循环可以用于模拟时间的流逝、事件的重复发生等。例如,模拟抛硬币
n
次,统计正面和反面出现的次数。
循环结构使用注意事项
- 确保循环条件能够在某个时刻变为假,否则循环将无限进行下去,导致程序陷入死循环。
- 注意循环变量的初始化和更新,避免出现逻辑错误。在使用
for
循环时,要正确设置表达式 1、表达式 2 和表达式 3;在使用while
和do - while
循环时,要在循环体中适当更新循环条件中涉及的变量。 - 合理选择循环结构。不同的循环结构适用于不同的场景,
while
循环适用于循环次数不确定的情况,for
循环适用于循环次数已知的情况,do - while
循环适用于至少要执行一次循环体的情况。 - 当使用循环嵌套时,要注意内层循环和外层循环的关系,避免出现混淆和错误。同时,要注意循环嵌套的层数不宜过多,以免导致程序的可读性和性能下降。
习题
基础题
- 求 1 到 n 的和:编写一个程序,让用户输入一个正整数
n
,然后计算并输出 1 到n
的所有整数的和。 - 计算阶乘:输入一个非负整数
n
,计算并输出n
的阶乘(n!
),即n * (n - 1) * (n - 2) * ... * 1
。
进阶题
- 判断素数:输入一个正整数,判断它是否为素数(质数)。素数是指大于 1 且只能被 1 和自身整除的正整数。
- 反转整数:输入一个整数,将其反转后输出。例如,输入 123,输出 321。
挑战题
- 水仙花数:找出所有的水仙花数。水仙花数是指一个三位数,其各位数字的立方和等于该数本身。例如,153 是水仙花数,因为
1^3 + 5^3 + 3^3 = 153
。 - 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第 10 天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少个桃子。
通过掌握 C 语言的循环结构,能够让程序员更加高效地编写程序,处理各种需要重复执行的任务,实现复杂的算法和功能。在实际编程中,需要根据具体问题的特点,灵活选择和使用合适的循环结构,并注意循环的控制和优化,以提高程序的质量和效率。