#include<stdio.h>
#define N 3
typedef struct{
int num;
char name;
int score[5];
int total;
} STUDENT;
void main()
{
FILE *fp;
STUDENT st,smax;
int i,j;
fp=fopen("stu_sc.dat","wb+");
for(i=0;i<N;i++)
{
printf("输入学生的学号和5门课成绩:");
scanf("%d",&st.num);
st.total=0;
for(j=0;j<5;j++)
{
scanf("%d",&st.score[j]);
st.total+=st.score[j];
}
fwrite(&st,sizeof(STUDENT),1,fp);
}
rewind(fp);
fread(&smax,sizeof(STUDENT),1,fp);
while(feof(fp))
{
fread(&st,sizeof(STUDENT),1,fp);
if(st.total>smax.total)
smax=st;
}
printf("%d ",smax.num);
for(j=0;j<5;j++)
printf("%d ",smax.score[j]);
printf("%d\n",smax.total);
fclose(fp);
}
将上题stu_sc.dat中的数据,按总分排序(降序),写入新文件stu_sort.dat中。
#include<stdio.h> #define N 30 typedef struct{ int num; char name; int score[5]; int total; } STUDENT; void main() { FILE *fin,*fout; STUDENT st[N],temp; int i,j,k,n=0; fin=fopen("stu_sc.dat","rb"); fout=fopen("stu_sort.dat","wb+"); fseek(fin,0L,SEEK_END); n=ftell(fin)/sizeof(STUDENT); rewind(fin); for(i=0;i<n;i++) fread(&st[i],sizeof(STUDENT),1,fin); for(i=0;i<n;i++) { k=i; for(j=i+1;j<n;j++) if(st[k].total<st[j].total) k=j; if(k!=i) { temp=st[k];st[k]=st[i];st[i]=temp; } } fwrite(st,sizeof(STUDENT),n,fout); rewind(fout); for(i=0;i<n;i++) { fread(&temp,sizeof(STUDENT),1,fout); printf("%d ",temp.num); for(j=0;j<5;j++) printf("%d ",temp.score[j]); printf("%d\n",temp.total); } fcloseall(); }