設計一個歌手大賽評分程序,核心邏輯:
#define MAX_SINGERS 100
#define MAX_JUDGES 10
typedef struct {
int id;
char name[32];
float scores[MAX_JUDGES];
float average;
} Singer;
float calc_average(float scores[], int n) {
if (n < 3) return 0; // 至少3位評委才能去極值
float max = scores[0], min = scores[0], sum = 0;
for (int i = 0; i < n; i++) {
sum += scores[i];
if (scores[i] > max) max = scores[i];
if (scores[i] < min) min = scores[i];
}
return (sum - max - min) / (n - 2);
}
void sort_singers(Singer arr[], int n) {
for (int i = 0; i < n-1; i++) {
for (int j = 0; j < n-i-1; j++) {
if (arr[j].average < arr[j+1].average) {
Singer tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
}
void save_results(Singer arr[], int n, const char* filename) {
FILE* fp = fopen(filename, "w");
if (!fp) return;
fprintf(fp, "Rank ID Name Average\n");
for (int i = 0; i < n; i++) {
fprintf(fp, "%-5d %-5d %-12s %.2f\n", i+1, arr[i].id, arr[i].name, arr[i].average);
}
fclose(fp);
}
input.c、process.c、output.c、file_io.c此案例綜合考察數組、結構體、排序、文件操作,是 C 語言綜合練習的優秀題目。