PTA 第9章文件作业9-1 统计得分率 (10分)

有一个二进制数据文件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; 
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值