文件的简单操作

在一个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;
            }

        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值