)
上一片博客講解了我對選擇結構相關基本知識的理解這篇將講解循環結構相關語句。本篇學習目標學完本篇后你將能夠區分 while、do-while、for 三種循環的語法格式與適用場景使用嵌套循環解決二維數組遍歷等實際問題正確使用 break 和 continue 控制循環流程。本篇講解內容1. while循環do-while循環for循環及其對比2. 循環的嵌套。3. break和continue在上述循環中的用法。在我們日常生活中經常需要重復一種判斷及執行語句多次例如連續求和次數累加等等。所以C語言提供了三種循環下面我一一講解。一. 循環語句1. while循環while循環的格式while(表達式) { (循環體) }運行模式先判斷表達式真則執行循環體假則跳出循環。例子#define _CRT_SECURE_NO_WARNINGS #includestdio.h int a 1; while(a 6) { printf(%d , a); }但是這一個代碼塊在vs2026上是運行不了的因為變量a一直沒有變判斷一直為真則系統會陷入死循環所以在循環結構中的變量一般至少有一個在依次循環結束后變化。修改代碼#define _CRT_SECURE_NO_WARNINGS #includestdio.h int a 1; while(a 6) { printf(%d , a); a; }每次循環后a均會加一最終會停止運行結果打印1 2 3 4 5 。2. do_while循環但我們做一些小游戲的時候一般需要先打印菜單后選擇選項一確定是否進入例如一個猜字游戲菜單void menu() { printf(*****************************\n); printf(**********1-開始游戲*********\n); printf(*****************************\n); printf(**********0-退出游戲*********\n); printf(*****************************\n); printf(請選擇); }而大部分游戲具有循環性所以我們需要用循環語句實現所以步驟是打印菜單-選擇-1-開始游戲-結束-打印菜單-選擇-1......|-0-退出游戲 |-0......那么需要先執行相關命令再循環則單獨的while循環語句不能實現就要do_while循環語句其結構是do { 循環體; }while(判斷表達式);所以上面提到的猜數字游戲可以這樣寫int main() { int input 0; do { menu(); scanf(%d, input); switch (input) { case 1: game(); break; case 0: printf(游戲結束\n); break; default: printf(輸入錯誤請重新輸入\n); } } while (input); return 0; }game和menu一樣都是函數調用這里的實現不在詳解有興趣可以看一看我的代碼庫https://gitee.com/maomaocyuyan/code_small-project/blob/master/猜數字游戲/猜數字游戲/猜數字.c易忽略1.do后面一般有大括號2.while(判斷語句)后有分號。總結while語句是先判斷再執行而do_while實現執行后判斷。3. for循環for循環可以說是最常用的循環其基本結構for(初始化;判斷表達式;變量調整) { 循環體; }相比while循環for循環更加簡練且更具有易讀性。但是(初始化;判斷表達式;變量調整)中的三個部分均可以選擇性地省略但判斷表達式和變量調整一定要在循環體中體現例如下面兩種寫法基本等價for(int i0;i10;i) { printf(%d,i); } //等價于 int i 0; for (;;) { printf(%d , i); i; if (i 10) break; }但是第一種寫法的整型變量i是臨時變量生命周期和作用域均在其所在的for循環語句中循環結束后便自行銷毀。4. 三者對比循環類型語法格式執行順序適用場景典型示例優點缺點whilewhile(表達式) { 循環體; }先判斷表達式真則執行循環體假則跳出循環。循環次數不確定需要先判斷再執行的情況。while(a 6) { printf(%d , a); a; }結構簡單邏輯清晰適合條件控制的循環。若循環體內忘記修改變量容易造成死循環。do-whiledo { 循環體; } while(表達式);先執行一次循環體再判斷表達式真則繼續循環假則退出。至少需要執行一次循環體的情況如菜單打印、游戲主循環。do { menu(); scanf(%d, input); } while(input);保證循環體至少執行一次適合先執行后判斷的場景。循環體至少執行一次若條件一開始就不滿足也會多執行一次。forfor(初始化; 判斷表達式; 變量調整) { 循環體; }先執行初始化再判斷表達式真則執行循環體然后執行變量調整再判斷表達式如此循環。循環次數明確或已知范圍的情況如遍歷數組、累加求和。for(int i 0; i 10; i) { printf(%d, i); }語法簡練初始化、判斷、調整集中在一行可讀性強。三個部分均可省略但若省略不當容易造成死循環或邏輯混亂。二. 嵌套使用舉一個最典型的例子二維數組的遍歷int main() { int arr[3][5] { 1,2,3,4,5,2,3,4,5,6,3,4,5,6,7 }; for (int i 0;i 3;i) { for (int j 0;j 5;j) { printf(%d , arr[i][j]); } printf(\n); } return 0; }先進入一層循環然后再進入二層循環這實現了二維數組的遍歷及打印。其他嵌套同理不再贅述。三. break和continue1. breakbreak用于立即終止當前所在的循環跳出循環體繼續執行循環之后的代碼。下面分別針對三種循環給出示例。1while循環中的breakint a 1; while (a 10) { if (a 5) break; printf(%d , a); a; }執行效果當a遞增到5時break語句立即終止while循環不再執行后續的a和printf因此只打印1 2 3 4。適用場景循環次數不確定但需要在滿足某個特定條件時提前結束循環例如在查找數據時找到目標就立即退出。2do-while循環中的breakint input 0; do { scanf(%d, input); if (input 0) break; printf(你輸入的是%d\n, input); } while (1);執行效果do-while先執行一次循環體當用戶輸入0時break立即終止循環即使while(1)條件恒為真也不會繼續執行。適用場景菜單選擇、游戲主循環等需要先執行一次再判斷的場景配合break實現退出功能。3for循環中的breakfor (int i 0; i 10; i) { if (i 5) break; printf(%d , i); }執行效果當i遞增到5時break立即終止for循環不再執行后續的i和printf因此只打印0 1 2 3 4。適用場景循環次數明確但需要在滿足某個條件時提前結束例如遍歷數組時找到目標元素就停止。2. continuecontinue用于跳過本次循環中continue之后剩余的語句直接進入下一次循環的判斷。下面分別針對三種循環給出示例。1while循環中的continueint a 0; while (a 6) { a; if (a 3) continue; printf(%d , a); }執行效果當a等于3時continue跳過printf語句直接進入下一次循環判斷因此不打印3其余數字正常打印。適用場景需要跳過某些特定值不處理但循環本身繼續執行的情況。2do-while循環中的continueint a 0; do { a; if (a 3) continue; printf(%d , a); } while (a 6);執行效果當a等于3時continue跳過printf語句直接進入while(a 6)的判斷因此不打印3其余數字正常打印。適用場景至少執行一次循環體同時需要跳過某些特定值不處理的情況。3for循環中的continuefor (int i 0; i 6; i) { if (i 3) continue; printf(%d , i); }執行效果當i等于3時continue跳過printf語句直接執行i進入下一次循環因此不打印3其余數字正常打印。適用場景循環次數明確需要跳過某些特定值不處理例如統計時排除無效數據。