#include<stdio.h>
struct students
{
int num;
char name[10];
float math;
float eng;
float cy;
};
double average(float a,float b,float c)
{
double aver ;
aver=(a+b+c)/3;
return aver;
}
void sort(struct students a[3],double aver[3])
{
int i,j;
double t;
FILEfg;
fg=fopen("score_aver . txt","w");
for(i=0;i<2;i++ )
for(j=0;j<3-i;j++)
if(aver[i]<aver[j])
{
t=aver[i];
aver[i]=aver[j];
aver[j]=t;
}
for(i=0;i<3;i++)
{
fprintf(fg,"%d%s%f%f%f%lf",a[i].num,a[i].name ,a[i].math,a[i].eng ,a[i].cy ,aver[i]);
printf("%d%5%f%f%f%lf",a[i].num,a[i].name,a[i].math,a[i].eng,a[i].cy,aver[i]);
}
fclose(fg);
}
int main()
{
struct students a[3];
int i;
double aver[3]={0};
FILEfp, *fg ;
fp=fopen("score.txt" ,"r");
fg=fopen("score_ aver txt","w");
fprintf(fg,"姓名 高数 英语 c语言 平均分");
printf("姓名 高数 英语 c语言");
for(i=0;i<3;i++)
{
fscanf(fp ,"%d%s%f%f%f" ,&a[i] .num,&a[i].name ,&a[i].math,&a[i] .eng ,&a[i].cy);
aver[i]=average(a[i].math,a[i].eng,a[i].cy);
}
sort(struct students a[3],aver[3]);
fclose(fp);
fclose(fg);
return 0;
}
举个例子,题主可尝试下述思路:
#include <stdio.h>
#include <conio.h>
struct student
{
char num[20];//学号
char name[20];//姓名
int s1,s2,s3;//三门课成绩
double ave;//平均成绩
};
int main()
{
struct student stu[5];
FILE* fp;
int i;
printf ("请输入3名学生的学号、姓名、3门课的成绩,空格分隔,回车结束\n");
for (i=0;i<3;i++)
scanf ("%s %s %d %d %d",stu[i].num,stu[i].name,&stu[i].s1,&stu[i].s2,&stu[i].s3);
for (i=0;i<3;i++)//计算平均成绩
stu[i].ave=(stu[i].s1+stu[i].s2+stu[i].s3)/3.0;
fp=fopen("stu_list.txt","w");//以"写"方式打开文件
for (i=0;i<3;i++)
fprintf (fp,"%s %s %d %d %d %lf\n",stu[i].num,stu[i].name,stu[i].s1,stu[i].s2,stu[i].s3,stu[i].ave);
fclose(fp);
return 0;
}
这两处应该有问题
for(i=0;i<2;i++ )
for(j=0;j<3-i;j++)
改成
for(i=0;i<2;i++ )
for(j=0;j<3-i-1;j++)
printf("%d%5%f%f%f%lf",
改成
printf("%d%s%f%f%f%lf",