C/C++

C 語言學習筆記 (六):迴圈的用法

學習書籍:C 語言學習手冊 第四版。作者: 洪維恩

這是一篇記錄自己學習 C 語言的過程,算是給自己看的筆記,所以這裡面的內容,是我整理書中我認為重要的部分,然後用自己的方式重新寫一遍,如果有圖,我會理解完,再自己畫出來,內容肯定會和課本上有出入,若有錯誤,或是理解錯的地方,希望能讓我知道。


程式大致可分成三種結構:

  • 循序性結構 (sequence structure)
  • 
    st=>start: 開始程式
    e=>end: 結束程式
    op1=>operation: 敘述1
    op2=>operation: 敘述2
    
    st->op1->op2->e
    
  • 選擇性結構 (selection structure)
  • 
    st=>start: 開始程式
    e=>end: 結束程式
    op1=>operation: 敘述1
    op2=>operation: 敘述2
    cond=>condition: 判斷條件
    
    st->cond
    cond(yes)->op1->e
    cond(no)->op2->e
    
  • 重複性結構 (iteration structure)
st=>start: 開始程式
e=>end: 結束程式
op1=>operation: 敘述1
op2=>operation: 敘述2
cond=>condition: 判斷條件

st->op1->cond
cond(no)->op2->op1->cond
cond(yes)->e

在之前的文章已經學習選擇性結構,這篇要來學習重複性結構,也就是迴圈的用法。在C語言中,實現迴圈有三種方式:for、while、do-while。雖然都是迴圈,但這些方式有不同的特性,實作起來也不一樣,可以根據需要來使用。

for 迴圈

for(設定迴圈初始值; 判斷條件; 設定控制增減量)
{
    迴圈主體內容;
}

while 迴圈

設定迴圈初始值;
while(判斷條件)
{
    迴圈主體內容;
    設定控制增減量;
}

do – while 迴圈

設定迴圈初始值;
do
{
    迴圈主體內容;
    設定控制增減量;
} while(判斷條件);

迴圈比較

Name for while do – while
先進行條件判斷
後進行條件判斷
在迴圈中需要設定控制增減量
控制變數會自動變更
迴圈重複次數 已知 未知 未知
迴圈最少會執行的次數 0 0 1
何時重複執行迴圈 條件成立 條件成立 條件成立

巢狀迴圈

用法與巢狀 if 類似,就是將 for 或是 while 迴圈裡面再包一次迴圈,可以是巢狀 for 迴圈、巢狀 while 迴圈、或是混和搭配使用。

最常見的範例就是 九九乘法表:

#include<stdio.h>
#include<stdlib.h>
int main(){
    int a, b;
    for(a=0; a<=9; a++){        // 外層迴圈
        for(b=0; b<=9; b++){        // 內層迴圈
            printf("%d*%d=%2d", a, b, a*b);
        }
        printf("\n");
    }
    return 0;
}

break 敘述

break 用來跳出迴圈;如果是巢狀迴圈,則會跳離當前迴圈。

通常會搭配 if 判斷式來使用。

for(設定迴圈初始值; 判斷條件; 設定增減量)
{
    敘述1;
    敘述2;
    break;    // 跳出迴圈 ───────────┐
}                                   //
// 跳出迴圈後,繼續執行之後的程式 <────┘
......

範例:

#include<stdio.h>
#include<stdlib.h>
int main(){
    int a;
    for(a=0; a<=10; a++){
        if(a%3 == 0){
            break;    // 跳出迴圈
        }
        printf("i=%d", a);
    }
    printf("跳出迴圈,i=%d", a);
    return 0;
}

通常 break 最常見的應用是再登入介面,當用戶輸入密碼超過指定次數就會離開登入畫面。

continue 敘述

continue 是用來強制程式跳回到迴圈開頭。

for(設定迴圈初始值; 判斷條件; 設定增減量)
{
    敘述1;       // 迴圈開頭 <────────────────────┐
    敘述2;       //                              //
    continue;    // 每當遇到 continue 回到開頭 ───┘
    敘述n;
}
......

範例:

#include<stdio.h>
#include<stdlib.h>
int main(){
    int a;
    for(a=0; a<=10; a++){
        if(a%3 == 0){
            continue;    // 回到前面繼續執行
        }
        printf("i=%d", a);
    }
    printf("跳出迴圈,i=%d", a);
    return 0;
}

留下一個回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *