統測
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. 觀念驗證:別再用「數學」去套「電腦」了!
▼ 還有更多解析內容