C语言for循环语句的用法(非常详细)
for 语句是C语言中最为灵活的循环结构之一,不但可以用于循环次数确定的情况,也可以用于循环次数不确定(只给出循环结束条件)的情况。
C语言 for 循环语句的一般格式如下:
该循环的流程图如下:
请看下面的例子:
它的执行过程是,先给循环变量 i 赋初值为 0,再判断 i 是否小于等于 100,如果为真,执行语句 sum+=i,将 i 的值自增 1,再判断 i 是否小于等于 100,如果为真,再执行循环体并且 i 自增 1……一直到 i<=100 不成立时,循环结束。因此上面代码的作用是计算 1+2+…+100 的和。
为了更容易理解,可以将 for 语句的形式改写为:
代码实现如下:
153 370 371 407
【代码说明】
第 03~04 行定义变量,用 a、b、c 分别存放每个 3 位数的个位、十位和百位;i 是循环控制变量,控制从 100~999 之间的数。
第 05~12 行是 for 循环,其中:
【范例分析】
本范例中利用 for 循环控制 100~999 的数,每个数分解出个位、十位和百位,然后再判断立方和是否等于该数本身。
在编写 for 循环时,注意3个表达式所起的作用是不同的,而且3个表达式的运行时刻也不同,表达式1在循环开始之前只计算一次,而表达式2和3则要每循环一次就执行一次。
如果循环体的语句多于一条,则需要用花括号括起来作为复合语句使用。
【范例分析】
本范例中利用循环变量 i 存放自然数 1,2,…,n;变量 t 存放阶乘,初值为 1,重复执行的是 t=t*i,即:
累加与累乘是比较常见的算法,这类算法就是在原有的基础上不断地加上或乘以一个新的数。这类算法至少需要设置两个变量,一个变量作为循环变量控制自然数的变化,一个变量用来存放累加或累乘的结果,通过循环将变量变成下一个数的累加和或累乘积。所以一般求阶乘时存放阶乘的循环变量的初值应设置为 1,求累加初值应设置为 0。
2) 循环条件可由一个较复杂表达式的值来确定,例如:
3) 表达式2一般是关系表达式或逻辑表达式,但也可以是数值表达式或字符表达式,只要其值不等于 0 就执行循环体。例如:
1) 省略“表达式1”,此时应在 for 语句之前给循环变量赋初值。例如:
2) 省略“表达式2”,表示不判断循环条件,循环无终止地进行下去,也可以认为表达式2始终为真。例如:
3) 省略“表达式3”,此时应在循环体内部实现循环变量的增量,以保证循环能够正常结束。例如:
4) 省略“表达式1”和“表达式3”,此时只给出了循环条件。例如:
5) 3个表达式都省略,既不设初值,也不判断条件,循环变量不增值,无终止地执行循环体。例如:
声明:《C语言系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
C语言 for 循环语句的一般格式如下:
for(表达式1; 表达式2; 表达式3)
循环体语句;
- 计算表达式1的值。
- 判断表达式2,如果其值为非 0(真),则执行循环体语句,然后执行第③步;如果其值为 0(假),则结束循环,执行第⑤步。
- 计算表达式3。
- 返回,继续执行第②步。
- 循环结束,执行 for 后面的语句。
该循环的流程图如下:

