首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C 語言 if 條件判斷簡化:用數軸法快速找出「必定執行」的區間

     編輯:程式設計疑難解答

考試常見題目:「給定多個 if 條件,哪個條件省略後,printf 仍會被執行?」也就是找出無論條件真假、區塊都會被執行的邏輯等價區間。最直觀的方法是畫數軸,做集合交集/聯集運算。

核心思路:條件轉集合,畫數軸找重疊

假設題目給:

if (x > 0) { ... }
if (x < 10) { ... }
if (x != 5) { ... }

將每個條件對應數集:

  • x > 0 → (0, +∞)
  • x < 10 → (-∞, 10)
  • x != 5 → (-∞, 5) ∪ (5, +∞)

畫數軸步驟

  1. 畫一條水平線標註關鍵點:0, 5, 10。
  2. 依序標記各條件為真的區間(實線或顏色)。
  3. 找出所有條件同時為真的交集區間 → 這裡的 printf 必定執行。
  4. 若某條件移除後,交集不變 → 該條件可省略。

實例:移除哪個條件不影響輸出?

若原程式:

if (x > 0)
    if (x < 10)
        if (x != 5)
            printf("OK");

數軸交集為 (0,5) ∪ (5,10)。
若移除 x != 5,交集變 (0,10),多出 x=5 會輸出 → 不可移除。
若移除 x > 0,交集變 (-∞,5) ∪ (5,10),負數也會輸出 → 不可移除。
若移除 x < 10,交集變 (0,5) ∪ (5,+∞),大於 10 也會輸出 → 不可移除。
結論:三個條件皆不可省略。

進階:邏輯簡化技巧

  • 多條件 && 串聯時,畫數軸找交集。
  • || 並列時,畫數軸找聯集。
  • 巢狀 if 等價於 &&,同樣用交集。
  • 用德摩根定律把 !(A && B) 轉 !A || !B 再畫圖。

下次遇到「哪個條件可刪除不影響輸出」的題目,拿筆在草稿紙畫條數軸、標區間、找交集,30 秒搞定,比死背真值表快又準。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved