本文最后更新于40 天前,其中的信息可能已经过时,如有错误请发送邮件到2428505532@qq.com
应用了qsort比较函数
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 10000
struct Student {
char name[20];
int score;
};
// 比较函数:按成绩降序
int compare(const void* a, const void* b)
{
const struct Student* s1 = (const struct Student*)a;
const struct Student* s2 = (const struct Student*)b;
// 分数高的排在前面
if (s1->score < s2->score)
return 1;
else if (s1->score > s2->score)
return -1;
else
return 0;
// 其实更简单的写法是:return s2->score - s1->score;
}
int main()
{
struct Student stu[MAX];
int n;
printf("输入该科目的学生数量:\n"); // 修正:/n 改为 \n
scanf("%d", &n);
// 防止输入人数为 0 或负数
if (n <= 0 || n > MAX) {
printf("人数输入错误!\n");
return 1;
}
for (int i = 0; i < n; i++) {
printf("输入第%d位学生的姓名与成绩:", i + 1); // 修正:&i + 1 改为 i + 1
scanf("%s %d", stu[i].name, &stu[i].score);
}
// ===== 统计 =====
int sum = 0;
int max_score = stu[0].score;
int min_score = stu[0].score;
for (int i = 0; i < n; i++) {
sum += stu[i].score;
if (stu[i].score > max_score)
max_score = stu[i].score;
if (stu[i].score < min_score)
min_score = stu[i].score;
}
double avg = (double)sum / n;
// ===== 排序(=====
qsort(stu, n, sizeof(struct Student), compare);
// ===== 输出 =====
printf("\n==== 成绩统计 ====\n");
printf("最高分:%d\n", max_score);
printf("最低分:%d\n", min_score);
printf("平均分:%.2f\n\n", avg);
printf("排名\t姓名\t分数\n");
for (int i = 0; i < n; i++) {
printf("%d\t%s\t%d\n", i + 1, stu[i].name, stu[i].score);
}
return 0;
}