请看下面的例子:
int i; int sum=0; for(i=0;i<=100;i++) sum+=i;在本例中:
- “i”是循环变量,表达式1(i=0)是给循环变量赋初值;
- 表达式2(i<=100)决定了循环能否执行的条件,称为循环条件;
- 循环体部分(重复执行的语句)是 sum+=i;
- 表达式3(i++)是使循环变量每次增 1,又称为步长(在这里步长为1)。
它的执行过程是,先给循环变量 i 赋初值为 0,再判断 i 是否小于等于 100,如果为真,执行语句 sum+=i,将 i 的值自增 1,再判断 i 是否小于等于 100,如果为真,再执行循环体并且 i 自增 1……一直到 i<=100 不成立时,循环结束。因此上面代码的作用是计算 1+2+…+100 的和。
为了更容易理解,可以将 for 语句的形式改写为:
for(循环变量赋初值; 循环条件; 循环变量增值)
循环体语句;
示例1
经典问题:打印出 [100,999] 范围内所有的“水仙花数”,所谓“水仙花数”是指一个 3 位数,其各位数字的立方和等于该数本身。例如,153 是一个“水仙花数”,因为 153=13+53+33。代码实现如下:
#include <stdio.h> int main() { int a,b,c; int i; for(i=100; i<1000; i++) /*从100循环到1000,依次判断每个数是否是水仙花数*/ { a=i%10; /*分解出个位*/ b=(i/10)%10; /*分解出十位*/ c=i/100; /*分解出百位*/ if(a*a*a+b*b*b+c*c*c==i) /*判断3个数的立方数和是否等于该数本身,若是则打印出来*/ printf("%d\t",i); } return 0; }运行结果:
153 370 371 407
【代码说明】
第 03~04 行定义变量,用 a、b、c 分别存放每个 3 位数的个位、十位和百位;i 是循环控制变量,控制从 100~999 之间的数。
第 05~12 行是 for 循环,其中:
- 第 05 行,给循环控制变量赋初值为 100,循环条件是 i<1000,每次循环后 i 的值自增 1;
- 第 07~09 行,分解当前 i 的个位、十位和百位;
- 第 10~11 行,判断该数是否满足条件,满足则输出。
【范例分析】
本范例中利用 for 循环控制 100~999 的数,每个数分解出个位、十位和百位,然后再判断立方和是否等于该数本身。
在编写 for 循环时,注意3个表达式所起的作用是不同的,而且3个表达式的运行时刻也不同,表达式1在循环开始之前只计算一次,而表达式2和3则要每循环一次就执行一次。
如果循环体的语句多于一条,则需要用花括号括起来作为复合语句使用。
示例2
计算n!,n!=1*2*…*n。#include <stdio.h> int main() { int i,n; long t=1; printf("请输入一个整数:"); scanf("%d",&n); /*用户从键盘输入一个整数*/ for(i=1;i<=n;i++) /*从1循环到n*/ t=t*i; printf("%d!为%ld\n",n,t); /*输出n! */ }运行结果:
请输入一个整数:5
5!为120
【范例分析】
本范例中利用循环变量 i 存放自然数 1,2,…,n;变量 t 存放阶乘,初值为 1,重复执行的是 t=t*i,即:
当i=1时,t=t*i=1 (1!)
当i=2时,t=t*i=1*2 (2!)
当i=3时,t=t*i=1*2*3 (3!)
……
当i=n时,t=t*i=1*2*…*(n-1)*n (n!)
累加与累乘是比较常见的算法,这类算法就是在原有的基础上不断地加上或乘以一个新的数。这类算法至少需要设置两个变量,一个变量作为循环变量控制自然数的变化,一个变量用来存放累加或累乘的结果,通过循环将变量变成下一个数的累加和或累乘积。所以一般求阶乘时存放阶乘的循环变量的初值应设置为 1,求累加初值应设置为 0。
for 循环扩展形式
1) 表达式12和表达式3可以是一个简单的表达式,也可以是逗号表达式(即包含了一个简单表达式),例如:
for(i=0,j=100; i<j; i++,j--)
k=i+j;
2) 循环条件可由一个较复杂表达式的值来确定,例如:
for(i=0; s[i]!=c && s[i]!= '\0'; ++i)
3) 表达式2一般是关系表达式或逻辑表达式,但也可以是数值表达式或字符表达式,只要其值不等于 0 就执行循环体。例如:
for(k=1; k-4; k++)
s=s+k;
for 循环省略形式
for 循环语句中的 3 个表达式都是可以省略的。1) 省略“表达式1”,此时应在 for 语句之前给循环变量赋初值。例如:
i=1;
for(; i<=100; i++)
sum+=i;
2) 省略“表达式2”,表示不判断循环条件,循环无终止地进行下去,也可以认为表达式2始终为真。例如:
for(i=1; ; i++)
sum+=i;
3) 省略“表达式3”,此时应在循环体内部实现循环变量的增量,以保证循环能够正常结束。例如:
for(i=1;i<=100;){
sum+=i;
i++;
}
4) 省略“表达式1”和“表达式3”,此时只给出了循环条件。例如:
i=1;
for(; i<=100; ) {
sum+=i;
i++;
}
5) 3个表达式都省略,既不设初值,也不判断条件,循环变量不增值,无终止地执行循环体。例如:
for(; ;)
循环体语句;
声明:《C语言系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。