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語句是一個入口條件循環,便是否再次執行循環的決定是在循環執行以前作出的。