C++與演算法

while迴圈

英文加油站

  • while:當...的時候


語法 - while

while( A.條件式 )
{
    B.當條件成立時,就重覆做的事...
}

執行起來流程如下

檢查條件A,成立就做B

==>檢查條件A,成立就做B

==>檢查條件A,成立就做B

...

...

==>檢查條件A,成立就做B

==>檢查條件A,不成立離開。



範例1 - 班級名條

  Rock老師一個學年會教很多個班,每班的人數都不一樣。為了製作名條方便,Rock決定寫程式輸出No.1~No.n

code

#include<iostream>
using namespace std;

int main()
{
    int n;
    int i;

    cin >> n;

    i = 1;
    while( i <= n )
    {
        cout << "No." << i << endl;

        i = i+1;
    }

    return 0;
}

流程圖

input

10

output

No.1
No.2
No.3
No.4
No.5
No.6
No.7
No.8
No.9
No.10

自己試試看

  • i = i+1; 拿掉會發生什麼事? 為什麼?
  • i = i+1; 移到 cout 之前,結果會不會改變?



範例2 - 成績加總

  Rock老師在學期末打算相加學生的期中考期末考分數做為學期總成績。期中考、期末考滿分各是50分。Rock老師有上千位學生,不太可能每個人一一計算,請你寫出一個程式,替Rock老師達成這項任務。

輸入說明

輸入資料一開始為一個整數n,代表接下來有n位學生。

每位學生有 2 項整數,代表期中考、期末考分數。

輸出說明

請你對每位學生依序輸出他的學期總成績。

Input

5
20 50
40 40
30 50
10 0
50 50

Output

70
80
80
10
100

code

#include<iostream>
using namespace std;

int main()
{
    int n;
    int i;
    int a, b;

    cin >> n;

    i = 0;
    while( i < n )
    {
        cin >> a >> b;
        cout << a+b << endl;

        i = i+1;
    }

    return 0;
}



範例3 - 遞增等差數列

輸入說明

輸入三個整數a1and。分別代表遞增等差數列的首項末項公差

輸出說明

列出此遞增等差數列。

code

#include<iostream>
using namespace std;

int main()
{
    int a1, an, d;
    int i;

    cin >> a1 >> an >> d;

    i = a1;
    while( i<=an )
    {
        cout << i << " ";

        i = i+d;
    }
    cout << endl;

    return 0;
}

input

0 30 5

output

0 5 10 15 20 25 30

試試看

請修改程式,讓程式也可算出該遞增等差數列的和。

如上面的輸入,可以算出和為105



範例4 - 吃漢堡

  Eric覺得麥蒂勞的39元漢堡實在太便宜、太好吃了,因此他決定晚餐要把口袋裡所有錢通通拿來吃39元漢堡。假設他每5分鐘就能吃一個漢堡,請你記錄他吃漢堡的過程。

輸入說明

一個整數money,代表Eric身上帶了多少錢。

code

#include<iostream>
using namespace std;

int main()
{
    int money;
    int minute = 0;

    cin >> money;
    while( money >= 39 )
    {
        money = money-39;

        cout << minute << ":00 Eric ate a hamburger." << endl;
        cout << "    money : " << money << endl;

        minute = minute+5;
    }

    return 0;
}

input

200

output

0:00 Eric ate a hamburger.
    money : 161
5:00 Eric ate a hamburger.
    money : 122
10:00 Eric ate a hamburger.
    money : 83
15:00 Eric ate a hamburger.
    money : 44
20:00 Eric ate a hamburger.
    money : 5