免費開始練習
統測 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$:

▼ 還有更多解析內容

升級 VIP 解鎖