考試常見題目:「給定多個 if 條件,哪個條件省略後,printf 仍會被執行?」也就是找出無論條件真假、區塊都會被執行的邏輯等價區間。最直觀的方法是畫數軸,做集合交集/聯集運算。
假設題目給:
if (x > 0) { ... }
if (x < 10) { ... }
if (x != 5) { ... }
將每個條件對應數集:
x > 0 → (0, +∞)x < 10 → (-∞, 10)x != 5 → (-∞, 5) ∪ (5, +∞)0, 5, 10。printf 必定執行。若原程式:
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 秒搞定,比死背真值表快又準。