C语言for循环用法详解(附带实例)
C语言中,使用 for 语句也可以控制一个循环,并且在每次循环时修改循环变量。
在所有循环语句(while、do while 和 for)中,for 语句的应用最为灵活,可以用于循环次数确定的情况,还可以用于循环次数不确定但给出了循环结束条件的情况。
for 语句的一般形式如下:
for 语句的执行流程如下图所示:

图 1 for语句的执行流程图
其执行过程如下:
for 语句的形式也可以简单表示为:
例如,实现一个循环输出操作:
一次循环完成后,会再次判断表达式“i<100”的状态,为真时,继续执行语句块;为假时,循环结束,执行后面的程序代码。
使用 for 语句时,常常犯的错误是将 for 语句括号内的表达式用逗号隔开。例如:
【实例】计算小球反弹高度。一个球从 80 米高度自由落下,每次落地后反弹的高度为原高度的一半,计算小球第 6 次反弹的高度。在本实例中,要求使用 for 循环语句计算小球反弹高度。具体代码如下:
运行程序,结果为:
for 循环的执行过程也可以使用 while 循环来表示:
【实例】用 for 语句实现一个 n~100 循环累加的操作,再使用 while 语句实现相同的功能。注意观察实例中 for 语句中的表达式与 while 语句中的表达式所对应的位置。
运行程序,结果为:
例如:
【实例】根据用户输入的数据计算其阶乘,并且将 for 语句中第一个表达式省略。具体代码如下:
运行程序,显示效果为:
例如:
括号中,表达式“iCount=1”为赋值表达式,第二个表达式是空缺的,这样就相当于使用了如下 while 语句:
例如:
例如,在表达式 1 处为变量 iCount 和 iSum 设置初始值:
也就是说,表达式 1 和表达式 3 都可以是逗号表达式。在逗号表达式内按照自左至右顺序求解,整个逗号表达式的值为其最右边的表达式的值。例如:
【实例】在本实例中,为变量赋初值的操作都放在 for 语句中,并且对循环变量进行两次自加操作,这样所求出的结果就是所有偶数的和。
运行程序,结果为:
在所有循环语句(while、do while 和 for)中,for 语句的应用最为灵活,可以用于循环次数确定的情况,还可以用于循环次数不确定但给出了循环结束条件的情况。
for 语句的一般形式如下:
for(表达式1;表达式2;表达式3) { 语句块(循环体) }每条 for 语句包含 3 个用分号隔开的表达式。这 3 个表达式用一对圆括号括起来,其后紧跟着循环语句或语句块。当执行到 for 语句时,程序首先计算第 1 个表达式的值,接着计算第 2 个表达式的值。如果第 2 个表达式的值为真,程序就执行循环体的内容,并计算第 3 个表达式;然后检验第 2 个表达式,执行循环;如此反复,直到第 2 个表达式的值为假,退出循环。
for 语句的执行流程如下图所示:

