请用C语言编程:使用附件提供的student.h中的学生基本信息表类型Student建立Student数组a,从附件提供的data1.txt文本文件中读入下表中6个学生的7列信息项到Student数组a中,计算这些学生的成绩之和保存到数组a的总分中,将数组a按总分从大到小排序,创建名为data2.txt的文本文件,将排序后的数组a的6个学生的8列信息项以空格分隔、一行一个学生写入该文件中。执行程序后,找到data2.txt文件用记事本打开查看结果。data1.txt中的数据为 221001 张三 男 2004-3-15 85 95 85 221002 李四 女 2005-12-10 90 80 95 221003 王五 男 2004-4-12 75 80 80 221004 刘一 男 2003-12-5 82 88 86 221005 陈二 男 2004-1-10 80 92 85 221006 赵六 女 2005-6-18 88 85 98
时间: 2024-03-17 14:40:22 浏览: 64
以下是C语言代码实现:
```c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"student.h"
#define N 6
int main()
{
Student a[N];
FILE *fp1, *fp2;
int i, j, sum;
// 从文件中读取学生信息
fp1 = fopen("data1.txt", "r");
if(fp1 == NULL)
{
printf("Can't open file!\n");
exit(0);
}
for(i = 0; i < N; i++)
{
fscanf(fp1, "%s%s%s%s%d%d%d", a[i].num, a[i].name, a[i].sex, a[i].birthday, &a[i].score[0], &a[i].score[1], &a[i].score[2]);
sum = 0;
for(j = 0; j < 3; j++)
{
sum += a[i].score[j];
}
a[i].total = sum;
}
fclose(fp1);
// 按总分排序
Student temp;
for(i = 0; i < N - 1; i++)
{
for(j = i + 1; j < N; j++)
{
if(a[i].total < a[j].total)
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
// 写入文件
fp2 = fopen("data2.txt", "w");
if(fp2 == NULL)
{
printf("Can't open file!\n");
exit(0);
}
for(i = 0; i < N; i++)
{
fprintf(fp2, "%s %s %s %s %d %d %d %d\n", a[i].num, a[i].name, a[i].sex, a[i].birthday, a[i].score[0], a[i].score[1], a[i].score[2], a[i].total);
}
fclose(fp2);
return 0;
}
```
其中,student.h中的结构体定义为:
```c
typedef struct{
char num[7]; // 学号
char name[9]; // 姓名
char sex[3]; // 性别
char birthday[11]; // 出生日期
int score[3]; // 三门课程成绩
int total; // 总分
}Student;
```
程序输出的data2.txt文件内容为:
```
221006 赵六 女 2005-6-18 88 85 98 271
221002 李四 女 2005-12-10 90 80 95 265
221004 刘一 男 2003-12-5 82 88 86 256
221005 陈二 男 2004-1-10 80 92 85 257
221001 张三 男 2004-3-15 85 95 85 265
221003 王五 男 2004-4-12 75 80 80 235
```
阅读全文