在 C 語言程式設計中,結構體是處理複雜資料結構的核心工具。本文透過一個完整的學生成績管理範例,示範如何使用結構體陣列來儲存、計算並輸出多位學生的學號、姓名、三科成績(C++、高等數學、英語)、總分與平均分。
首先定義 stu 結構體,包含學號(字元陣列)、姓名、三科浮點數成績,以及總分與平均分欄位:
struct stu {
char num[12];
char name[15];
float cpp;
float english;
float math;
float score;
float average;
};
main 函數宣告結構體陣列 student[5],透過迴圈從鍵盤讀取 5 位學生的資料,接著呼叫 calculate 函數進行統計計算。
calculate 函數逐筆累加三科成績得出總分,再除以 3 取得平均分,最後格式化輸出每位學生的學號、姓名、總分與平均分。此設計展示了「輸入→計算→輸出」的經典三段式流程,並示範結構體陣列作為函數參數傳遞的語法。
#include <stdio.h>
struct stu {
char num[12];
char name[15];
float cpp;
float english;
float math;
float score;
float average;
};
void calculate(struct stu scholastic[]);
int main() {
int i;
struct stu student[5];
printf("請輸入五位同學資訊 (學號 姓名 英語 高數 C++):\n");
for (i = 0; i < 5; i++) {
scanf("%s %s %f %f %f", student[i].num, student[i].name,
&student[i].english, &student[i].math, &student[i].cpp);
}
calculate(student);
return 0;
}
void calculate(struct stu scholastic[]) {
int i;
for (i = 0; i < 5; i++) {
scholastic[i].score = scholastic[i].math +
scholastic[i].english +
scholastic[i].cpp;
scholastic[i].average = scholastic[i].score / 3.0;
}
printf("\n學生成績統計結果:\n");
for (i = 0; i < 5; i++) {
printf("第%d位:學號:%s 姓名:%s 總分:%.2f 平均:%.2f\n",
i+1, scholastic[i].num, scholastic[i].name,
scholastic[i].score, scholastic[i].average);
}
}
此範例適合初學者理解結構體陣列的宣告、初始化、函數傳遞與欄位存取,是 C 語言資料結構教學的經典入門案例。