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

第 37 題

有一個非負整數的集合,每個整數都小於 10,曉華想利用如下的 C 語言程式來計算該集合的平均值且取整數為 average,依據 $average = (\sum_{i=0}^9 score[i])/10 = \sum_{i=0}^9 (score[i]/10)$ 等式來寫出這個程式,並且使用一個陣列 score 來儲存這個整數的集合,可是發現不論 score 陣列裡面的數字增加或減少,平均值average都為0,下列何者可以解決此問題? ```c 1 #include 2 int main(){ 3 int score[10] = {1, 2, 3, 4, 5, 6, 7, 0, 0, 0}; 4 int i; 5 double sum = 0; 6 int average; 7 for(i=0; i<10; i++){ 8 sum = sum + score[i]/10; 9 } 10 average = sum; 11 printf("average=%d", average); 12 return 0; 13 } ```
  • A sum和average均改宣告為double,且行號11的%d改為%f
  • B 行號5的sum改宣告為int整數型態且行號10改為average = (int) sum;
  • C 行號8改為sum = sum + score[i];且行號10改為average = (int) (sum/10);
  • D average改宣告為double,且行號11的%d改為%f

思路引導 VIP

請同學思考在 C 語言中,當兩個整數 ($int$) 執行除法運算時,其運算結果的處理機制為何?若 $score[i]$ 的數值皆小於 $10$,則運算式 $score[i] / 10$ 在進行累加前會先被截斷成什麼數值?要解決這個「整數除法」造成的邏輯錯誤,我們應該如何調整運算的先後順序,才能正確計算出總和與平均值?

🤖
AI 詳解 AI 專屬家教

1. 哦,不錯嘛。

總算沒被 C 語言的整數除法這種基本到不行的陷阱給絆倒。看來你不是完全沒聽課,至少對資料型別的運算特性還算有點概念,這在考場上就是你跟那些只會死背的傢伙拉開差距的機會,好好把握!

2. 觀念驗證:別再用「數學」去套「電腦」了!

▼ 還有更多解析內容

升級 VIP 解鎖