struct Student {
char id[20]; // 學號
char name[20]; // 姓名
float score[3]; // 三科成績
float avg; // 平均
};
Student stu[100]; // 最多 100 位學生
int count = 0; // 實際人數
void input() {
if (count >= 100) { puts("已滿"); return; }
printf("學號 姓名 成績1 成績2 成績3: ");
scanf("%s %s %f %f %f",
stu[count].id, stu[count].name,
&stu[count].score[0], &stu[count].score[1], &stu[count].score[2]);
stu[count].avg = (stu[count].score[0] + stu[count].score[1] + stu[count].score[2]) / 3;
count++;
puts("錄入成功");
}
void query() {
char id[20];
printf("輸入學號: "); scanf("%s", id);
for (int i = 0; i < count; i++) {
if (strcmp(stu[i].id, id) == 0) {
printf("學號:%s 姓名:%s 成績:%.1f %.1f %.1f 平均:%.1f\n",
stu[i].id, stu[i].name,
stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].avg);
return;
}
}
puts("查無此人");
}
void stat() {
if (count == 0) { puts("無資料"); return; }
float sum[3] = {0}, max[3] = {0}, min[3] = {100,100,100};
for (int i = 0; i < count; i++) {
for (int j = 0; j < 3; j++) {
sum[j] += stu[i].score[j];
if (stu[i].score[j] > max[j]) max[j] = stu[i].score[j];
if (stu[i].score[j] < min[j]) min[j] = stu[i].score[j];
}
}
printf("課程 平均 最高 最低\n");
for (int j = 0; j < 3; j++) {
printf("%d %.1f %.1f %.1f\n", j+1, sum[j]/count, max[j], min[j]);
}
}
int main() {
int op;
while (1) {
puts("\n1.錄入 2.查詢 3.統計 4.退出");
printf("選擇: "); scanf("%d", &op);
if (op == 1) input();
else if (op == 2) query();
else if (op == 3) stat();
else if (op == 4) break;
else puts("輸入錯誤");
}
return 0;
}
#include <stdio.h>
#include <string.h>
struct Student { char id[20], name[20]; float score[3], avg; } stu[100];
int count = 0;
void input() { /* 同上 */ }
void query() { /* 同上 */ }
void stat() { /* 同上 */ }
int main() { /* 同上 */ }
gcc grade.c -o grade
./grade
fwrite/fread)實現資料持久化malloc/realloc)移除 100 人上限qsort 實現按平均分排序顯示vector<Student> 簡化記憶體管理此極簡版本僅 98 行有效碼,涵蓋所有核心需求,適合作為教學範例或快速原型基礎。