for 迴圈 & 流程控制

Cathy Yang

2018 資訊之芽 C語法班

參考 2017 Bookgin's Slide

for loop

  • while

  • do-while

  • for

適合不知道次數時使用

 

適合不知道次數時使用、且至少執行一次

 

適合確定次數時使用

語法與流程圖

for ( 初始化 ; 繼續條件 ; 更新 ) {
    迴圈內容;
}

印出0~9

for (int i = 0; i < 10; i++) {
    std::cout << i << std::endl;
}

補充: ++i 與 i++ 的差別

  • ++在前,i先遞增
  • ++在後,i執行完敘述後才遞增
int i = 0;
std::cout << ++i << " ";
std::cout << i << " ";
// 輸出 1 1
int i = 0;
std::cout << i++ << " ";
std::cout << i << " ";
// 輸出 0 1

while vs. for

等價寫法

int i = 0;
while (i < 10) {
    std::cout << i << std::endl;
    i++;
}
for (int i = 0; i < 10; i++) {
    std::cout << i << std::endl;
}

選用時機

明確知道次數

不確定次數

// 一直持續到密碼輸入正確為止
while (password != 12345678) {
    std::cin >> password;
}
// 輸入 n 個人的成績到 array 中
std::cin >> n;
for (int i = 0; i < n; i++) {
    std::cin >> scores[i];
}

C99的小問題

依照早期的標準,如果是純 C 檔案(*.c),必須要這樣寫

int i;
for (i = 0; i < 10; i++) {
    ...
}

但現在 C99 標準,以及 C++ 檔案(*.cpp) 可以寫在裡面

for (int i = 0; i < 10; i++) {
    ...
}
  • Reference
  • Keyword: for loop initial declarations

練習時間

用 for 來完成 203 - 終極倒數 吧!

for ( 初始化 ; 繼續條件 ; 更新 ) {
    迴圈內容;
}

無限迴圈

for ( ; ; ) {
    ...
}

裡面放兩個分號即可

多重表達式

for (int i = 0, j = 1000; i < 10; i++, j++) {
    std::cout << i << std::endl;
    std::cout << j << std::endl;
}

「初始化」與「更新」,可以放多個式子

中間用逗號,分開

巢狀迴圈

// a * b = ?
for (int a = 1; a <= 9; a++) {
    // 到這裡時,a 是固定的,只需要專心考慮 b 就好
    for (int b = 1; b <= 9; b++) {
        std::cout << a << "x" << b << "=" << a*b << std::endl;
    }
    // 跑完一輪所有的 b 之後,準備進入 a 的「更新」部份
}

迴圈中放迴圈

九九乘法表

流程控制

break & continue

Break

遇到 break 時,會直接結束目前的這個迴圈

int n = 77;
bool is_prime = true;
for(int i = 2;i < n; i++) {
    if(n % i == 0){
        is_prime = false;
        break;
    }
}

Continue

遇到 continue 時,會直接執行目前迴圈的「更新」的

區塊,在這個範例中就是 i++

// 印出奇數
for (int i = 0; i < 10; i++) {
    if (i % 2 == 0)
        continue;
    std::cout << i << std::endl;
}
Made with Slides.com