原代碼兩大問題
- 字符串拼接括號全角:
(i+1) 應為 (i+1)。
- 整數除法截斷:
avg = sum / 5; 兩邊皆 int,結果截斷小數再賦給 double。
修正版
int score = 0;
int sum = 0;
double avg = 0.0;
Console.WriteLine("請輸入學生姓名:");
string name = Console.ReadLine();
for (int i = 0; i < 5; i++) {
Console.Write("請輸入五門課中第" + (i+1) + "門課的成績:");
score = int.Parse(Console.ReadLine());
sum += score;
}
avg = sum * 1.0 / 5; // 強制浮點運算
// 或 avg = (double)sum / 5;
Console.WriteLine(name + "的平均分是:" + avg);
知識點延伸
| 寫法 | 結果類型 | 說明 |
sum / 5int | 整數除法,向零截斷 |
sum / 5.0double | 字面量帶小數點觸發浮點運算 |
(double)sum / 5double | 顯式轉型,語意最清晰 |
sum * 1.0 / 5double | 乘 1.0 隱式提升,常見技巧 |
防禦性編程建議
- 用
int.TryParse 替代 int.Parse,避免非數字輸入拋出異常。
- 輸入迴圈加入範圍校驗
if(score < 0 || score > 100) { i--; continue; }。
- 格式化輸出
Console.WriteLine($"{name}的平均分是:{avg:F2}"); 保留兩位小數。