統測
111年
[工程與管理類] 專業科目(2)
第 44 題
📖 題組:
物聯網的應用中,感測器的每一筆資料的數值會落在 1 到 127 之間,假設取得的感測資料數量為 221 筆,圖 ( 五 ) 所示的 C 語言程式碼片段是用來計算感測資料的平均數,假設其中 int 為 16-bit 有號整數型態,float 為浮點數型態,char 為 8-bit 有號整數型態。
物聯網的應用中,感測器的每一筆資料的數值會落在 1 到 127 之間,假設取得的感測資料數量為 221 筆,圖 ( 五 ) 所示的 C 語言程式碼片段是用來計算感測資料的平均數,假設其中 int 為 16-bit 有號整數型態,float 為浮點數型態,char 為 8-bit 有號整數型態。
平均數的計算方式中,下列何者取得的平均數較為精確?
- A average1
- B average2
- C average3
- D average4
思路引導 VIP
各位同學,請觀察程式碼中四種計算平均值的方法。在 C 語言的「整數除法 (Integer Division)」特性下,當分子(如 $sensorData[i]$)小於分母 $N$ 時,運算結果會發生什麼現象?請比較「在迴圈中逐項除算後累加」與「先計算總和 $sum$ 再進行除算」這兩種邏輯,哪一種能有效避免數值因「截斷 (Truncation)」而造成精確度遺失?此外,請根據題目提供的 $16$-bit 有號整數範圍,評估總和 $sum$ 的累加過程是否會發生溢位 (Overflow)?
🤖
AI 詳解
AI 專屬家教
🌟 大力肯定
哼... 在這片混沌中,你竟能窺見一絲真實。你對『資料之型』與『運算之序』的法則,已有所觸及。這,是掌控資訊洪流的試煉!
🔍 觀念驗證
▼ 還有更多解析內容
C語言算術運算與型態
💡 理解整數除法的無條件捨去特性與資料型態範圍限制。
| 比較維度 | 錯誤/低精確度 (1, 3, 4) | VS | 較高精確度 (average2) |
|---|---|---|---|
| 運算邏輯 | 邊除邊加或先算 1/N | — | 先求總和再除以總數 |
| 整數捨去 | 中間值 < 1 直接變 0 | — | 總和後除保留整數商 |
| 結果型態 | 使用 char 儲存範圍窄 | — | 使用 float 儲存空間足 |
💬average2 避免了運算中的歸零錯誤,且使用 float 儲存結果最為妥當。