免費開始練習
統測 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. 觀念驗證:別再用「數學」去套「電腦」了!

▼ 還有更多解析內容

🏷️ 相關主題

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