for 循环
for 语句是对 while 语句的推广,在实际编程过程中,可以选择 while 与 for 中的任意一种循环语句,主要看使用哪一种更清晰。for 语句比较适合初始化和增加步长都是单条语句并且逻辑相关的情形,因为它将循环语句集中放在一起,且比 while 语句更紧凑。
语法
for (A; B; C)
D; // single statement
E; // expression
// 每一部分可以是任意表达式或者为 **空**
for (A; B; C)
{
D; // single or multiple statement(s)
}
E;
- A 是初始化部分(初始化声明在 C99 才支持),仅在进入循环前执行一次
- B 是条件部分,循环控制将对该条件求值
- 如果结果为
true
,则执行循环体;执行完循环体后将继续执行 C - 如果结果为
false
,则终止执行循环
- 如果结果为
- C 是步长部分(可以为空但需要添加到循环体中,否则会进入死循环),用于增加(increment)或减少(decrement)控制变量;执行完该部分后将继续执行 B
- D 是循环体部分
- A、B、C 和 D 均可以为空
流程图
+---------------------------+
v |
+---------+ +---+ +-------+ true +---+ +---+
| (start) | --> | A | --> | B | ------> | D | --> | C |
+---------+ +---+ +-------+ +---+ +---+
|
| false
v
+-------+ +-------+
| E | ------> | (end) |
+-------+ +-------+
for 与 while
for 和 while 总是可以通过相互转换得到,例如 while (1) {}
可以转换为 for (;;) {}
。
示例
#include <stdio.h>
// 求 1 ~ 100 之间奇数的和
int main()
{
int i;
int sum;
sum = 0;
for (i = 0; i <= 100; i++)
{
// 使用 “按位与” 运算判断数字是否为奇数
if (i & 1 == 1)
sum += i;
}
printf("%d\n", sum);
return 0;
}