for 循环把所有这三种动作(初始化、测试、更新)都放在一起。通过使用for循环,您可以用程序清单6.11中的程序来代替前一个程序 。
程序清单6.11 sweetie2.c
//sweetie2.c -- 一个使用for循环的例子
#include
int main (void)
{
const NUMBER = 22;
for (count=1;count<=NUMBER;count++)
printf("Be my valentine!\n);
return 0;
}
在关键字for之后的圆括号中包含了由两个分号分开的三个表达式。
第一个表达式进行初始化, 它在for循环开始的时候执行一次。第二个表达式是判断条件,在每次执行循环之前都要对它进行求值。当表达式为假时,循环就结束了。第三个表达式进行改变或称为更新,它在每次循环结束时进行计算。
三个控制表达式中的每一个都是完整的表达式,所以任意一个控制表达式的任何副作用(例如把一个变更的值递增)都在程序求下一个表达式的值之前生效。
程序清单6.12 for_cube.c
/*for_cube.c--使用一个for循环产生一个立方表*/
#include
int main (void)
{
int num;
printf(" n n cubed\n");
for (num=1;num<=6;num++)
printf("%5d %5d\n",num,num*num*num);
return 0;
}
for 循环的第一行告诉我们关于循环参数的所有信息:num的初始值,num的最终值以及num在每次循环的增量。
利用for循环的灵活性
for循环还有更多其他的可能性,下面是其中的9种:
1、您可以使用减量运算符来减小计数器而不是增加它。
/*for_down.c*/
#include
int main (void)
{
int secs;
for (secs = 5;secs > 0;secs--)
printf("%d seconds!\n",secs);
printf("We have ignition!\n");
return 0;
}
/*下面是它的输出
5 seconds!
4 seconds!
3 seconds!
2 seconds!
1 seconds!
We have ignition!
*/
2、如果您需要,您可以让计数器依次加2、加10,等等:
/*for_13s.c*/
#include
int main (void)
{
int n;
for (n=2;n<60;n=n+13)
printf("%d \n",n);
return 0;
}
/*打印输出如下:
2
15
28
41
54
*/
3.您也可以用字符代替数字来进行计数
/*for_char.c*/
#include <stdio.h>
int main (void)
{
char ch;
for(ch='a';ch<='z';ch++)
printf("The ASCII value for %c is %d.\n",ch,ch);
return 0;
}
/*部分输出如下:
The ASCII value for a is 97.
The ASCII value for b is 98.
.
.
.
The ASCII value for z is 122.
*/
这段程序可以工作,因为字符是以整数形式进行存储的,所以这个循环实际上仍然是用整数来计数的。
4、您可以判断迭代次数之外的条件。在for_cube程序中,您可以将
for (num=1;num<=6;num++)
用for (num=1;num*num*num<=216;num++)来代替
如果与限制循环相比,您更关心限制立方的大小,就可以使用这种判断条件。
5、您也可以让数量几何增加而不是算术增加;也就是不是每次加一个固定的数,而是乘上一个固定的数。
6、在第三个表达式中,您可以使用任何合法的表达式。无论您使用的是什么,在每次循环中都会得到更新。
7、您甚至可以让一个或多个表达式为空(但是不要遗漏分号)。只须确保在循环中包含了一些能使循环最终结束的语句。
8、第一个表达式不必初始化一个变量,它也可以是某种类型的printf()语句。要记住第一个表达式只在执行循环的其他部分之前被求值或执行一次。
/*for_show.c*/
#include <stdio.h>
int main()
{
int num=0;
for (printf("keep entering numbers!\n");num!=6;)
scanf("%d",&num);
printf("That's the ont I want!\n");
return 0;
}
/*这段程序只把第一条消息打印一次,然后在您输入6之前不断地接收数字:
keep entering numbers!
3
5
8
6
That's the one I want!
*/
9、循环中的动作可以改变循环表达式的参数。例如,假定您有一个这样的循环:
for (n=1;n<1000;n=n+delta)
在交互式的程序中,delta的值可以在循环运行时由用户进行改变。这种调节有一点危险,例如把delta设置为0会使您(和循环)停止不前。
简言之,因为您有选择for循环的控制表达式的自由,这使得您在执行固定次数的循环之外还可以做更多的事情。
总结:for语句是一个入口条件循环,即是否再次执行循环的决定是在循环执行之前做出的。
来源:oschina
链接:https://my.oschina.net/u/2754880/blog/684522