for 循环
了解 for 循环。
什么是循环?
可编程计算机最实用的特性之一是,你可以指示它们重复执行某个计算或操作多次,而通常不会抱怨。C语言中的循环结构允许我们多次执行一段代码,而无需手动重复输入或列出相同的代码。
举个简单的例子,假设我们要计算从1到100所有整数的累计和。我们可以写出如下代码:
1int cumsum = 0; 2cumsum = cumsum + 1; 3cumsum = cumsum + 2; 4cumsum = cumsum + 3; 5... 6cumsum = cumsum + 100;
如你所见,上述代码效率很低。编程的一般原则是:当你发现自己多次复制粘贴相同代码时,就应该思考:一定有更好的方法,应该用更抽象的方式来表达这段代码,使其更简洁且可复用。在这种情况下,我们可以使用 for 循环来实现目标。
for 循环的语法
一个通用的 for 循环如下所示:
1for (初始化表达式; 循环条件; 循环表达式) { 2 // 程序语句在此处 3}
花括号 { 和 } 包裹的程序语句构成一个代码块,该代码块将被重复执行多次。这个代码块被称为循环体。循环执行的次数取决于圆括号中三个表达式的设置。
-
初始化表达式在循环开始前仅执行一次。它通常用于给一个控制循环迭代次数的变量赋初值。 -
循环条件是一个表达式,决定循环是否继续或终止,取决于其求值结果为真或假。注意: 如果
循环条件求值为零,则视为 假;否则视为 真。当然,如果未指定循环停止的条件,循环将永远不会结束,从而导致无限循环——程序将无法终止。
-
循环表达式是在每次循环体执行后执行的代码。
示例
以上内容听起来有些抽象,下面我们通过一个具体例子来说明:实现一个循环,计算从1到100的整数累计和。
1#include <stdio.h> 2 3int main(void) { 4 int cumsum = 0; 5 int i; 6 7 for (i = 1; i <= 100; i++) { 8 cumsum = cumsum + i; 9 } 10 11 printf("1到100的整数累计和是 %d\n", cumsum); 12 return 0; 13}
让我们逐步分析这段 for 循环代码的执行过程:
- 第4行和第5行,我们声明了整型变量
cumsum和i,并将cumsum初始化为0。 - 第7行,我们定义了
for循环。- 圆括号中的第一个表达式将变量
i初始化为1。这在循环开始前执行一次。 - 第二个表达式是一个条件判断:当
i小于等于100时为真,否则为假。该条件在每次循环开始前都会重新评估。一旦条件为假,循环结束;否则继续下一次迭代。 - 第三个表达式
i++在每次循环体执行后执行。这里我们把i的值加1。
- 圆括号中的第一个表达式将变量
- 第8行,是循环体内的代码,将在每次循环中执行。此处我们将当前
i的值(每次不同)加到cumsum变量中。 - 第9行,右花括号
}标识循环体的结束。 - 第11行,我们输出
cumsum变量的最终值。
由此可见,使用 for 循环,我们只需编写一次增加 cumsum 的代码,并将其放入一个设计为执行100次的循环中,每次使用不同的 i 值。
在前面的例子中,我们看到一个循环变量 i,它控制着 for 循环的执行次数。在现代C语言(C99及以后标准)中,我们还可以在 for 循环结构内部声明循环变量,而不仅仅是初始化它:
1for (int i = 0; i <= 100; i++)
1#include <stdio.h> 2 3int main(void) { 4 int cumsum = 0; 5 6 for (int i = 1; i <= 100; i++) { 7 cumsum = cumsum + i; 8 } 9 10 printf("1到100的整数累计和是 %d\n", cumsum); 11 // printf("变量 i 无法在 for 循环外部访问: %d\n", i); // 编译错误:i 只在 for 循环内可见 12 13 return 0; 14}
for 循环的循环体
1#include <stdio.h> 2 3int main(void) { 4 int cumsum = 0; 5 int i = 0; 6 7 for (i = 1; i <= 100; i++) 8 cumsum = cumsum + i; 9 10 11 printf("1到100的整数累计和是 %d\n", cumsum); 12 13 return 0; 14}