“三天打鱼两天晒网”


前言

中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用C或C++语言实现程序解决问题。

一、任务要求

基本要求:
1.程序风格良好(使用自定义注释模板),提供友好的输入输出。
提高要求:
1.输入数据的正确性验证。
2.使用文件进行数据测试。如将日期 20100101 20111214 等数据保存在in.txt文件中,程序读入in.dat文件进行判定,并将结果输出至out.txt文件。

二、源代码

#include <stdio.h>
#include<stdlib.h>
#define count 3//所需计算的日期个数
void main()
{
	//定义两个文件指针,分别指向in和out文件
	FILE *fp1,*fp2;
	fp1=fopen("in.txt","r");
	fp2=fopen("out.txt","a");
	int month[12]={31,28,31,30,31,30,31,31,30,31,30,31};
	if((fp1)==NULL)//判断in文件是否为空
	{
		printf("in文件中无日期,请在里面输入日期,如:2010-01-02\n");
		exit(1);
	}
	int y,m,d;//定义年、月、日
	int s=0;//定义经过的天数
	char a,b;//定义“-”
	for(int i=0;i<count;i++)
	{
		fscanf(fp1,"%d%c%d%c%d",&y,&a,&m,&b,&d);
		if(y<2010||m>12||d>31)//判断日期是否在2010-01-01之后
		{
			fprintf(fp2,"输入的日期错误,请重新输入!\n");
			exit(1);
		}
		if(y%4==0)
			month[1]++;
		for(int j=2010;j<y;j++)//折算年份
		{
			if(y%4==0)
				s+=366;
			else
				s+=365;
		}
		for(j=0;j<m-1;j++)//折算月份
		{
			s+=month[j];
		}
		s+=d;//最后加上天
		if(s%5<4)//判断打鱼或晒网
			fprintf(fp2,"%d年%d月%d日距2010年01月01日共%d天,此时他在打鱼。\n\n",y,m,d,s);
		else
			fprintf(fp2,"%d年%d月%d日距2010年01月01日共%d天,此时他在晒网。\n\n",y,m,d,s);
		s=0;
	}
	fclose(fp1);
	fclose(fp2);
}

三、算法流程图

在这里插入图片描述

四、测试结果

1、in文件输入日期

在这里插入图片描述

2、程序运行

在这里插入图片描述

3、out文件输出结果

在这里插入图片描述

五、总结

这次的程序用了c语言的对TXT文件的读写及存储功能,在此次程序编写的过程中,意识到了自己对于处语言的掌握还不是特别熟悉,在日后的学习当中需要加倍努力。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值