在一个test.txt文件中有如下信息(可把汉字换成拼音)
张刚 1002 78.1
李强 2003 90.5
王红丽 2004 81.8
韩莉莉 2005 79.3
欧阳暮雪 3009 92.6
李亚楠 3010 67.0
黄君豪 3019 93.1
王倩茹 3031 89.6
赵强 4011 87.7
(其中,每个同学的信息结构如下:姓名最多4个汉字,学号为int型,成绩为float型。)
1)利用fscanf函数编程实现求所有同学的平均成绩,注意如何保证在读到文件尾的时候结束读取,而不是利用统计读到的同学的人数来结束。
2)自定义一个排序函数,利用fscanf将所有同学的信息读入到一个数组中,然后根据成绩进行排序。
3)利用fprintf函数将排序后的内容输出到文件sortresult.txt中。
#include <stdio.h>
#include <stdlib.h>
typedef struct student
{ char name[20];
int num;
float score;
} st;
st stu[9];
int average(FILE *P);
void p(FILE *q);
int main()
{ int i;
float sum=0,aver;
FILE *fp,*fp2;
fp = fopen("text.txt","r");
fp2= fopen("sortresult.txt","w");
for( i = 0;!feof(fp); i++ )
{
fscanf( fp, "%s%d%f",stu[i].name, &stu[i].num, &stu[i].score);
sum += stu[i].score;
}
aver = sum/9;
printf("%f",aver);
p(fp);
for( i = 0; i < 9; i++ )
fprintf( fp2,"%s \t%d\t%.1f\n",stu[i].name,stu[i].num, stu[i].score);
fclose (fp);
return 0;
}
void p(FILE *q)
{
int i,j;
st temp;
for(i=0;i<9;i++)
{
for(j=0;j<9-i-1;j++)
{
if(stu[j].score<stu[j+1].score)
{
temp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=temp;
}
}
}
}