有一个二进制数据文件zy.dat,内容为一批学生期末考试4道题的得分情况(姓名,成绩1,成绩2,成绩3,成绩4),统计本次考试中每道题(1~4)的得分率并保存到二进制文件result.dat(数据之间用空格隔开)。
如:0.783 0.795 0.845 0.914
重要提示:自己编写的程序命名为test.cpp,本地测试test.cpp时,访问zy.dat和result.dat不用带路径,当打包提交时将zy.dat和result.dat的路径修改为./src/
提交之前,将系统提供的原始zy.dat和test.cpp放在src文件夹下,然后在src文件夹的上层文件夹中压缩src.zip,保证这个zip文件中有src文件夹和其中的test.cpp文件。
如果使用WinRAR、7z等压缩软件,请注意压缩文件的格式为zip,而不是压缩为其他格式后修改后缀为zip。目前已知使用Windows的资源管理器的右键菜单中的“发送到压缩(zipped)文件夹“功能产生的zip文件不被PTA所接受。Unix的zip命令压缩的文件夹可以接受。
说明:本地测试test.cpp时,可运行example.cpp程序生成zy.dat;再运行test.cpp生成二进制文件result.dat
example代码如下(自己加载stdio.h和stdlib.h库函数)。
注意:test.cpp应该能处理任意条数的记录。
struct student
{
char name[20];
int score[4];
};
typedef struct student student;
void save()
{
student st;
FILE *fp;
int i,x;
fp=fopen(“zy.dat”,“wb”);
if (!fp)
{printf(“cann’t create file\n”);exit(0);}
for(i=0;i<5;i++)
{
scanf("%s%d%d%d%d",st.name,&st.score[0],&st.score[1],&st.score[2],&st.score[3]);
fwrite(&st,sizeof(student),1,fp);
}
fclose(fp);
}
int main()
{
save();
return 0;
}
执行example程序时样例输入:
zhang 18 20 20 18
zhu 20 18 25 25
zhou 17 25 20 20
zhao 20 15 20 12
wang 18 20 25 20
则执行完test.cpp后result.dat内容应该为:0.744 0.784 0.880 0.760
#include <stdio.h>
#include <stdlib.h>
struct student
{
char name[20];
int score[4];
};
typedef struct student student;
void count()
{
student st;
FILE *fp1,*fp2;
int i=0;
float sum1=0,sum2=0,sum3=0,sum4=0,sum5=0;
fp1=fopen("./src/zy.dat","rb");
if(!fp1)
{
printf("cann't create file\n");
exit(0);
}
fp2=fopen("./src/result.dat","wb");
if(!fp2)
{
printf("cann't create file\n");
exit(0);
}
while(fread(&st,sizeof(student),1,fp1)==1)
{
sum1+=st.score[0];
sum2+=st.score[1];
sum3+=st.score[2];
sum4+=st.score[3];
i++;
}
sum1/=(i*25);
sum2/=(i*25);
sum3/=(i*25);
sum4/=(i*25);
fprintf(fp2,"%f %f %f %f ",sum1,sum2,sum3,sum4);
fclose(fp1);
fclose(fp2);
}
int main()
{
count();
return 0;
}