for 循环把全部这三种动做(初始化、测试、更新)都放在一块儿。经过使用for循环,您能够用程序清单6.11中的程序来代替前一个程序 。测试
程序清单6.11 sweetie2.ccode
//sweetie2.c -- 一个使用for循环的例子 #include int main (void) { const NUMBER = 22; for (count=1;count<=NUMBER;count++) printf("Be my valentine!\n); return 0; }
在关键字for以后的圆括号中包含了由两个分号分开的三个表达式。it
第一个表达式进行初始化, 它在for循环开始的时候执行一次。第二个表达式是判断条件,在每次执行循环以前都要对它进行求值。当表达式为假时,循环就结束了。第三个表达式进行改变或称为更新,它在每次循环结束时进行计算。io
三个控制表达式中的每个都是完整的表达式,因此任意一个控制表达式的任何反作用(例如把一个变动的值递增)都在程序求下一个表达式的值以前生效。for循环
程序清单6.12 for_cube.cclass
/*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循环的灵活性object
for循环还有更多其余的可能性,下面是其中的9种:循环
一、您可使用减量运算符来减少计数器而不是增长它。程序
/*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! */
二、若是您须要,您可让计数器依次加二、加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. */
这段程序能够工做,由于字符是以整数形式进行存储的,因此这个循环实际上仍然是用整数来计数的。
四、您能够判断迭代次数以外的条件。在for_cube程序中,您能够将
for (num=1;num<=6;num++)
用for (num=1;num*num*num<=216;num++)来代替
若是与限制循环相比,您更关心限制立方的大小,就可使用这种判断条件。
五、您也可让数量几何增长而不是算术增长;也就是否是每次加一个固定的数,而是乘上一个固定的数。
六、在第三个表达式中,您可使用任何合法的表达式。不管您使用的是什么,在每次循环中都会获得更新。
七、您甚至可让一个或多个表达式为空(可是不要遗漏分号)。只须确保在循环中包含了一些能使循环最终结束的语句。
八、第一个表达式没必要初始化一个变量,它也能够是某种类型的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! */
九、循环中的动做能够改变循环表达式的参数。例如,假定您有一个这样的循环:
for (n=1;n<1000;n=n+delta)
在交互式的程序中,delta的值能够在循环运行时由用户进行改变。这种调节有一点危险,例如把delta设置为0会使您(和循环)中止不前。
简言之,由于您有选择for循环的控制表达式的自由,这使得您在执行固定次数的循环以外还能够作更多的事情。
总结:for语句是一个入口条件循环,便是否再次执行循环的决定是在循环执行以前作出的。