图 1 for语句的执行流程图
其执行过程如下:
- 求解表达式 1;
- 求解表达式 2,若其值为真,则执行for语句中的循环语句块,然后执行步骤 3;若为假,则结束循环,转到步骤 5;
- 求解表达式 3;
- 回到步骤 2,继续执行;
- 循环结束,执行 for 语句下面的一个语句。
for 语句的形式也可以简单表示为:
for(循环变量赋初值;循环条件;循环变量改变) { 语句块 }
例如,实现一个循环输出操作:
for(i=1; i<100; i++) { printf("%d",i); }在上面的代码中:
- 表达式“i=1”用于对循环变量 i 进行赋值操作;
- 表达式“i<100”用于判断循环条件是否为真,因为 i 的初值为 1,小于 100,所以执行语句块中的内容;
- 表达式“i++”用于在每次循环结束后,对循环变量进行自增操作。
一次循环完成后,会再次判断表达式“i<100”的状态,为真时,继续执行语句块;为假时,循环结束,执行后面的程序代码。
使用 for 语句时,常常犯的错误是将 for 语句括号内的表达式用逗号隔开。例如:
for(i=1,i<100,i++) {...}这句代码就是错误的。切记,3 个表达式之间应用分号隔开。
【实例】计算小球反弹高度。一个球从 80 米高度自由落下,每次落地后反弹的高度为原高度的一半,计算小球第 6 次反弹的高度。在本实例中,要求使用 for 循环语句计算小球反弹高度。具体代码如下:
#include <stdio.h> int main() { int high =80; /*定义变量 high,表示高度*/ int i; /*定义变量 i,作为循环变量*/ for(i = 0; i < 6; i++) /*使用 for 语句循环*/ { high /= 2; /*每次反弹高度*/ printf("当前高度是 %d\n", high); /*输出当前反弹高度*/ } printf("第 6 次反弹高度 %d\n", high); /*输出第 6 次反弹高度*/ return 0; /*程序结束*/ }
- 在程序代码中,定义变量 high。在 for 语句中先对 i 赋值,然后判断 i<6 的条件是否为真,再根据判断的结果选择是否执行循环语句。
- 在循环语句中计算每次反弹高度,即用当前高度除以 2,再用 printf() 输出当前反弹高度。
- 在 for 语句外,用 printf() 函数输出第 6 次反弹高度。
运行程序,结果为:
当前高度是 40
当前高度是 20
当前高度是 10
当前高度是 5
当前高度是 2
当前高度是 1
第 6 次反弹高度 1
for 循环的执行过程也可以使用 while 循环来表示:
表达式1; while(表达式2) { 语句块 表达式 3; }上面就是使用 while 循环表示 for 循环的一般形式,其中的 3 个表达式对应着 for 语句括号中的 3 个表达式。下面通过一个实例来比较一下这两种操作。
【实例】用 for 语句实现一个 n~100 循环累加的操作,再使用 while 语句实现相同的功能。注意观察实例中 for 语句中的表达式与 while 语句中的表达式所对应的位置。
#include <stdio.h> int main() { int n, sum = 0; /*定义变量 n 表示输入的数据,sum 表示累加和*/ int i, n1, sum1 = 0; /*定义变量 n1 表示输入的数据,sum1 表示累加和*/ printf("请输入一个自然数:"); /*提示输入自然数*/ scanf("%d", &n1); /*输入数据 n1*/ for(i = n1; i <= 100; i++) /*使用 for 循环计算累加和*/ { sum1 = sum1 + i; /*进行累加*/ } printf("结果为:%d\n", sum1); /*将结果输出*/ printf("请输入一个自然数:"); /*提示输入自然数*/ scanf("%d", &n); /*输入数据 n*/ while(n <= 100) /*使用 while 循环计算累加和*/ { sum = sum + n; /*进行累加*/ n++; /*循环变量自增*/ } printf("结果为:%d\n", sum); /*将结果输出*/ return 0; }
- 定义变量 n、n1 表示用户输入的数字,变量 sum 表示计算的累加和,变量 i 用作 for 循环语句的循环变量。
- 使用 for 语句执行循环操作,括号中表达式“i=n”为循环变量进行赋值。表达式“i<=100”判断条件,条件为真,执行 for 循环体中的内容;条件为假,不进行循环操作。
- 在 for 循环语句块中进行累加运算,然后执行 for 括号中的第 3 个表达式“i++”,对循环变量进行自增操作。循环操作后,将保存有计算结果的变量 sum 进行输出。
- 在使用 while 语句之前要恢复变量的值。再次输入变量 n1,就相当于 for 语句中第一个表达式的作用,为变量设置初值。然后在 while 括号中的表达式“n<=100”与 for 语句中第二个表达式相对应。最后 n++ 自加操作与 for 语句括号中的最后一个表达式相对应。
运行程序,结果为:
请输入一个自然数:1
结果为:5050
请输入一个自然数:2
结果为:5153
C语言for循环的变体
通过上面的学习可知,for 语句的一般形式中有 3 个表达式。这 3 个表达式都是必不可少的,还是可以根据情况进行省略呢?接下来对不同情况进行讲解。1) for语句中省略表达式1
表达式 1 的作用是对循环变量设置初值,如果省略了表达式 1,就会影响对表达式 2(即循环条件)的判断。为保证程序正常运行,应在 for 语句之前先给循环变量赋值。例如:
for(;iNumber<10;iNumber++)注意,省略表达式 1 时,其后的分号不能省略,要格外注意。
【实例】根据用户输入的数据计算其阶乘,并且将 for 语句中第一个表达式省略。具体代码如下:
#include <stdio.h> int main() { int n, i = 1, result = 1; /*定义变量,为变量 i, result 赋初始值*/ printf("请输入 n 的值:\n"); /*提示用户输入数据*/ scanf("%d", &n); /*输入数据*/ for(; i <= n; i++) /*for 循环,省略表达式 1*/ { result *= i; /*计算阶乘*/ } printf("%d!=%d\n", n, result); /*输出结果*/ return 0; /*程序结束*/ }在代码中可以看到,在定义 i 变量时直接为其赋了初值,这样在使用 for 语句循环时就不用再为 i 赋初值,从而可以省略表达式 1。
运行程序,显示效果为:
请输入 n 的值:
5
5!=120
2) for语句中省略表达式2
表达式 2 给出的是循环条件,如果表达式 2 省略,则无法判断循环条件,也即默认表达式 2 始终为真,因此循环将无终止地进行下去。例如:
for(iCount=1;iCount++) //缺少循环条件,循环条件一直为 true,陷入死循环 { sum=sum+iCount; }
括号中,表达式“iCount=1”为赋值表达式,第二个表达式是空缺的,这样就相当于使用了如下 while 语句:
iCount=1; while(1) { sum=sum+iCount; iCount++; }可见,for 语句中表达式 2 是不能省略的。
3) for语句中省略表达式3
表达式 3 用于改变循环变量,可以省略,但此时程序设计人员应在循环体内增加类似功能的语句,以保证循环能正常结束,否则程序也会无终止地循环下去。例如:
for(iCount=1;iCount<50;){ sum=sum+iCount; iCount++; }
for循环中的逗号应用
在 for 语句中,表达式 1 和表达式 3 处除了可以使用简单的表达式,还可以使用逗号表达式,即包含一个以上的简单表达式,中间用逗号间隔。例如,在表达式 1 处为变量 iCount 和 iSum 设置初始值:
for(iSum = 0, iCount = 1; iCount < 100; iCount++) { iSum = iSum + iCount; }或者在表达式 3 处执行循环变量自加操作两次:
for(iCount = 1; iCount < 100; iCount++, iCount++) { iSum = iSum + iCount; }
也就是说,表达式 1 和表达式 3 都可以是逗号表达式。在逗号表达式内按照自左至右顺序求解,整个逗号表达式的值为其最右边的表达式的值。例如:
for(iCount=1;iCount<100;iCount++,iCount++)就相当于:
for(iCount=1;iCount<100;iCount=iCount+2)
【实例】在本实例中,为变量赋初值的操作都放在 for 语句中,并且对循环变量进行两次自加操作,这样所求出的结果就是所有偶数的和。
#include <stdio.h> int main() { int iCount, iSum; /* 定义变量 */ /* 在 for 循环中,为变量赋值,对循环变量进行两次自增运算 */ for(iSum = 0, iCount = 0; iCount <= 100; iCount++, iCount++) { iSum = iSum + iCount; /* 进行累加计算 */ } printf("the result is: %d\n", iSum); /* 输出结果 */ return 0; }在程序代码中,在 for 语句中对变量 iSum、iCount 进行初始化赋值。每次循环语句执行完后进行两次 iCount++ 操作,最后将结果输出。
运行程序,结果为:
the result is: 2550
注意,浮点值的误差是不可避免的,如果在 for 循环的条件表达式中使用浮点值,那么将导致数值错误。因此,建议开发者不要使用浮点类型定义 for 语句的循环变量。