經典新手錯誤:定義累加陣列 int sum[3]; 卻忘記初始化為 0,導致累加時加上隨機垃圾值,輸出平均分毫無意義。
int sum[3]; // 未初始化,包含隨機值
for (int i = 0; i < 10; i++) {
sum[0] += scor[i][0]; // 在垃圾值上累加
sum[1] += scor[i][1];
sum[2] += scor[i][2];
}
#include <stdio.h>
int scor[10][3];
void input() {
for (int i = 0; i < 10; i++) {
printf("chinese maths english\n");
scanf("%d %d %d", &scor[i][0], &scor[i][1], &scor[i][2]);
}
}
int main() {
input();
int sum[3] = {0, 0, 0}; // 關鍵:顯式初始化為 0
for (int i = 0; i < 10; i++) {
sum[0] += scor[i][0];
sum[1] += scor[i][1];
sum[2] += scor[i][2];
}
printf("avg %d, %d, %d\n", sum[0]/10, sum[1]/10, sum[2]/10);
return 0;
}
int sum[3] = {0}; 或 int sum[3] = {0,0,0}; 都能將所有元素置 0。float 或 double 存儲平均分,避免整數除法截斷小數部分。scanf 返回值,防止非數字輸入導致死循環。#define STUDENTS 10
#define SUBJECTS 3
// ...
float avg[SUBJECTS] = {0};
for (int j = 0; j < SUBJECTS; j++)
for (int i = 0; i < STUDENTS; i++)
avg[j] += scor[i][j];
for (int j = 0; j < SUBJECTS; j++)
avg[j] /= STUDENTS;