有5个学生,每个学生有3门课程的成绩,从键盘输入学生数据(包括学号,姓名,3门课成绩),计算出每个学生的平均成绩,将原有数据和计算出的平均分数存放在磁盘文件stud中。然后按照平均成绩的大小进行排序处理,将排序好的学生数据存放到一个新文件中。用C语言怎么做
时间: 2024-01-04 14:03:35 浏览: 22
这是一个典型的文件读写和排序问题,可以采用以下步骤:
1. 定义一个结构体表示学生信息,包括学号、姓名、三门课成绩和平均成绩。
2. 从键盘输入每个学生的数据,计算平均成绩,并将所有学生数据存放在一个数组中。
3. 将数组中的学生信息按照平均成绩排序,可以采用快速排序等算法。
4. 将排序后的学生数据逐个写入磁盘文件stud中。
下面是一个C语言实现的示例代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 5
typedef struct student {
int id;
char name[20];
int grades[3];
float avg_grade;
} student;
int compare_students(const void *s1, const void *s2) {
student *stu1 = (student *)s1;
student *stu2 = (student *)s2;
if (stu1->avg_grade < stu2->avg_grade) return 1;
if (stu1->avg_grade > stu2->avg_grade) return -1;
return 0;
}
int main() {
student students[MAX_STUDENTS];
char filename[] = "stud";
FILE *file;
int i, j;
float sum;
// 从键盘输入学生数据
for (i = 0; i < MAX_STUDENTS; i++) {
printf("Enter student %d's id, name, and three grades: ", i + 1);
scanf("%d %s %d %d %d", &students[i].id, students[i].name,
&students[i].grades[0], &students[i].grades[1], &students[i].grades[2]);
sum = 0;
for (j = 0; j < 3; j++) {
sum += students[i].grades[j];
}
students[i].avg_grade = sum / 3.0;
}
// 按照平均成绩排序
qsort(students, MAX_STUDENTS, sizeof(student), compare_students);
// 将学生数据写入磁盘文件stud中
file = fopen(filename, "w");
if (!file) {
printf("Failed to open file %s\n", filename);
return -1;
}
for (i = 0; i < MAX_STUDENTS; i++) {
fprintf(file, "%d %s %d %d %d %f\n", students[i].id, students[i].name,
students[i].grades[0], students[i].grades[1], students[i].grades[2], students[i].avg_grade);
}
fclose(file);
return 0;
}
```
这段代码实现了从键盘输入学生数据,计算平均成绩,按照平均成绩排序并将排序后的学生数据写入磁盘文件stud中。如果您想要更深入地了解C语言的文件读写和排序,可以参考相关文档或书籍。