Ch5 while迴圈

搭配green judge解題系統
Special thanks to 台中女中sagit老師 <(_ _)>

上一章:if條件判斷
下一章:for迴圈
回目錄:國立科學園區實驗中學C++程式語言自學講義

迴圈的用途

  1. 重複地做一樣的事情
  2. 不知道要做幾次才結束,而是用判斷某個條件來決定該結束了沒

while迴圈

在上一個章節,我們學了if條件判斷
當符合條件該做的事情做完後
程式就繼續往下執行下去了
再也不會回頭重新判斷一次

但若把if改成while
在做完符合條件時該做的事情後
還會再回到判斷處重新判斷一次
如果還符合的話
就還會再執行一次大括弧內的程式

【例題】

兩津發明了一種倍倍儲蓄法,只要每天讓自己的存款倍增,很快就能達到目標的存款
輸入一開始的金額money,以及目標的金額goal
輸出將money一直倍增直到超過goal時的金額

看完題目後,先想:
1.什麼動作是要一直重複做的? 答:將錢加倍
2.承上,在什麼條件下才要做? 答:金額還沒到達目標時

int money, goal; cin >> money; cin >> goal; while(money<goal) //金額還沒達到目標時 { money = money*2; //將錢加倍 } cout << money << endl;

這樣一直重複地執行某段程式
因此被稱作「迴圈」
請記得它不是if,它是沒有搭配else的

【學生練習題】

迴圈的用途是專門拿來處理「不知道要重複做幾次」的問題
雖然你無法預先知道要做幾次
但你可以在結束時統計出總共做了幾次

【例題】

承上題,請問兩津總共要過幾天才能達到目標?

如果需要知道總共做了幾次
只要再宣告一個計數器
在每次迴圈執行時都將計數器+1
就可以算出他總共做了幾次
例如

int money, goal, counter; cin >> money; cin >> goal; counter=0; while(money<goal) { money = money*2; counter = counter+1 ; } cout << counter << endl;

【學生練習題】

組合技:while與if搭配使用

【例題】

一台機器上有一個按鈕,和一個起始數字
如果目前數字是奇數,則按下按鈕後,數字會減1
如果目前數字是偶數,則按下按鈕後,數字會被除以2
一直到數字變成1時停止動作

輸入一個數字n,輸出總共要按幾次按鈕

看完題目後,先想:
1.什麼動作是要一直重複做的? 答:按按鈕(改變數字)
2.承上,在什麼條件下才要做? 答:數字還沒變成1時

int n; int counter; cin >> n; counter = 1; while(n!=1) //數字還沒變成1時 { counter=counter+1; //按鈕次數 if(n%2==1) //目前的n是奇數 n=n-1; else //目前的n是偶數 n=n/2; } cout << counter << endl;

【學生練習題】

注意,3N+1這題會把一開始的數字也算進去,所以答案記得要+1!!

應用:拆解每一位數

【例題】

輸入一個數字,將它的個位數、十位數、百位數、一直到最高位數,依序輸出
例如輸入31629
則輸出
9
2
6
1
3

提示:
印出一個數字n的最後一位:cout << n%10 << endl
將一個數字n的最後一位去除:n = n/10

1.什麼動作是要一直重複做的? 答:印出最後一位,並將最後一位刪去
2.承上,在什麼條件下才要做? 答:所有位數還沒被刪光時

範例程式如下

int n; cin >> n; while(n>0) { cout << n%10 << endl; n = n/10; }

【學生練習題】

範例程式如下

int n; cin >> n; int s=0; // 用來存你的答案 while(n>0) { //??? n = n/10; } cout << s << endl;

應用:再來一瓶

【例題】

一瓶可樂一公升,喝完之後每3個空罐子可以換一個新的可樂

輸入一開始可樂有幾瓶
輸出把所有空瓶都一直換成新可樂總共可以喝到幾公升

1.什麼動作是要一直重複做的? 答:喝掉可樂、把空瓶換成新可樂
2.承上,在什麼條件下才要做? 答:還有可樂能喝時(可樂數量大於零)

範例程式如下

int coke; int total; int bottle; total=0; //總共喝的公升數,一開始先歸零 bottle=0; //空瓶子的數量,一開始先歸零 cin >> coke; //可樂數量 while(coke>0) //可樂數量大於零的時候 { total = total+coke; //把可樂全喝掉(將此次可樂數量加入統計裡) bottle = bottle+coke; //可樂全變成空瓶子(將空瓶子的數量加上此次可樂數量) coke = bottle/3; //計算出現在空瓶子可以換出多少可樂 bottle = bottle%3; //剩下多少空瓶子 } cout << total << endl;

【學生練習題】

上一章:if條件判斷
下一章:for迴圈
回目錄:國立科學園區實驗中學C++程式語言自學講義