C 语言中的 For 循环
包括 C 语言在内的大多数编程语言都支持使用 for 关键字来构造循环。在 C 语言中,其他与循环相关的关键字包括 while 和 do-while。与其他两种循环不同,for 循环被称为自动循环,通常是程序员的首选。
for 循环 是一种入口控制循环,它会执行语句直到满足给定条件。所有元素(初始化、测试条件和增量)都放在括号内,并使用 for 关键字组合在一起,形成一个 for 循环。
for 循环的语法
C 语言中 for 循环的语法为 -
for (init; condition; increment){ statement(s); }
For 循环的控制流
以下是"for"循环中的控制流 -
首先执行 init 步骤,并且只执行一次。此步骤允许您声明和初始化任何循环控制变量。此处无需添加任何语句,只要出现分号即可。
接下来,评估条件。如果条件为真,则执行循环体。如果条件为假,则不执行循环体,控制流跳转到紧邻"for"循环之后的下一个语句。
执行完"for"循环体后,控制流跳转回增量语句。此语句允许您更新任何循环控制变量。此语句可以留空,只要条件后出现分号即可。
现在再次评估条件。如果条件为真,则执行循环,并重复该过程(循环体,然后增量步骤,然后再次执行条件)。当条件变为假时,"for"循环终止。
for 循环流程图
以下流程图展示了 for 循环的工作原理 -

当开发人员事先知道需要执行多少次迭代时,他们更喜欢使用 for 循环。它可以被认为是 while 和 do-while 循环的简写,用于递增和测试循环变量。
for 循环可以以不同的形式使用。让我们了解 for 循环在不同情况下的工作原理。
示例:基本 for 循环
这是 for 循环的最基本形式。请注意,括号内的所有三个子句(位于 for 关键字前面)都是可选的。
#include <stdio.h> int main(){ int a; // for 循环执行 for(a = 1; a <= 5; a++){ printf("a: %d ", a); } return 0; }
输出
运行代码并检查其输出 −
a: 1 a: 2 a: 3 a: 4 a: 5
在循环语句前初始化 for 循环计数器
初始化步骤可以放在 for 循环头的上方。在这种情况下,init 部分必须用分号留空。
示例
#include <stdio.h> int main(){ int a = 1; // for 循环执行 for( ; a <= 5; a++){ printf("a: %d ", a); } return 0; }
输出
您仍然会得到相同的输出 -
a: 1 a: 2 a: 3 a: 4 a: 5
在 for 循环体内更新循环计数器
您也可以用一个空语句代替 increment 子句。但是,您需要将 increment 语句放在循环体内,否则它会变成无限循环。
示例
#include <stdio.h> int main(){ int a; // for 循环执行 for(a = 1; a <= 5; ){ printf("a: %d ", a); a++; } return 0; }
输出
此处,您将获得与上例相同的输出 -
a: 1 a: 2 a: 3 a: 4 a: 5
在 for 循环体中使用测试条件
您也可以省略括号中测试条件的第二个子句。在这种情况下,您需要使用 break 语句 终止循环,否则循环将无限运行。
示例
#include <stdio.h> int main(){ int a; // for 循环执行 for(a = 1; ; a++){ printf("a: %d ", a); if(a == 5) break; } return 0; }
输出
执行此代码后,您将获得以下输出 -
a: 1 a: 2 a: 3 a: 4 a: 5
使用 for 循环和多个计数器
一个 for 语句中可以初始化多个变量和/或包含多个递增语句。但是,只能有一个测试条件。
示例
#include <stdio.h> int main(){ int a, b; // for 循环执行 for(a = 1, b = 1; a <= 5; a++, b++){ printf("a: %d b: %d a*b: %d ", a, b, a*b); } return 0; }
输出
运行此代码时,将产生以下输出 -
a: 1 b: 1 a*b: 1 a: 2 b: 2 a*b: 4 a: 3 b: 3 a*b: 9 a: 4 b: 4 a*b: 16 a: 5 b: 5 a*b: 25
for 循环中的减量
您也可以构造一个递减的 for 循环。在这种情况下,循环变量的初始值大于其在测试条件中的值。for 语句中的最后一个子句使用了递减运算符。
示例
以下程序按降序打印数字 5 到 1 -
#include <stdio.h> int main(){ int a; // for 循环执行 for(a = 5; a >= 1; a--){ printf("a: %d ", a); } return 0; }
输出
运行代码并检查其输出 −
a: 5 a: 4 a: 3 a: 2 a: 1
使用 for 循环遍历数组
For 循环 非常适合一次遍历数组中的一个元素。请注意,数组中每个元素的索引从"0"开始递增。
示例
#include <stdio.h> int main(){ int i; int arr[] = {10, 20, 30, 40, 50}; // for 循环执行 for(i = 0; i < 5; i++){ printf("a[%d]: %d ", i, arr[i]); } return 0; }
输出
运行此代码时,将产生以下输出 -
a[0]: 10 a[1]: 20 a[2]: 30 a[3]: 40 a[4]: 50
示例:使用 for 循环计算数组元素之和
以下程序计算给定数组中所有整数的平均值。
#include <stdio.h> int main(){ int i; int arr[] = {10, 20, 30, 40, 50}; int sum = 0; float avg; // for 循环执行 for(i=0; i<5; i++){ sum += arr[i]; } avg = (float)sum / 5; printf ("Average = %f", avg); return 0; }
输出
运行代码并检查其输出 −
Average = 30.000000
示例:使用 for 循环计算阶乘
以下代码使用 for 循环计算一个数的阶乘值。注意,一个数的阶乘是 1 到给定数之间所有整数的乘积。阶乘的数学表示公式为:-
x! = 1 * 2 * . . . * x
以下是计算阶乘的代码:-
#include <stdio.h> int main(){ int i, x = 5; int fact = 1; // for 循环执行 for(i=1; i<= x; i++){ fact *= i; } printf("%d != %d", x, fact); return 0; }
输出
运行此代码时,将产生以下输出 -
5! = 120
当重复次数已知时,for 循环是理想的选择。但是,循环行为可以通过 break 和 continue 关键字 在 for 循环体中控制。嵌套 for 循环也常用于处理二维数组。