C 語言學習筆記 (六):迴圈的用法
學習書籍:C 語言學習手冊 第四版。作者: 洪維恩
這是一篇記錄自己學習 C 語言的過程,算是給自己看的筆記,所以這裡面的內容,是我整理書中我認為重要的部分,然後用自己的方式重新寫一遍,如果有圖,我會理解完,再自己畫出來,內容肯定會和課本上有出入,若有錯誤,或是理解錯的地方,希望能讓我知道。
程式大致可分成三種結構:
- 循序性結構 (sequence structure)
st=>start: 開始程式
e=>end: 結束程式
op1=>operation: 敘述1
op2=>operation: 敘述2
st->op1->op2->e
st=>start: 開始程式
e=>end: 結束程式
op1=>operation: 敘述1
op2=>operation: 敘述2
cond=>condition: 判斷條件
st->cond
cond(yes)->op1->e
cond(no)->op2->e
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;
}