有5个学生,每个学生有名字,学号,3门课的成绩,从键盘输入学生数据,并用C语言把它们写入一个文件中。 Liu 101 90 89 88 Chen 102 80 79 78 Zhang 103 70 69 68 Wang 104 100 99 98 Wei 105 60 59 50 (ii)在另一个程序中,读取这个文件信息,并计算出每位学生的平均分,按照分数高低,排序学生,并按这个顺序存入一个新的文件中。
时间: 2024-03-15 10:41:45 浏览: 70
C语言程序设计-输入2个学生3门课的成绩,计算学生成绩平均分,课程平均分和最高分.
5星 · 资源好评率100%
好的,这是一个文件操作和数据处理的问题,我可以帮你解答。下面是一个示例代码,你可以参考一下:
1. 写入文件
```c
#include <stdio.h>
int main() {
FILE *fp;
fp = fopen("students.txt", "w");
if (fp == NULL) {
printf("Failed to open file.\n");
return 0;
}
// 写入学生数据
fprintf(fp, "Liu 101 90 89 88\n");
fprintf(fp, "Chen 102 80 79 78\n");
fprintf(fp, "Zhang 103 70 69 68\n");
fprintf(fp, "Wang 104 100 99 98\n");
fprintf(fp, "Wei 105 60 59 50\n");
// 关闭文件
fclose(fp);
return 0;
}
```
2. 读取文件并处理数据
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENT_NUM 5
typedef struct {
char name[10];
int id;
float score1, score2, score3, avg_score;
} Student;
int cmp(const void *a, const void *b) {
Student *s1 = (Student *)a;
Student *s2 = (Student *)b;
if (s1->avg_score > s2->avg_score) {
return -1;
} else if (s1->avg_score < s2->avg_score) {
return 1;
} else {
return 0;
}
}
int main() {
FILE *fp;
fp = fopen("students.txt", "r");
if (fp == NULL) {
printf("Failed to open file.\n");
return 0;
}
// 读取每个学生的数据,计算平均分,存入结构体数组
Student students[MAX_STUDENT_NUM];
for (int i = 0; i < MAX_STUDENT_NUM; i++) {
fscanf(fp, "%s %d %f %f %f", students[i].name, &students[i].id, &students[i].score1, &students[i].score2, &students[i].score3);
students[i].avg_score = (students[i].score1 + students[i].score2 + students[i].score3) / 3;
}
// 对结构体数组按照平均分排序
qsort(students, MAX_STUDENT_NUM, sizeof(Student), cmp);
// 将排序后的数据写入文件
fp = fopen("sorted_students.txt", "w");
if (fp == NULL) {
printf("Failed to open file.\n");
return 0;
}
for (int i = 0; i < MAX_STUDENT_NUM; i++) {
fprintf(fp, "%s %d %.2f %.2f %.2f %.2f\n", students[i].name, students[i].id, students[i].score1, students[i].score2, students[i].score3, students[i].avg_score);
}
// 关闭文件
fclose(fp);
return 0;
}
```
这段代码会从 'students.txt' 中读取数据,计算每个学生的平均分并存入一个结构体数组中,然后按照平均分排序,并将排序后的数据写入 'sorted_students.txt' 文件中。
注意,这里使用了 fopen 和 fclose 来打开和关闭文件,使用了 fscanf 和 fprintf 来读取和写入文件中的数据,使用了 qsort 来对结构体数组排序。
阅读全文