程序邏輯由三種基本控制結構構成:**順序、選擇、循環**。結構化程序設計理論證明,任何複雜算法均可由這三種結構組合實現。本文系統講解 C++ 中三大結構的語法細節、執行流程、常見陷阱與最佳實踐,配合流程圖思維與實戰代碼。
定義變量、常量、對象、類型、函數等標識符,往往包含創建與初始化。
int size = 0; // 定義並初始化
const double PI = 3.14; // 常量
vector v(10); // 對象構造
表達式後加分號,執行計算、賦值、函數調用等副作用。
s = (a + b + c) / 2; // 賦值表達式
func(x, y); // 函數調用表達式
a++; // 後置自增表達式
調用標準庫或用戶定義函數,實現模塊化復用。
{ 語句1; 語句2; ... } 將多語句合為一個語句單元,用於控制結構體、函數體、作用域限定。;,不執行任何操作。常用於循環體為空或標簽後。while (cin >> x); // 僅讀取輸入直到 EOFif / switchif 語句三種形式
// 形式 1: 單分支
if (表達式) 語句;
// 形式 2: 雙分支
if (表達式) 語句1 else 語句2;
// 形式 3: 多條件鏈
if (表達式1) 語句1
else if (表達式2) 語句2
...
else 語句n;
if (cond) { stmt1; stmt2; },否則僅第一條語句受控。else 與**最近的未匹配 if** 配對(就近原則),用縮進和花括號消除歧義。switch 語句
switch (表達式) {
case 常量表達式1: 語句序列1; break;
case 常量表達式2: 語句序列2; break;
...
default: 語句序列n; break;
}
break 時順序執行下一 case(利用此特性可合並情況)。if (0 == x) 防止誤寫 =。if-else if 鏈,離散值用 switch。for / while / do-whilefor 循環
for (初始化表達式; 條件表達式; 迭代表達式) {
循環體語句;
}
執行順序:① 初始化(一次) → ② 條件判斷 → ③ 滿足執行循環體 → ④ 迭代表達式 → 回 ②。
範圍 for (C++11):for (auto& x : container) { ... } 遍歷容器/數組,自動處理始末。
while 循環
while (條件表達式) {
循環體語句;
}
先判斷後執行,條件為假則零次執行。while (1) / while (true) 為無限循環,需 break 跳出。
do-while 循環
do {
循環體語句;
} while (條件表達式);
先執行後判斷,**循環體至少執行一次**。適用於菜單選擇、輸入驗證等場景。
| 語句 | 作用 | 適用範圍 |
|---|---|---|
break | 立即跳出**最近一層**循環或 switch | 循環、switch |
continue | 結束**本次**迭代,直接執行迭代表達式(for)或條件判斷(while/do-while) | 循環 |
注意:break 不能用於 if,continue 不能用於 switch(除非在循環內的 switch)。
| 場景 | 推薦循環 | 理由 |
|---|---|---|
| 已知迭代次數/遍歷容器 | for / 範圍 for | 初始化/條件/迭代集中,語義清晰 |
| 次數未知,依賴條件變化 | while | 突出條件檢查,零次執行語義自然 |
| 至少執行一次 (菜單/輸入驗證) | do-while | 語義精確匹配 |
#include
#include
using namespace std;
int main() {
long m;
cout << "Please input a number: ";
cin >> m;
bool isPrime = true;
if (m < 2) isPrime = false;
else {
for (long i = 2; i * i <= m; ++i) { // 優化:只需判斷到 sqrt(m)
if (m % i == 0) {
isPrime = false;
break; // 找到因子,提前退出
}
}
}
cout << m << (isPrime ? " is prime." : " isn't prime.") << endl;
return 0;
}
if (x > 0); { ... } → if 體為空語句,花括號內代碼無條件執行。if (x = 5) → 永真,改為 if (5 == x) 編譯器會報錯。while (x > 0) { ... } 循環體未修改 x → 死循環。switch 漏寫 break:導致非預期貫穿,建議每個 case 以 break 結尾或註釋 // fall through。for (auto& x : v) v.push_back(...) → 未定義行為(迭代器失效)。掌握三大控制結構的**語法細節、執行語義、適用場景、常見陷阱**,是編寫正確、高效、可維護 C++ 代碼的基石。實踐中應:
break/continue 簡化邏輯,避免深層嵌套。