# Ch5 while迴圈 > 搭配[green judge解題系統](http://www.tcgs.tc.edu.tw:1218/) > Special thanks to [台中女中sagit老師](http://www.tcgs.tc.edu.tw/~sagit/index.htm) \<\(\_ \_\)\> ## > 上一章:[if條件判斷](https://hackmd.io/s/HyuwnlMoZ) > 下一章:[for迴圈](https://hackmd.io/s/H1iyHQc2b) > 回目錄:[國立科學園區實驗中學C++程式語言自學講義](https://hackmd.io/s/B18yT_i5Z) ## <font color='darkblue'>迴圈的用途</font> 1. 重複地做一樣的事情 2. 不知道要做幾次才結束,而是用**判斷某個條件**來決定**該結束了沒** ## <font color='darkblue'>while迴圈</font> 在上一個章節,我們學了if條件判斷 當符合條件該做的事情做完後 程式就繼續往下執行下去了 再也不會回頭重新判斷一次 但若把if改成while 在做完符合條件時該做的事情後 還會再回到**判斷處**重新判斷一次 如果還符合的話 就還會再執行一次大括弧內的程式 <font color='darkorange'>【例題】</font> > 兩津發明了一種[倍倍儲蓄法](https://www.youtube.com/watch?v=cC8E858jPXk),只要每天讓自己的存款倍增,很快就能達到目標的存款 > 輸入一開始的金額money,以及目標的金額goal > 輸出將money一直倍增直到超過goal時的金額 看完題目後,先想: 1.什麼動作是要一直重複做的?<font color='red'> 答:將錢加倍</font> 2.承上,在什麼條件下才要做?<font color='blue'> 答:金額還沒到達目標時</font> ```cpp= int money, goal; cin >> money; cin >> goal; while(money<goal) //金額還沒達到目標時 { money = money*2; //將錢加倍 } cout << money << endl; ``` 這樣一直重複地執行某段程式 因此被稱作「迴圈」 請記得它不是if,它是沒有搭配else的 > <font color="darkgreen"> 【學生練習題】</font> > - [ ] [Green Judge a021: 我討厭偶數 ](http://www.tcgs.tc.edu.tw:1218/ShowProblem?problemid=a021) 迴圈的用途是專門拿來處理「不知道要重複做幾次」的問題 雖然你無法預先知道要做幾次 但你可以在結束時統計出總共做了幾次 <font color='darkorange'>【例題】</font> > 承上題,請問兩津總共要過幾天才能達到目標? 如果需要知道總共做了幾次 只要再宣告一個計數器 在每次迴圈執行時都將計數器+1 就可以算出他總共做了幾次 例如 ```cpp= int money, goal, counter; cin >> money; cin >> goal; counter=0; while(money<goal) { money = money*2; counter = counter+1 ; } cout << counter << endl; ``` > <font color="darkgreen"> 【學生練習題】</font> > - [ ] [Green Judge a022: 細菌繁殖](http://www.tcgs.tc.edu.tw:1218/ShowProblem?problemid=a022) ## <font color='darkblue'>組合技:while與if搭配使用</font> <font color='darkorange'>【例題】</font> > 一台機器上有一個按鈕,和一個起始數字 > 如果目前數字是奇數,則按下按鈕後,數字會減1 > 如果目前數字是偶數,則按下按鈕後,數字會被除以2 > 一直到數字變成1時停止動作 > > 輸入一個數字n,輸出總共要按幾次按鈕 看完題目後,先想: 1.什麼動作是要一直重複做的?<font color='red'> 答:按按鈕(改變數字)</font> 2.承上,在什麼條件下才要做?<font color='blue'> 答:數字還沒變成1時</font> ```cpp= 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; ``` > <font color="darkgreen"> 【學生練習題】</font> > - [ ] [Green Judge a023: 3N+1](http://www.tcgs.tc.edu.tw:1218/ShowProblem?problemid=a023) <font color='red'> 注意,3N+1這題會把一開始的數字也算進去,所以答案記得要+1!!</font> ## <font color='darkblue'>應用:拆解每一位數</font> <font color='darkorange'>【例題】</font> > 輸入一個數字,將它的個位數、十位數、百位數、...一直到最高位數,依序輸出 > 例如輸入31629 > 則輸出 > 9 > 2 > 6 > 1 > 3 提示: 印出一個數字n的最後一位:`cout << n%10 << endl` 將一個數字n的最後一位去除:`n = n/10` 1.什麼動作是要一直重複做的?<font color='red'> 答:印出最後一位,並將最後一位刪去</font> 2.承上,在什麼條件下才要做?<font color='blue'> 答:所有位數還沒被刪光時</font> 範例程式如下 ```cpp= int n; cin >> n; while(n>0) { cout << n%10 << endl; n = n/10; } ``` > <font color="darkgreen"> 【學生練習題】</font> > - [ ] [Green Judge a024: 所有位數和](http://www.tcgs.tc.edu.tw:1218/ShowProblem?problemid=a024) 範例程式如下 ```cpp= int n; cin >> n; int s=0; // 用來存你的答案 while(n>0) { //??? n = n/10; } cout << s << endl; ``` ## <font color='darkblue'>應用:再來一瓶</font> <font color='darkorange'>【例題】</font> > 一瓶可樂一公升,喝完之後每3個空罐子可以換一個新的可樂 > > 輸入一開始可樂有幾瓶 > 輸出把所有空瓶都一直換成新可樂總共可以喝到幾公升 1.什麼動作是要一直重複做的?<font color='red'> 答:喝掉可樂、把空瓶換成新可樂</font> 2.承上,在什麼條件下才要做?<font color='blue'> 答:還有可樂能喝時(可樂數量大於零)</font> 範例程式如下 ```cpp= 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; ``` > <font color="darkgreen"> 【學生練習題】</font> > - [ ] [Green Judge a041: 收集冰棒棍](http://www.tcgs.tc.edu.tw:1218/ShowProblem?problemid=a041) ## > 上一章:[if條件判斷](https://hackmd.io/s/HyuwnlMoZ) > 下一章:[for迴圈](https://hackmd.io/s/H1iyHQc2b) > 回目錄:[國立科學園區實驗中學C++程式語言自學講義](https://hackmd.io/s/B18yT_i5Z)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up