輸入 3 名學生 3 門課程成績,計算每位學生總分與平均分。核心考點:二維數組行主序、嵌套循環累加、固定規模硬編碼。
#include <stdio.h>
int main() {
int i, j;
float stu[3][3]; // [學生][課程]
float sum[3] = {0};
float avg[3] = {0};
printf("請輸入每個學生的英語 高數 C語言 成績\n");
for (i = 0; i < 3; i++) {
printf("第 %d 個同學: ", i+1);
for (j = 0; j < 3; j++) scanf("%f", &stu[i][j]);
}
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
sum[i] += stu[i][j];
for (i = 0; i < 3; i++) avg[i] = sum[i] / 3;
for (i = 0; i < 3; i++)
printf("第 %d 學生 總分: %.2f 平均: %.2f\n", i+1, sum[i], avg[i]);
return 0;
}
#define STUDENTS 3
#define COURSES 3
float stu[STUDENTS][COURSES];
float sum[STUDENTS] = {0};
float avg[STUDENTS] = {0};
for (i = 0; i < STUDENTS; i++) {
sum[i] = 0;
for (j = 0; j < COURSES; j++) sum[i] += stu[i][j];
avg[i] = sum[i] / COURSES; // 用宏而非硬編碼 3
}
const char *course_names[] = {"英語", "高數", "C語言"};
for (i = 0; i < STUDENTS; i++) {
printf("學生 %d:\n", i+1);
for (j = 0; j < COURSES; j++) {
printf(" %s: ", course_names[j]);
scanf("%f", &stu[i][j]);
}
}
printf("%-10s %8s %8s\n", "學生", "總分", "平均分");
for (i = 0; i < STUDENTS; i++)
printf("%-10d %8.2f %8.2f\n", i+1, sum[i], avg[i]);
float **allocate_scores(int students, int courses) {
float **arr = malloc(students * sizeof(float*));
for (int i = 0; i < students; i++)
arr[i] = calloc(courses, sizeof(float));
return arr;
}
void free_scores(float **arr, int students) {
for (int i = 0; i < students; i++) free(arr[i]);
free(arr);
}
固定 3×3 成績統計是二維數組、嵌套循環、累加器模式的基礎練習。關鍵收穫:
stu[學生][課程] 行主序存儲,內存連續;