C语言 文件“stu_info1.txt”包含学生的基本信息(姓名、学号、籍贯三项),现在需要从该文件中读出信息,并依次为每位学生输入三门课程成绩,计算平均成绩,再将学生完整信息(姓名、学号、籍贯、课程 1、课程 2、课程 3、平均分)写入文件 “stu_info2.txt”并保存于磁盘上。 将文件 stu_info2.txt 中学生信息读出,按照平均分排序处理,再重新写入文件 “stu_sort.txt”并保存于磁盘上。
时间: 2023-12-06 16:42:35 浏览: 211
以下是使用C语言实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LEN 20
#define MAX_NUM_LEN 10
#define MAX_ADDR_LEN 30
#define MAX_LINE_LEN 100
// 学生结构体
typedef struct {
char name[MAX_NAME_LEN]; // 姓名
char number[MAX_NUM_LEN]; // 学号
char address[MAX_ADDR_LEN];// 籍贯
float score1; // 成绩1
float score2; // 成绩2
float score3; // 成绩3
float average; // 平均分
} Student;
// 读取学生信息并计算平均分
void readStudentInfo(FILE *fp, Student *stu) {
fscanf(fp, "%s %s %s", stu->name, stu->number, stu->address);
printf("请输入%s的三门课程成绩:\n", stu->name);
scanf("%f %f %f", &stu->score1, &stu->score2, &stu->score3);
stu->average = (stu->score1 + stu->score2 + stu->score3) / 3.0;
}
// 将学生信息写入文件
void writeStudentInfo(FILE *fp, Student *stu) {
fprintf(fp, "%s %s %s %.2f %.2f %.2f %.2f\n", stu->name, stu->number, stu->address, stu->score1, stu->score2, stu->score3, stu->average);
}
// 比较两个学生的平均分
int cmpStudentByAverage(const void *a, const void *b) {
return ((Student *)b)->average - ((Student *)a)->average;
}
int main() {
FILE *fp1, *fp2, *fp3;
Student stu[100];
int i, n;
// 读取学生信息
fp1 = fopen("stu_info1.txt", "r");
if (fp1 == NULL) {
printf("打开文件stu_info1.txt失败\n");
return -1;
}
n = 0;
while (!feof(fp1)) {
readStudentInfo(fp1, &stu[n]);
n++;
}
fclose(fp1);
// 将学生信息写入文件stu_info2.txt
fp2 = fopen("stu_info2.txt", "w");
if (fp2 == NULL) {
printf("打开文件stu_info2.txt失败\n");
return -1;
}
for (i = 0; i < n; i++) {
writeStudentInfo(fp2, &stu[i]);
}
fclose(fp2);
// 按照平均分排序
qsort(stu, n, sizeof(Student), cmpStudentByAverage);
// 将排序后的学生信息写入文件stu_sort.txt
fp3 = fopen("stu_sort.txt", "w");
if (fp3 == NULL) {
printf("打开文件stu_sort.txt失败\n");
return -1;
}
for (i = 0; i < n; i++) {
writeStudentInfo(fp3, &stu[i]);
}
fclose(fp3);
return 0;
}
```
在运行程序之前,请确保已经创建了 `stu_info1.txt` 文件并写入了学生信息。程序会自动创建 `stu_info2.txt` 和 `stu_sort.txt` 文件,并将处理后的学生信息写入到这两个文件中。
阅读全文