C语言学生成绩排序:按学号和平均分排序
#include <stdio.h> #include <stdlib.h> #include <string.h>
// 学生信息结构体 typedef struct { char id[20]; // 学号 char name[20]; // 姓名 float score[4]; // 四门功课成绩 float avg; // 平均成绩 } Student;
// 按学号升序排序 void sortByID(Student *stu, int n) { int i, j; Student temp; for (i = 0; i < n - 1; i++) { for (j = 0; j < n - 1 - i; j++) { if (strcmp(stu[j].id, stu[j + 1].id) > 0) { temp = stu[j]; stu[j] = stu[j + 1]; stu[j + 1] = temp; } } } }
// 计算每个学生的平均成绩 void calcAvg(Student *stu, int n) { int i, j; for (i = 0; i < n; i++) { float sum = 0; for (j = 0; j < 4; j++) { sum += stu[i].score[j]; } stu[i].avg = sum / 4; } }
// 按平均成绩降序排序 void sortByAvg(Student *stu, int n) { int i, j; Student temp; for (i = 0; i < n - 1; i++) { for (j = 0; j < n - 1 - i; j++) { if (stu[j].avg < stu[j + 1].avg) { temp = stu[j]; stu[j] = stu[j + 1]; stu[j + 1] = temp; } } } }
int main() { int n, i, j; printf("请输入学生人数:"); scanf("%d", &n); Student *stu = (Student *)malloc(n * sizeof(Student)); // 动态分配内存 printf("请输入学生信息,格式为:学号 姓名 成绩1 成绩2 成绩3 成绩4\n"); for (i = 0; i < n; i++) { scanf("%s%s%f%f%f%f", stu[i].id, stu[i].name, &stu[i].score[0], &stu[i].score[1], &stu[i].score[2], &stu[i].score[3]); } sortByID(stu, n); // 按学号排序 calcAvg(stu, n); // 计算平均成绩 sortByAvg(stu, n); // 按平均成绩排序 printf("按学号排序后的学生信息:\n"); printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t成绩4\t平均成绩\n"); for (i = 0; i < n; i++) { printf("%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n", stu[i].id, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].score[3], stu[i].avg); } printf("按平均成绩排序后的学生信息:\n"); printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t成绩4\t平均成绩\n"); for (i = 0; i < n; i++) { printf("%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n", stu[i].id, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].score[3], stu[i].avg); } free(stu); // 释放内存 return 0; }
原文地址: https://www.cveoy.top/t/topic/oSfh 著作权归作者所有。请勿转载和采集!