所謂的迴圈就是可以讓程式重複執行某項特定工作的機制,典型的 for 迴圈如下圖示
for 為關鍵字之一,後面接的小括弧內需要三個運算式,三個運算式用兩個分號隔開。迴圈需要有控制變數,第一個運算式就是給控制變數設置初值,第二個運算式則是迴圈的結束條件,通常是控制變數大於或小於某個數字,第三個運算式則是調整控制變數的值,使迴圈持續進行。
由於 for 迴圈有明確的重複控制的機制,因此常用於確定重複次數的迴圈。我們以 gn4.c 為藍本,加入 for 迴圈給使用者最多猜 10 次,全部的程式碼如下
#include <stdio.h> #include <time.h> #include <math.h> enum STATE {RIGHT = 1, BIG_FOUR ,BIG_FIVE, SMALL_FOUR, SMALL_FIVE}; int main(void) { int answer = time(NULL); int guess; int diff; int state = 0; int i; int counter = 0; answer %= 25; if (answer == 0) { answer = 25; } for (i = 0; i < 10; i++) { printf("請猜一個數字 1 到 25: "); scanf("%d", &guess); diff = guess - answer; diff = (int) fabs(diff); if (guess == answer) { state = RIGHT; } else { counter++; if (guess > answer) { if (diff > 5) { state = BIG_FIVE; } else { state = BIG_FOUR; } } else { if (diff > 5) { state = SMALL_FIVE; } else { state = SMALL_FOUR; } } } if (state == RIGHT) { printf("猜對囉!\n"); break; } else if (state == BIG_FIVE) { printf("猜的數字比答案大....還很遠,再加把勁!\n"); } else if (state == BIG_FOUR) { printf("猜的數字比答案大....不錯喔!很接近了\n"); } else if (state == SMALL_FIVE) { printf("猜的數字比答案小....還很遠,再加把勁!\n"); } else if (state == SMALL_FOUR) { printf("猜的數字比答案小....不錯喔!很接近了\n"); } else { printf("猜錯囉!\n"); } } if (counter == 0) { printf("\n\n很棒喔!一次就猜對!\n"); } else if (counter == 10) { printf("\n\n一次都沒猜對,很遜欸!\n"); } else if (counter > 5) { printf("\n\n總算有猜對,下次加油喔!\n"); } else { printf("\n\n猜了 %d 次,不錯不錯!\n", counter + 1); } return 0; } /* 《程式語言教學誌》的範例程式 http://pydoing.blogspot.com/ 檔名:gn7.c 功能:簡單的猜數字遊戲 作者:張凱慶 時間:西元2010年7月 */
for 迴圈從第 21 行開始
for (i = 0; i < 10; i++) {
到第 74 行的左大括弧結束。我們在第 13 行宣告整數變數 i 作為 for 迴圈的控制變數,另外在第 14 行宣告另一個整數變數 counter ,並同時設初值為 0 ,這個 counter 是準備用來累計使用者猜錯次數的
int counter = 0;
此外須注意接受使用者輸入,也就是要輸入猜測數字必須放在 for 迴圈之內,也就是 for 後面的大括弧之中,這樣才可以在使用者猜錯的時候,重新接受使用者的輸入猜測數字。
變數 counter 放在第 32 行,
counter++;
這是說,只要猜錯, counter 就會遞增 1 。
我們在第 54 行加入了 break 陳述
break;
因此,只要猜對就會提前離開 for 迴圈。
來吧!來編譯玩玩看這新版本的猜數字遊戲吧!
問題與討論
- 所謂的迴圈是什麼?
- 為什麼 for 迴圈常用於確定重複次數的情況?
沒有留言:
張貼留言