PTA 第9章文件作业 9-3 统计图书 (10分)

有一个存放图书信息的二进制数据文件book.dat(书名,购买年份,价格),统计低于平均书价的图书记录并保存到二进制文件cheapbk.dat。

struct books { char sm[30]; int gmrq; int price; };

编写的源程序命名为test.cpp,提交之前,将系统提供的book.dat和test.cpp放在src文件夹下,然后在src文件夹的上层文件夹中压缩src.zip,保证这个zip文件中有src文件夹和其中的test.cpp文件。

注意:以下example程序为方便测试test.cpp程序而提供生成测试数据文件book.dat

example.cpp代码(自己补充stdio.h和stdlib.h库函数):

struct books

{ char sm[30];

int gmrq; int price; };

void save()

{

struct books st;

FILE *fp;

int i=0;

if ((fp=fopen(“book.dat”,“wb”))==NULL)

{
printf(“cannot open file\n”); exit(0); }

for(i=0;i<12;i++)

{

scanf("%s%d%d",st.sm,&st.gmrq,&st.price); fwrite(&st,sizeof(struct books),1,fp); }

fclose(fp); }

如输入图书信息为:

AA 1995 45

BB 1997 70

CC 2000 65

DD 1997 28

EE 2011 40

FF 2013 32

GG 1996 73

ZZYY 1979 40

SS 2000 80

ZZ 2015 61

TT 2016 90

VV 2000 34

则cheapbk.dat中的图书记录应该为:AA:1995:45 DD:1997:28 EE:2011:40 FF:2013:32 ZZYY:1979:40 VV:2000:34

提示:记录之间无需任何间隔。

如果使用WinRAR、7z等压缩软件,请注意压缩文件的格式为zip,而不是压缩为其他格式后修改后缀为zip。目前已知使用Windows的资源管理器的右键菜单中的“发送到压缩(zipped)文件夹“功能产生的zip文件不被PTA所接受。Unix的zip命令压缩的文件夹可以接受。

#include <stdio.h>
#include <stdlib.h>
struct books
{ 
	char sm[30];
	int gmrq; 
	int price;
};
void save()
{
	FILE *fp1,*fp2;
	int i=0;
	struct books st;
	if((fp1=fopen("book.dat","rb"))==NULL)
	{
		printf("cannot open file\n");
		exit(0); 
	}
	if((fp2=fopen("cheapbk.dat","wb"))==NULL)
	{
		printf("cannot open file\n");
		exit(0); 
	}
	float av=0;
	while(fread(&st,sizeof(struct books),1,fp1)==1)
	{
		av+=st.price*1.0;
		i++;
	}
	av/=i;
	rewind(fp1);
	i=0;
	while(fread(&st,sizeof(struct books),1,fp1)==1)
	{
		if(st.price<av)
		{
			fwrite(&st,sizeof(struct books),1,fp2);
		}
	}
	fclose(fp1);
	fclose(fp2);
}
int main()
{
	save();
	return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值