写c代码:4.将文件 stu_info2.txt 中学生信息读出,按照平均分排序处理,再重新写入文件 “stu_sort.txt”并保存于磁盘上。
时间: 2023-12-06 14:40:22 浏览: 63
抱歉,由于涉及到文件读写操作,无法在此进行编写和测试。以下是大致的思路:
1. 打开 stu_info2.txt 文件,读取学生信息,存储到一个数组或链表中。
2. 遍历数组或链表,计算每个学生的平均分,并存储到结构体中。
3. 使用快速排序等算法,按照平均分从高到低排序。
4. 创建 stu_sort.txt 文件,将排好序的学生信息重新写入文件中。
5. 关闭文件,保存到磁盘上。
以下是可能的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 100
struct student {
char name[20];
int scores[3];
double average;
};
int compare(const void *a, const void *b) {
const struct student *p = a;
const struct student *q = b;
if (p->average > q->average) {
return -1;
} else if (p->average < q->average) {
return 1;
} else {
return 0;
}
}
int main() {
FILE *fp_in, *fp_out;
struct student students[MAX_STUDENTS];
int n = 0, i;
// 打开 stu_info2.txt 文件,读取学生信息
fp_in = fopen("stu_info2.txt", "r");
if (!fp_in) {
perror("Failed to open file stu_info2.txt");
return 1;
}
while (fscanf(fp_in, "%s %d %d %d", students[n].name,
&students[n].scores[0], &students[n].scores[1], &students[n].scores[2]) == 4) {
n++;
if (n == MAX_STUDENTS) {
break;
}
}
fclose(fp_in);
// 计算每个学生的平均分
for (i = 0; i < n; i++) {
students[i].average = (students[i].scores[0] + students[i].scores[1] + students[i].scores[2]) / 3.0;
}
// 按照平均分从高到低排序
qsort(students, n, sizeof(struct student), compare);
// 创建 stu_sort.txt 文件,将排好序的学生信息重新写入文件中
fp_out = fopen("stu_sort.txt", "w");
if (!fp_out) {
perror("Failed to create file stu_sort.txt");
return 1;
}
for (i = 0; i < n; i++) {
fprintf(fp_out, "%s %d %d %d %.2f\n", students[i].name,
students[i].scores[0], students[i].scores[1], students[i].scores[2], students[i].average);
}
fclose(fp_out);
printf("Done!\n");
return 0;
}
```
阅读全文