for循环是“ C”编程中更有效的循环结构。for循环的一般结构如下:
for(表达式 1;表达式 2;表达式 3)
{
语句
}
它的执行过程如下:
- 先求解表达式 1;
- 求解表达式 2,若其值为真(非 0),则执行 for 语句中指定的内嵌语句,然后执行下面第 3)步;若其值为假(0),则结束循环,转到第 5)步;
- 求解表达式 3;
- 转回上面第 2)步继续执行;
- 循环结束,执行 for 语句下面的一个语句。
其执行过程可用下图表示。
for 语句最简单的应用形式也是最容易理解的形式如下:
for(循环变量赋初值;循环条件;循环变量增量) 语句
for (initial value; condition; incrementation or decrementation )
{
statements;
}
循环变量赋初值总是一个赋值语句, 它用来给循环控制变量赋初值; 循环条件是一个关系表达式,它决定什么时候退出循环;循环变量增量,定义循环控制变量每循环一次后按什么方式变化。这三个部分之间用“;”分开。
注意事项:
- for循环的初始值仅执行一次;
- 条件是一个布尔表达式,每一次执行前和一个固定值进行比较,如果出现false,停止for循环;
- 初始值递增或递减;
- for语句每个部分用英文分号“;”区别开。
以下流程图说明了简单的for循环的用法:
例1.打印出1到10
#include<stdio.h> int main() { int number; for(number=1;number<=10;number++) //for loop to print 1-10 numbers { printf("%d\n",number); //to print the number } return 0; }
上面C语言程序for循环语句分行打印出 数字 1 – 10.具体执行过程如下:
- 声明一个int数据类型的变量;
- 在for循环中,在初始化部分,变量初始值设为1;在条件部分,我们指定条件:该变量小于等于10;当条件number小于等于10时,变量加1,如果变量大于10的时候,number不再加1;退出循环;
- 在循环的主体中,每一个新行打印一个数字。 我们将值1赋予整数变量,在第一次循环执行后,该变量值将递增,并变为2。现在,变量具有数值2。将重新检查条件,并且由于条件为true,因此将执行循环, 它将在屏幕上打印2。 该循环将继续执行,直到变量的值变为10。此后,循环将终止,并在屏幕上打印一系列的1-10。
例2.打印出1-10
// Print numbers from 1 to 10 #include <stdio.h> int main() { int i; for (i = 1; i < 11; ++i) { printf("%d ", i); } return 0; }
- i 被初始化为 1;
- 评估测试表达式 i < 11。由于 1 小于 11 为真,因此执行 for 循环的主体。这将在屏幕上打印 1(i 的值);
- 更新语句 ++i 被执行。现在,i 的值将是 2。再次,测试表达式被评估为真,并执行 for 循环的主体。这将在屏幕上打印 2(i 的值);
- 同样,更新语句 ++i 被执行并且测试表达式 i < 11 被评估。这个过程一直持续到i变成 11 ;
- 当 i 变为 11 时,i < 11 将为假,并且 for 循环终止。
例3.用户输入一个整数,程序算出1到该数的和
// Program to calculate the sum of first n natural numbers // Positive integers 1,2,3...n are known as natural numbers #include <stdio.h> int main() { int num, count, sum = 0; printf("Enter a positive integer: "); scanf("%d", &num); // for loop terminates when num is less than count for(count = 1; count <= num; ++count) { sum += count; } printf("Sum = %d", sum); return 0; }
结果
Enter a positive integer: 10
Sum = 55
For 循环语句十大注意事项
注册用户可见
[content_control]
1) for 循环中的“表达式 1(循环变量赋初值)”、“表达式 2(循环条件)”和“表达式 3(循环变量增量)”都是选择项, 即可以缺省,但“;”不能缺省。
2)省略了“表达式 1(循环变量赋初值)”, 表示不对循环控制变量赋初值。
3) 省略了“表达式 2(循环条件)”, 则不做其它处理时便成为死循环。
例如:
for(i=1;;i++) sum=sum+i;
相当于:
i=1;
while(1)
{
sum=sum+i;
i++;
}
4) 省略了“表达式 3(循环变量增量)”, 则不对循环控制变量进行操作,这时可在语句体中加入修改循环控制变量的语句。
例如:
for(i=1;i<=100;)
{sum=sum+i;
i++;}
5) 省略了“表达式 1(循环变量赋初值)”和“表达式 3(循环变量增量)”。
例如:
for(;i<=100;)
{sum=sum+i;
i++;}
相当于:
while(i<=100)
{sum=sum+i;
i++;}
6) 3 个表达式都可以省略。
例如:
for(;;)语句
相当于:
while(1)语句
7) 表达式 1 可以是设置循环变量的初值的赋值表达式,也可以是其他表达式。
例如:
for(sum=0;i<=100;i++)sum=sum+i;
8) 表达式 1 和表达式 3 可以是一个简单表达式也可以是逗号表达式。
for(sum=0,i=1;i<=100;i++)sum=sum+i;
或:
for(i=0,j=100;i<=100;i++,j--)k=i+j;
9) 表达式 2 一般是关系表达式或逻辑表达式,但也可是数值表达式或字符表达式,只要其值非零,就执行循环体。
例如:
for(i=0;(c=getchar())!=’\n’;i+=c);
又如:
for(;(c=getchar())!=’\n’;)
printf(“%c”,c);
10) for循环在每个部分中可以有多个用逗号分隔的表达式
for (x = 0, y = num; x < y; i++, y--)
{
statements;
}
11)我们可以把初始表达式放在for loop之外,通过添加分号来跳过初始值表达式。例如:
int i=0;
int max = 10;
for (; i < max; i++) {
printf("%d\n", i);
}
[/content_control]