完整的學生成績處理範例:輸入班級人數與各科成績,透過函式分別計算總分、平均、標準差(樣本標準差)、最高/最低分及對應學號。展示函式模組化、陣列參數傳遞、標準差公式實作。
total():累加所有成績回傳總和。average():總和除以人數。deviation():計算樣本標準差 sqrt(Σ(x-avg)²/(n-1))。max_min():找出最高/最低分及所有擁有該分數的學號(索引)。num 與各學生成績存入 grade[]。#include <stdio.h>
#include <math.h>
float total(float grade[], int num);
float average(float sum, int num);
float deviation(float grade[], float ave, int num);
void max_min(float grade[], int num);
int main() {
int i, num;
float sum, ave, dev, grade[100];
printf("您班上有多少人?共有:");
scanf("%d", &num);
for (i = 0; i < num; i++) {
printf("輸入第%2d位同學成績:", i);
scanf("%f", &grade[i]);
}
sum = total(grade, num);
printf("\n總成績為:%.2f\n", sum);
ave = average(sum, num);
printf("\n平均分為:%.2f\n", ave);
dev = deviation(grade, ave, num);
printf("\n標準差為:%.2f\n\n", dev);
max_min(grade, num);
return 0;
}
float total(float grade[], int num) {
float sum = 0;
for (int i = 0; i < num; i++) sum += grade[i];
return sum;
}
float average(float sum, int num) { return sum / num; }
float deviation(float grade[], float ave, int num) {
float s = 0;
for (int i = 0; i < num; i++) s += (grade[i]-ave)*(grade[i]-ave);
return sqrt(s / (num-1));
}
void max_min(float grade[], int num) {
float max = grade[0], min = grade[0];
int max_idx[100], min_idx[100], j=0, l=0;
for (int i = 0; i < num; i++) {
if (grade[i] > max) max = grade[i];
if (grade[i] < min) min = grade[i];
}
for (int i = 0; i < num; i++) {
if (grade[i] == max) max_idx[j++] = i;
if (grade[i] == min) min_idx[l++] = i;
}
printf("最高分:%.2f 學號:%d", max, max_idx[0]);
for (int i = 1; i < j; i++) printf(",%d", max_idx[i]);
printf("\n最低分:%.2f 學號:%d", min, min_idx[0]);
for (int i = 1; i < l; i++) printf(",%d", min_idx[i]);
printf("\n");
}

涵蓋陣列操作、函式設計、統計公式、極值搜尋與索引記錄,適合期中專案練習。