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

深入理解 C 語言邏輯控制:七種結構與 goto 等價轉換

     編輯:關於C語言

C 語言七大邏輯控制結構

  1. goto:最強大,通常僅用於特殊場景(如多重資源分配錯誤處理)。
  2. if else
  3. ?: 三元運算子
  4. switch case
  5. for
  6. while
  7. do while

自 Dijkstra 論文《Go To Statement Considered Harmful》後,goto 很少見。但從計算機角度看,缺少 goto(jmp 指令)無法工作。goto 最符合流程圖設計,能心之所動、劍之所至。

各結構轉換為 goto 等價形式

if-else

t = 條件1;
if (t) goto true;
程式碼塊2;
goto finish;
true:
程式碼塊1;
finish:

三元運算子 ?:

t = 條件1;
if (t) goto true;
變數 = 表達式2;
goto finish;
true:
變數 = 表達式1;
finish:

建議:?: 內表達式宜簡單,複雜時改用 if 便於除錯。

switch-case

跳轉表 = {標籤1, 標籤2, ..., 標籤N};
goto 跳轉表[元素index];
標籤1: 程式碼塊1; goto Finish;
標籤2: 程式碼塊2; goto Finish;
...
標籤N: 程式碼塊N; goto Finish;
default: 預設處理;
Finish:

for 迴圈

初始化語句;
if (判斷語句為假) goto Finish;
loop:
迴圈程式碼塊;
迭代語句;
if (判斷語句為真) goto loop;
Finish:

while 迴圈

loop:
t = 條件;
if (!t) goto Finish;
程式碼塊;
迭代塊;
Finish:

do-while 迴圈

loop:
程式碼塊1;
迭代塊1;
if (條件為真) goto loop;

C 語言 goto 與組合語言 jmp 邏輯完全一致。

注意事項

  • 德摩根定律:!(A && B) = (!A) || (!B)。複雜邏輯建議手寫真值表並保證單元測試全覆蓋。
  • 邏輯運算(&&、||、!)與位元運算(&、|、~、^)須嚴格區分。
  • 強烈建議寫代碼前在紙上畫完整流程圖,梳理設計思路。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved