C++

迴圈

Index

while

迴圈

當你想從 1 輸出到 1000

#include <iostream>
using namespace std;

int main(void) {
    cout << 1 << '\n';
    cout << 2 << '\n';
    ...
    cout << 1000 << '\n';
}

還沒學過迴圈的你 be like:

太麻煩 & 花時間了

迴圈

當你想從 1 輸出到 1000

#include <iostream>
using namespace std;

int main(void) {
    int n = 1;
    while(n <= 1000){
        cout << n << '\n';
        n++;
    }
}

學過迴圈的你 be like:

輕鬆解決

#include <iostream>
using namespace std;

int main(void) {
    for(int i = 1; i <= 1000; i++){
        cout << i << '\n';
    }
}

while

當 ... 就 ...

飯粒:

當 n <= 1000,就輸出 n 並 +1

#include <iostream>
using namespace std;

int main(void) {
    int n = 1;
    while(n <= 1000){
        cout << n << '\n';
        n++;
    }
}

while

用法:

while( 重複執行條件 ){
	要執行的東東;
}

當括號裡的條件為 True 的時候,迴圈會不斷進行下去,直到變成 False

break

跳出迴圈的進行

while( 重複執行條件 ){
	要執行的東東;
    if( 條件 ){
    	break;
    }
}

當 if 裡的條件為 True 的時候,會跳出 ( 結束 ) 迴圈,不再重複執行

continue

跳出此輪迴圈的進行

while( 重複執行條件 ){
	要執行的東東;
    if( 條件 ){
    	continue;
    }
}

當 if 裡的條件為 True 的時候,會跳出此輪迴圈,執行下一輪

迴圈都可以 break 跟 continue

while

練習

#include <iostream>
using namespace std;

int main(void) {
    while(true){
        cout << 1;
    }
}

會輸出多少個 1 呢?

答:無限個

這是一個無窮迴圈

while

練習

#include <iostream>
using namespace std;

int main(void) {
    int num = 10;
    while(num > 0){
        cout << num << ' ';
        num -= 2;
        if(num < 4) break;
        if(num % 3 == 0) {
            num -= 3;
            continue;
        }
    }
}

會輸出什麼呢?

10 8 3

while

#include <iostream>
using namespace std;

int main(void) {
    int num = 10;
    while(num > 0){
        cout << num << ' ';
        num -= 2;
        if(num < 4) break;
        if(num % 3 == 0) {
            num -= 3;
            continue;
        }
    }
}

num = 10 > 0

Round 1

輸出 10 & num - 2 = 8

num = 8 > 0

Round 2

輸出 8 & num - 2 = 6

num % 3 = 0 -> num - 3 = 3

num = 3 > 0

Round 3

輸出 3 & num - 2 = 1

num = 1 < 4 -> 結束迴圈

do while

do while

先做 ... 再進入迴圈

與 while ( 前測式 ) 不同

do while ( 後測式 ) 會先做事,之後無條件進入迴圈

#include <iostream>
using namespace std;

int main(void) {
    int password = 12345;
    int num;
    do {
        cout << "Please enter your password\n";
        cin >> num;
    } while(num != password);
}

飯粒:

do while

#include <iostream>
using namespace std;

int main(void) {
    int password = 12345;
    int num;
    cout << "Please enter your password\n";
    cin >> num;
    while(num != password){
        cout << "Please enter your password\n";
        cin >> num;
    }
}

如果是用 while 寫:

要多寫兩行重複的

程式碼看起來不簡潔

do while

用法:

do{
	要做的事;
} while( 條件 ); //記得加分號

使用時機:

需要先做某件事後再判斷

飯粒 x2:

#include <iostream>
using namespace std;

int main(void) {
    int end_num = 10;
    int num;
    do {
        cout << "Guess a number: ";
        cin >> num;
    } while(num != end_num);
}

for

for

迴圈計數器

飯粒:

當 n <= 1000,就輸出 n 並 +1

#include <iostream>
using namespace std;

int main(void) {
    for(int n = 1; n <= 1000; n++){
        cout << n << '\n';
    }
}

for

跟 while 不同的是,for 可以明確知道會執行多少次及執行順序

用法:

for(變數; 重複執行條件; 對變數做事){
	要執行的東東;
}

for 的括號裡有三個東西,變數跟對變數做事可以不用寫,但分號一定要加

當條件為 True 時會重複執行,直到為 False

for

不加變數 & 不對變數做事

#include <iostream>
using namespace std;

int main(void) {
    int i = 0;
    for(;i < 10;){
        cout << i << '\n';
        i++;
    }
}

如果少一個分號,編譯器就會報錯

for

巢狀迴圈:

#include <iostream>
#include <stdio.h>
using namespace std;

int main(void) {
    for(int i = 1; i < 10; i++){
        for(int j = 1; j < 10; j++){
            printf("%*d", 3, i*j); //格式化輸出
        }
        cout << '\n';
    }
}

可以印出九九乘法表!

for

巢狀迴圈:

#include <iostream>
#include <stdio.h>
using namespace std;

int main(void) {
    for(int i = 1; i < 10; i++){
        for(int j = 1; j < 10; j++){
            printf("%*d", 3, i*j); //格式化輸出
        }
        cout << '\n';
    }
}

...

i = 1

j = 1

j = 2

...

j = 9

i = 2

j = 1

j = 2

...

j = 9

i = 9

j = 1

j = 2

...

j = 9

practice

  • d074 - 電腦教室

  • a244 - 新手訓練 ~ for + if

  • d069 - 格瑞哥里的煩惱 (t 行版)

  • d070 - 格瑞哥里的煩惱 (0 尾版)

  • a038 - 數字翻轉

  • d649 - 數字三角形

zerojudge

按照難度排ㄉ ( 大概

下課!

C++ - 3 - loop

By pomer0

C++ - 3 - loop

  • 102