在 C语言中,除了 while 和 do while,使用 for 语句也可以实现循环结构。
C语言for循环的基本用法
for 循环语句的一般形式如下:
for(表达式1;表达式2;表达式3)
{语句块;
}
有以下几点说明:
- for 是循环结构中的关键字之一。
- 表达式 1 通常用于给循环变量赋初值。当然,也允许在 for 语句外给循环变量赋初值,此时可以省略此表达式。
- 表达式 2 通常是循环检验的条件,用来决定是否继续执行 for 后紧跟的语句块,一般是关系表达式和逻辑表达式。表达式 2 也可以省略,要是省略表达式 2,这样的循环就会变成无限循环。
- 表达式 3 通常可用来修改变量的值,一般是赋值语句或自增/自减表达式。如果在语句块中写修改变量的语句,那么表达式 3 也可以省略。
- 语句块可以是一条语句,也可以是任意合法的复合语句(复合语句包含{})。
- 各表达式之间用分号隔开。
从一般形式来看,每条 for 语句包含 3 个用分号隔开的表达式。这 3 个表达式用一对圆括号标识,其后紧跟着语句块。
for语句的执行流程如下图所示:
图 1 for语句的执行流程图
通过图 1 和上面对 for 语句的介绍可知,for语句里有 3 个表达式,它的执行步骤如下:
- 步骤 1:计算表达式 1 的值;
- 步骤 2:计算表达式 2 的值,若结果值是真值,执行步骤 3;若结果值是假值,执行步骤 5;
- 步骤 3:执行一次 for 后紧跟的语句块;
- 步骤 4:计算表达式 3 的值,执行步骤 2;
- 步骤 5:结束循环,执行 for 语句之外的语句。
for 语句简单的应用形式如下:
for(循环变量赋初值;循环条件;循环变量) {语句块;}
【实例】用 for 语句计算 1~20 的和。具体代码如下:
#include<stdio.h>
int main()
{int number; // 起始数字为1int sum = 0; // 初始时和为0for (number = 1; number <= 20; number++) //循环数字1~20{sum = sum + number; // 从1开始求和}printf("1~20的和等于%d\n", sum); //输出最后相加的结果return 0; //程序结束
}
运行结果如下:
1~20的和等于210
for循环的变体
通过前面的学习可知,for 语句的一般形式中有 3 个表达式。在实际的程序编写过程中,这 3 个表达式可以根据实际情况省略,接下来对不同情况进行讲解。
1) for语句中省略表达式1
for 语句中第一个表达式的作用是对循环变量设置初值。如果省略 for 语句中的表达式 1,就需要在执行 for 语句之前给循环变量赋值。
for 语句中省略表达式 1 的示例代码如下:
int number = 1;
for (; number <= 20; number++) { // 省略表达式1sum = sum + number;
}
省略表达式 1 时,其后的分号不能省略。
2) for语句中省略表达式2
如果省略表达式 2,即不判断循环条件,则循环将无止境地进行下去,即默认表达式 2 始终为真。例如:
int number;
for (number = 1; ; number++) { // 省略表达式 2sum = sum + number;
}
上述 for 语句中表达式 2 是空缺的,这样就相当于使用 while 语句,代码如下:
int number = 1;
while (1) { // 循环条件永远为真sum = sum + number;number++;
}
从 while 语句的判断条件可以看出,如果表达式 2 空缺,则程序将无限循环下去。
3) for语句中省略表达式3
for 语句中的表达式 3 也可以省略。例如:
int number;
for (number = 1; number <= 20;) { // 省略表达式3,但通常这里会是number++sum = sum + number;
}
上面这段代码没有改变 number 变量值的代码,循环将会无止境地进行。如果想程序循环能正常结束,就应将代码改为如下形式:
int number;
for (number = 1; number <= 20;) { // 省略表达式3,但通常这里会是number++sum = sum + number;number++; // 这行代码通常需要在循环体中,以避免无限循环
}
修改代码之后,程序循环就能正常结束。
for语句中逗号的应用
在 for 语句中的表达式 1 和表达式 3 处,除了可以使用简单的表达式,还可以使用逗号表达式,即包含一个以上的简单表达式,中间用逗号分隔。
例如,在表达式 1 处为变量 iSum 和 iCount 设置初值,代码如下:
for (isum = 0, icount = 1; icount < 100; icount++) {isum = isum + icount;
}
或者执行两次循环变量自加操作,代码如下:
for (icount = 1; icount < 100; icount++, icount++) {isum = isum + icount;
}