第1个回答 推荐于2016-03-18
确实这样的题正是锻炼你的时候,不过看你这么急我可以个你一个模板,是我以前做的一个基本的输入输出文件流,相信你看了会有收获,不过我还是建议你先自己做做试试,不会了看看书,再不行了才看下面的程序。
#include<stdio.h>
#define N 4
struct student
{
char name[8];
int num;
int score[3];
}stu[N];
void save();
void print();
void main()
{
printf("please input information\n");
save(stu);
print(stu);
}
void save()
{
FILE *fp1;
int i,j;
fp1=fopen("stu.list","w");
//printf("write file error\n");
for(i=0;i<N;i++)
{
printf("name: ");
scanf("%s",stu[i].name);
printf("num: ");
scanf("%d",&stu[i].num);
for(j=0;j<3;j++)
{
printf("score%d: ",j+1);
scanf("%d",&stu[i].score[j]);
}
}
for(i=0;i<N;i++)
{
fwrite(&stu[i],sizeof(struct student),1,fp1);
}
fclose(fp1);
}
void print()
{
int i,j,m,n,a[N];
float b,sum[3],aver[3];
FILE *fp2;
if((fp2=fopen("stu.list","r"))==NULL)
{
printf("cannot open this file");
printf("Error!");
return;
}
printf("name num score1 score2 score3 sum\n");
for(i=0;i<N;i++)
{
a[i]=0;
fread(&stu[i],sizeof(struct student),1,fp2);
printf("%-6s%-6d",stu[i].name,stu[i].num);
for(j=0;j<3;j++)
{
printf("%-8d",stu[i].score[j]);
a[i]+=stu[i].score[j];
}
printf("%-3d",a[i]);
printf("\n");
}
for(m=0;m<3;m++)
{
b=0;
for(n=0;n<N;n++)
{
b+=stu[n].score[m];
sum[m]=b;
}
aver[m]=sum[m]/N;
printf("average%d: %4.2f\n",m+1,aver[m]);
}
fclose(fp2);
}
这只是一个跟你的题目相识的模板,你可以先调试一下看看,看看它是怎样运行的,在根据这个稍加修改就成了你的题目了,自己动动手吧,总是有好处的。本回答被提问者采纳