迴圈敘述 - while

一、while 敘述的語法

有時候,我們需要讓電腦重複執行某些指令,直到某個條件成立為止,這種語法稱為迴圈敘述。在 C 語言中的迴圈敘述有三種,分別是 for、while、do-while,我們先來看看 while 的語法:

while (條件式) 指令一;

上面的語法是當條件式成立時,程式會重複執行指令一,每執行完指令一之後,便再檢查一次該條件式是否成立,如果成立,則繼續執行迴圈內的指令(也就是指令一),而如果條件式不成立了,則離開這個迴圈,執行下一行指令。上面的語法,如果我們希望條件成立的時候能執行一堆指令,可以用一對大括號把它們包起來,如:

while (條件式) {

 指令一;

 指令二;

 指令三;

}

而在迴圈敘述中,我們可以使用 break 指令讓它強制離開迴圈,或是用 continue 指令來忽略下面的指令而繼續下一次的迴圈,例如:

a = ( rand()%100 ) + 1;

b = 0;

while ( b!=a ) {

 scanf("%d", &b);

 if( b > 100 ) continue;

 if( b <= 0 ) break;

 if( b > a ) printf("Too big!\n");

 if( b < a ) printf("Too small!\n");

}

if( b==a ) printf("Bingo!\n");

else printf("Give up!!\n");

上面的例子,當我們輸入一個大於 100 的數字時,程式遇到 continue,便直接跳回 while 的第一行,而當我們輸入一個小於等於 0 的數字時,程式執行到 break,便強制跳出這個迴圈,而跳到迴圈的下一行 if 的地方。

 

二、猜數字遊戲(改良版)

上一頁我們寫了一個可以猜三次的猜數字遊戲,接下來,我們利用 while 迴圈將這個程式改良成可以一直猜到對為止,整個程式如下:

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

void main()

{

 int a, b;

 srand(time(NULL));

 a=(rand()%100)+1;

 b=0;

 while(a!=b) {

   printf("1 - 100 =>");

   scanf("%d", &b);

   if(b>a) printf("Too Big!\n");

   if(b<a) printf("Too Small!\n");

 }

 printf("Bingo!\n");

}

上面在 while 的前一行我們寫 b=0 是因為程式一開始 b 是一個亂數,為了避免 b 的值剛好和 a 相等,所以我們把它設定成 0。這個程式之前要猜三次,便要寫三次的程式碼,現在改用 while 之後,便只要寫一次的程式碼,整個程式變得比較短,而且也比較容易看得懂。接下來,我們再將這個程式改良,讓它可以顯示目前猜的次數,因此我們要多一個變數 c 來記錄目前猜到第幾次,下面的程式針對修改的部分改用黃色來表示:

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

void main()

{

 int a, b, c;

 srand(time(NULL));

 a=(rand()%100)+1;

 b=0;

 c=0;

 while(a!=b) {

   c=c+1;

   printf("%d. 1 - 100 =>", c);

   scanf("%d", &b);

   if(b>a) printf("Too Big!\n");

   if(b<a) printf("Too Small!\n");

 }

 printf("Bingo! You Spend %d times.\n", c);

}

 

三、練習:

  1. 改良上述程式,當我們輸入 0 的時候,可以直接結束這個遊戲。(利用 if 及 break)
  2. 改良上述程式,讓使用者最多可以猜五次。(也是利用 if 及 break)
  3. 改良上述程式,讓每次出現的數字範圍,會隨著我們輸入的數字而改變,例如(粉紅色代表輸出,淺藍色則是輸入的值):
    1. 1 - 100 => 50
    Too Big!
    2. 1 - 50 =>
    30
    Too Small!
    3. 30 - 50 =>
    ....

 

四、補充 ─ do-while 敘述的語法

接下來我們看到 do-while 的語法:

do {

 指令一;

 指令二;

 指令三;

} while (條件式);

我們可以看到,其實 while 和 do-while 的語法非常像,唯一的不同是, while 是先檢查條件是否成立,成立才執行下面的指令,而 do-while 是先執行那些指令,再去檢查條件是否成立。以我們剛才猜數字的例子來說,其實用 do-while 是比較合適的,各位也可以試著把它改用 do-while 看看。

只不過以一般程式設計師來說,用 while 的次數比用 do-while 來得高,而且其他非 C 的程式語言,有些只有 while 語法而沒有 do-while 的語法,所以我們教學時以 while 為主,而同學們可以自行判斷使用 while 還是使用 do-while。(有句話說,一招半式闖江湖,只會 while 而不會 do-while,程式還是寫得出來,不過多學一個語法也是不錯的。)

 

上一頁

首頁

下一頁