将已排序的学生成绩文件进行插入处理。插入一个学生的3门课程成绩,程 序先计算新插入学生的平均成绩,然后将它按成绩高低顺序插入,插入后建立一个新文件
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int id;
char name[50];
float scores[3];
float average;
} Student;
int compare(const void *a, const void *b) {
return ((Student *)b)->average - ((Student *)a)->average;
}
int main() {
Student students[6];
FILE *file = fopen("stu_sort.txt", "r");
if (file == NULL) {
printf("无法打开文件!\n");
return 1;
}
for (int i = 0; i < 5; i++) {
fscanf(file, "%d %s %f %f %f %f", &students[i].id, students[i].name, &students[i].scores[0], &students[i].scores[1], &students[i].scores[2], &students[i].average);
}
fclose(file);
printf("输入新学生的学号、姓名和3门课程成绩:\n");
scanf("%d %s %f %f %f", &students[5].id, students[5].name, &students[5].scores[0], &students[5].scores[1], &students[5].scores[2]);
students[5].average = (students[5].scores[0] + students[5].scores[1] + students[5].scores[2]) / 3.0;
qsort(students, 6, sizeof(Student), compare);
file = fopen("new_stu_sort.txt", "w");
if (file == NULL) {
printf("无法创建文件!\n");
return 1;
}
for (int i = 0; i < 6; i++) {
fprintf(file, "%d %s %.2f %.2f %.2f %.2f\n", students[i].id, students[i].name, students[i].scores[0], students[i].scores[1], students[i].scores[2], students[i].average);
}
fclose(file);
printf("插入后的数据保存到new_stu_sort.txt文件中。\n");
return 0;
}
将结果仍存入原有的stu_sort文件而不另建立新文件。
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int id;
char name[50];
float scores[3];
float average;
} Student;
int compare(const void *a, const void *b) {
return ((Student *)b)->average - ((Student *)a)->average;
}
int main() {
Student students[6];
FILE *file = fopen("stu_sort.txt", "r");
if (file == NULL) {
printf("无法打开文件!\n");
return 1;
}
for (int i = 0; i < 5; i++) {
fscanf(file, "%d %s %f %f %f %f", &students[i].id, students[i].name, &students[i].scores[0], &students[i].scores[1], &students[i].scores[2], &students[i].average);
}
fclose(file);
printf("输入新学生的学号、姓名和3门课程成绩:\n");
scanf("%d %s %f %f %f", &students[5].id, students[5].name, &students[5].scores[0], &students[5].scores[1], &students[5].scores[2]);
students[5].average = (students[5].scores[0] + students[5].scores[1] + students[5].scores[2]) / 3.0;
qsort(students, 6, sizeof(Student), compare);
file = fopen("stu_sort.txt", "w");
if (file == NULL) {
printf("无法创建文件!\n");
return 1;
}
for (int i = 0; i < 6; i++) {
fprintf(file, "%d %s %.2f %.2f %.2f %.2f\n", students[i].id, students[i].name, students[i].scores[0], students[i].scores[1], students[i].scores[2], students[i].average);
}
fclose(file);
printf("插入后的数据保存到stu_sort.txt文件中。\n");
return 0;
}