for语句是控制重复的指令,在表达式为真时,重复执行语句。for语句是C语言中应用最频繁的语句,for循环语句可以用于循环次数已经确定的情况,也可以用于循环次数不确定的情况。可以完全代替while及do…while语句。
for循环结构
for语句的一般形式为:
for(表达式1;表达式2;表达式3)
语句
for语句的执行过程如下:
首先执行表达式1,表达式1是用于初始值的设定的。然后,执行表达式2,表达式2是结束for语句循环的条件表达式。在语句执行之后,才执行表达式3。所以,表达式3用于计数器的增量等方面。表达式2的判别是重复的开头的开始。如图所示。
示例:使用for语句求100以内正整数的和。
#include <stdio.h>
void main()
{
int i, sum = 0;
for (i = 1; i <= 100; i++)
sum += i; /*循环体*/
printf("1+2+3+…+100=%d\n", sum); /*输出结果*/
}
运行结果为:
1+2+3+…+100=5050
这里说明以下几点:
(1) 表达式1 用于初始值设定,有时为了对多个变量进行初始化,可以用逗号隔开设定,例如:
for(i=0,j=0;i<100;i++)
{ … }
(2) 表达式2常用的是关系表达式或逻辑表达式,是用于控制循环的条件。若表达式2的值为0即为假,退出循环;如果为非0即为真,则执行循环语句,计算表达式2的值,进入下一轮的循环。
(3) 表达式3可以像表达式1一样,用逗号运算符将多个表达式连接起来。例如:
for(i=0,j=0;i<100;i++,j++)
{ … }
(4) for语句的表达式1,表达式2,表达式3都可以省略。但是,分号一定要保留。
- 省略表达式1,一般形式为:
for(;表达式2;表达式3) 语句
表达式1用于设定初始值,如果省略表达式1,应在for语句之前给循环变量赋初值。
#include <stdio.h> void main() { int i, sum = 0; i = 1; for (; i <= 100; i++) sum += i; /*循环体*/ printf("1+2+3+…+100=%d\n", sum); /*输出结果*/ }
运行结果为:
1+2+3+…+100=5050
- 省略表达式2,一般形式为:
for(表达式1;;表达式3) 语句
表达式2用于控制循环的条件,如果表达式2省略,即不判断循环条件,循环会无休止地进行下去。即默认状态下,表达式2始终为真。这时就需要在for语句的循环体中设置相应的语句来结束循环。
#include<stdio.h> void main() { int i; for(i=1;;i++) printf("%d",i); }
省略表达式2,循环将无终止地进行下去。
-
省略表达式3,一般形式为:
for(表达式1; 表达式2;) 语句
省略表达式3则不计算表达式3的值,也将产生一个无穷循环。为了保证循环能正常结束,可以将表达式3放在循环语句中控制。
#include <stdio.h> void main() { int i, sum = 0; for (i = 1; i <= 100;) /*省略表达式3*/ { sum += i; i++; /*表达式3放在循环体中*/ } printf("1+2+3+…+100=%d\n", sum); /*输出结果*/ } 程序运行的结果为: ```shell 1+2+3+…+100=5050
- 同时省略表达式1和表达式3,一般形式为:
for(; 表达式2;) 语句
此时的for循环语句完全等价于while语句,例如:
int i; for(;i<=10;) /*省略表达式1和表达式3*/ { printf("%d",i); /*依次输出变量i*/ i++; }
相当于:
int i; while(i<=10) { printf("%d",i); /*依次输出变量i*/ i++; }
- 同时省略表达式1,表达式2,表达式3,一般形式为:
for(;;) 语句
此时的for循环语句相当于循环控制条件始终为真,不修改循环变量,故循环将无终止地进行下去。相当于:
while(1) 语句
(5)在for语句中,循环语句可以是单个语句,也可以是用 “{ }”括起来的复合语句,也可以是空语句,空语句是指循环体不做任何操作,可以用来实现延时,即在程序执行中等待一定的时间。
例如:
for(i=1;i<5000;i++);
for循环体为空,程序不做任何操作。但是循环中最后的分号不能省略,它表示一个空语句。
(6)for语句的作用可以用while语句描述,如图所示。
for循环语句的嵌套
for循环语句的嵌套就是在for循环语句的循环体使用另一个或几个for循环语句。for循环语句的嵌套有二重嵌套、三重嵌套、四重嵌套等。
例如:二重嵌套:
for(;;)
{
…
for(;;)
{
…
}
}
三重嵌套:
for(;;)
{
…
for(;;)
{
…
for(;;)
{
…
}
}
}
示例:编一个程序,求 s=1!+2!+3!+…+n!(n由输入决定)。
程序分析:
1!=1
2!=2*1=2*1!
3!=3*2*1=3*2!
4!=4*3*2*1=4*3!
…
n!=n*(n-1)!
设变量i、j、t,i从1依次增加到n,使用变量j从1到i求出i!的阶乘即:
for(j=1;j<=i;j++)
t=t*j;
使用t来存放每个阶乘的值。
sum=sum+t;
求各个阶乘的累加和。
#include <stdio.h>
void main()
{
int i, j, n;
long int t = 1, sum = 0; /*t存放每项阶乘值,sum存放累加和*/
printf("input n:", &n);
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
t = 1;
for (j = 1; j <= i; j++) /*求i!值*/
t = t * j;
sum = sum + t; /*累加*/
}
printf("n!=%ld", sum);
}
运行结果为:
input n:9↙
n!=409113
评论前必须登录!
注册