某班开设有英语、数学、程序设计三门课程,该班同学信息保存在文本文件student.txt中,用C语言编写程序从文件读入该班同学信息,分别按总成绩和英语成绩排序。该班同学不多于50人。 输入描述 文本文件student.txt,每行数据描述一个同学信息,包括名字、英语、数学、程序设计成绩 输出描述 该班同学总成绩排序和英语成绩排序,成绩相同时按输入次序。 每项占12位。
时间: 2024-02-24 16:56:15 浏览: 73
大一学生信息管理程序
以下是使用C语言编写的班级成绩排序程序:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 50
#define MAX_NAME_LENGTH 20
#define GRADE_WIDTH 12
typedef struct {
char name[MAX_NAME_LENGTH];
int english;
int math;
int programming;
int total;
} Student;
// 比较函数,用于qsort()排序
int cmp(const void *a, const void *b) {
Student *stuA = (Student *)a;
Student *stuB = (Student *)b;
if (stuA->total != stuB->total) {
return stuB->total - stuA->total;
} else {
return stuB->english - stuA->english;
}
}
int main() {
FILE *file;
Student students[MAX_STUDENTS];
int numStudents = 0;
// 打开文件
file = fopen("student.txt", "r");
if (file == NULL) {
printf("无法打开文件。\n");
return 1;
}
// 读取学生信息
char name[MAX_NAME_LENGTH];
int english, math, programming;
while (fscanf(file, "%s %d %d %d", name, &english, &math, &programming) == 4) {
if (numStudents >= MAX_STUDENTS) {
printf("学生人数超过 %d 人,无法继续读取。\n", MAX_STUDENTS);
break;
}
strcpy(students[numStudents].name, name);
students[numStudents].english = english;
students[numStudents].math = math;
students[numStudents].programming = programming;
students[numStudents].total = english + math + programming;
numStudents++;
}
// 关闭文件
fclose(file);
// 按总成绩排序
qsort(students, numStudents, sizeof(Student), cmp);
printf("按总成绩排序:\n");
for (int i = 0; i < numStudents; i++) {
printf("%-12s%*d%*d%*d%*d\n", students[i].name, GRADE_WIDTH, students[i].english, GRADE_WIDTH, students[i].math, GRADE_WIDTH, students[i].programming, GRADE_WIDTH, students[i].total);
}
// 按英语成绩排序
qsort(students, numStudents, sizeof(Student), cmp);
printf("\n按英语成绩排序:\n");
for (int i = 0; i < numStudents; i++) {
printf("%-12s%*d%*d%*d%*d\n", students[i].name, GRADE_WIDTH, students[i].english, GRADE_WIDTH, students[i].math, GRADE_WIDTH, students[i].programming, GRADE_WIDTH, students[i].total);
}
return 0;
}
```
该程序使用了结构体来保存每个学生的信息,使用fscanf()函数从文件中读取数据。程序使用qsort()函数进行排序,cmp()函数用于比较学生信息。最后,程序使用printf()函数打印排序后的信息。
阅读全文