首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ 程序三大控制結構:順序、選擇、循環完整指南

     編輯:關於C++

前言

程序邏輯由三種基本控制結構構成:**順序、選擇、循環**。結構化程序設計理論證明,任何複雜算法均可由這三種結構組合實現。本文系統講解 C++ 中三大結構的語法細節、執行流程、常見陷阱與最佳實踐,配合流程圖思維與實戰代碼。

一、順序結構:基礎語句類型

1. 聲明語句

定義變量、常量、對象、類型、函數等標識符,往往包含創建與初始化。

int size = 0;           // 定義並初始化
const double PI = 3.14; // 常量
vector v(10);      // 對象構造

2. 表達式語句

表達式後加分號,執行計算、賦值、函數調用等副作用。


s = (a + b + c) / 2;  // 賦值表達式
func(x, y);           // 函數調用表達式
a++;                  // 後置自增表達式

3. 函數調用語句

調用標準庫或用戶定義函數,實現模塊化復用。

4. 復合語句 (塊) 與空語句

  • 復合語句:{ 語句1; 語句2; ... } 將多語句合為一個語句單元,用於控制結構體、函數體、作用域限定。
  • 空語句:單獨分號 ;,不執行任何操作。常用於循環體為空或標簽後。
    例:while (cin >> x); // 僅讀取輸入直到 EOF

二、選擇結構:if / switch

1. if 語句三種形式


// 形式 1: 單分支
if (表達式) 語句;

// 形式 2: 雙分支
if (表達式) 語句1 else 語句2;

// 形式 3: 多條件鏈
if (表達式1) 語句1
else if (表達式2) 語句2
...
else 語句n;

核心規則

  1. 多語句必加花括號:if (cond) { stmt1; stmt2; },否則僅第一條語句受控。
  2. 條件表達式類型:任意標量類型(整數、浮點、指針),非零為真,零為假。
  3. else 匹配規則:else 與**最近的未匹配 if** 配對(就近原則),用縮進和花括號消除歧義。

2. switch 語句


switch (表達式) {
    case 常量表達式1: 語句序列1; break;
    case 常量表達式2: 語句序列2; break;
    ...
    default: 語句序列n; break;
}

關鍵約束

  • 表達式類型:整型、字符型、枚舉型、類類型(有單一轉換函數)。**不允許浮點/字符串**。
  • case 標號:必須為**編譯期常量**,互不相同。
  • 貫穿特性:無 break 時順序執行下一 case(利用此特性可合並情況)。
  • default:可選,建議保留處理異常情況。

3. 選擇結構最佳實踐

  • 條件判斷將**常量/右值放左邊**:if (0 == x) 防止誤寫 =。
  • 區間判斷用 if-else if 鏈,離散值用 switch。
  • 避免過深嵌套(>3 層),提前返回/衛語句簡化邏輯。

三、循環結構:for / while / do-while

1. for 循環


for (初始化表達式; 條件表達式; 迭代表達式) {
    循環體語句;
}

執行順序:① 初始化(一次) → ② 條件判斷 → ③ 滿足執行循環體 → ④ 迭代表達式 → 回 ②。

範圍 for (C++11):for (auto& x : container) { ... } 遍歷容器/數組,自動處理始末。

2. while 循環


while (條件表達式) {
    循環體語句;
}

先判斷後執行,條件為假則零次執行。while (1) / while (true) 為無限循環,需 break 跳出。

3. do-while 循環


do {
    循環體語句;
} while (條件表達式);

先執行後判斷,**循環體至少執行一次**。適用於菜單選擇、輸入驗證等場景。

4. 循環控制語句

語句作用適用範圍
break立即跳出**最近一層**循環或 switch循環、switch
continue結束**本次**迭代,直接執行迭代表達式(for)或條件判斷(while/do-while)循環

注意:break 不能用於 if,continue 不能用於 switch(除非在循環內的 switch)。

5. 三種循環對比與選擇指南

場景推薦循環理由
已知迭代次數/遍歷容器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;
}

五、常見錯誤與避雷指南

  1. 分號陷阱:if (x > 0); { ... } → if 體為空語句,花括號內代碼無條件執行。
  2. 賦值代替比較:if (x = 5) → 永真,改為 if (5 == x) 編譯器會報錯。
  3. 循環條件永真/永假:while (x > 0) { ... } 循環體未修改 x → 死循環。
  4. switch 漏寫 break:導致非預期貫穿,建議每個 case 以 break 結尾或註釋 // fall through。
  5. 浮點數作循環條件:精度問題導致次數不準,改用整數計數器。
  6. 範圍 for 修改容器大小:for (auto& x : v) v.push_back(...) → 未定義行為(迭代器失效)。

六、總結

掌握三大控制結構的**語法細節、執行語義、適用場景、常見陷阱**,是編寫正確、高效、可維護 C++ 代碼的基石。實踐中應:

  • 優先使用範圍 for 遍歷容器。
  • 條件判斷把常量放左邊。
  • 循環變量在循環內明確更新。
  • 適時使用 break/continue 簡化邏輯,避免深層嵌套。
  • 複雜邏輯提取為函數,利用衛語句早期返回。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved