單個結構體變量實用性有限,實際項目中常用結構體數組批量管理數據。本文通過一個「學生成績管理」完整案例,展示模塊化設計、數組輸入、平均分計算、排序、格式化輸出、單科統計全流程。
4 位學生,記錄姓名、學號、三科成績(英語、數學、物理),求:
input()aver()sort()output()subject_aver()main() 調度
struct stu {
char name[20];
long number;
float score[4]; // [0]English [1]Math [2]Physics [3]Average
};
放在文件最前,供所有函數共用。
void input(struct stu arr[], int n) {
char temp[30];
for(int i=0; i
用 gets 讀整行,atol/atof 轉換,避免 scanf 緩衝區殘留換行符問題。
void aver(struct stu arr[], int n) {
for(int i=0; i
結果存入 score[3],原數組就地修改,無需額外空間。
score[3] 降序,可用選擇/冒泡/快排,交換整個結構體元素。score[j] 除以學生數,輸出三科平均。score[4] 兼存原始分與平均分,空間高效。gets+atof 組合避免格式匹配失敗。此案例完整演示了從數據建模、模塊劃分、安全輸入、就地計算、排序輸出到統計分析的結構體數組工程化用法,是 C 語言數據處理項目的經典範式。