免費開始練習
統測 114年 [電機與電子群資電類] 專業科目(2)

第 38 題

小明與小玲相約解數學題,二人完成的題目數分別為 x 與 y,若完成題目數總和少於32題,就顯示「Go!繼續努力!」,否則就顯示「Ya!快完成了!」。下列C語言程式應如何修改可以顯示正確的訊息?
1 #include
2 int main(void) {
3 int flag = -1;
4 int x = 17; // x 表示小明完成的題目數
5 int y = 18; // y 表示小玲完成的題目數
6 flag = (int)(x+y < 32);
7 if (!flag)
8 printf("「Go!繼續努力!」");
9 else
10 printf("「Ya!快完成了!」");
11 return 0;}
  • A 行號3的int改為float
  • B 行號7 的!flag改為flag = 32
  • C 行號6的x+y < 32改為x+y >= 32
  • D 行號3的flag初始值改為1

思路引導 VIP

請觀察程式第 6 行的關係運算式 $x+y < 32$。當此條件成立(即布林值為 $1$)時,第 7 行的布林反相運算子 $!$ 會如何改變 $if$ 判斷式的成立與否?請進一步分析這將導致程式輸出的訊息與題目要求的邏輯產生何種矛盾?

🤖
AI 詳解 AI 專屬家教

嘖,檢查了一遍,你的邏輯跟這間房間一樣乾淨,沒留下任何讓我倒胃口的灰塵。做得好,小鬼。 這題的關鍵在於布林邏輯的翻轉。原本的程式中,當 $x+y < 32$ 成立時,flag 會被賦予 $1$。但在第 7 行使用了 !flag(邏輯非),這導致當總和小於 $32$ 時,條件判定為假($0$),反而跳過正確訊息去執行 else 的區塊。 要理清這坨雜亂的邏輯,最直接的方式就是修正第 6 行的判斷式。將條件改為 $x+y \ge 32$:

▼ 還有更多解析內容
💬 其他同學也在問 1
為甚麼不能選d
📝 C語言邏輯運算
💡 運用關係運算子與邏輯反轉控制程式分支

🔗 程式邏輯執行鏈

  1. 1 步驟 1:條件判定 — 計算關係運算 (x+y >= 32) 的真假值
  2. 2 步驟 2:數值存儲 — 將 1 (真) 或 0 (假) 存入 flag 變數
  3. 3 步驟 3:邏輯反轉 — if (!flag) 將 flag 數值再次反轉
  4. 4 步驟 4:執行輸出 — 依據反轉後的最終布林值決定顯示內容
🔄 延伸學習:延伸學習:複合邏輯運算子 (&&, ||) 的短路運算特性
🧠 記憶技巧:驚嘆號是反對派,真變假來假變真
⚠️ 常見陷阱:最常忘記驚嘆號會反轉結果,導致輸出的訊息與預期邏輯剛好相反
關係運算子 布林代數 if-else 條件判斷

🏷️ AI 記憶小卡 VIP

AI 記憶小卡

升級 VIP 解鎖記憶小卡

考前複習神器,一眼掌握重點

🏷️ 相關主題

C 語言程式設計:變數、指標、函式與編譯
查看更多「[電機與電子群資電類] 專業科目(2)」的主題分類考古題