C 语言 简答题 上机操作题: 请编程:使用附件提供的student.h中的学生基本信息表类型Student建立Student数组a,从附件提供的data1.txt文本文件中读入下表中6个学生的7列信息项到Student数组a中,计算这些学生的成绩之和保存到数组a的总分中,将数组a按总分从大到小排序,创建名为data2.txt的文本文件,将排序后的数组a的6个学生的8列信息项以空格分隔、一行一个学生写入该文件中。执行程序后,找到data2.txt文件用记事本打开查看结
时间: 2024-03-17 08:40:20 浏览: 118
以下是程序实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include "student.h"
#define NUM_STUDENTS 6
int main() {
Student a[NUM_STUDENTS];
float sum = 0;
// 从文件中读入数据并计算总分
FILE *fp = fopen("data1.txt", "r");
for (int i = 0; i < NUM_STUDENTS; i++) {
fscanf(fp, "%s %d %d %d %d %d %d", a[i].name, &a[i].id, &a[i].score[0], &a[i].score[1], &a[i].score[2], &a[i].score[3], &a[i].score[4]);
for (int j = 0; j < NUM_COURSES; j++) {
sum += a[i].score[j];
}
a[i].total = sum;
sum = 0;
}
fclose(fp);
// 对数组a按总分从大到小排序
for (int i = 0; i < NUM_STUDENTS - 1; i++) {
for (int j = i + 1; j < NUM_STUDENTS; j++) {
if (a[i].total < a[j].total) {
// 交换a[i]和a[j]
Student temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
// 将排序后的数组a写入文件data2.txt
fp = fopen("data2.txt", "w");
for (int i = 0; i < NUM_STUDENTS; i++) {
fprintf(fp, "%s %d %d %d %d %d %d %.2f\n", a[i].name, a[i].id, a[i].score[0], a[i].score[1], a[i].score[2], a[i].score[3], a[i].score[4], a[i].total);
}
fclose(fp);
return 0;
}
```
其中,需要使用到附件中提供的`student.h`头文件,定义了学生基本信息表类型`Student`。`data1.txt`是存储学生信息的文本文件,`data2.txt`是存储排序后的学生信息的文本文件。程序通过循环读取`data1.txt`中的数据,计算每个学生的总分,保存到数组a的总分中。然后使用双重循环对数组a按总分从大到小排序。最后将排序后的数组a写入文件`data2.txt`中。
阅读全文