三天打渔两天晒网

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

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

源代码:

#include<stdio.h>
#include<stdlib.h>
int year,x,m,n,z;
int Year,Month,Day,Nyear,Nmonth,Nday;
int Jyear()/*判断年份,若为闰年,则二月为29天,否则为28天*/
{
	if((year%4==0&&year%100!=0)||year%400==0)
		x=29;
	else
		x=28;
return x;
}
void main()
{
	int sum1=0,sum2=0,days;
	FILE *p=fopen("in.txt","r");/*打开in.txt文件*/
	FILE *q=fopen("out.txt","w");/*写入out.txt文件*/	
	fscanf(p,"%d %d %d\n%d %d %d\n",&Year,&Month,&Day,&Nyear,&Nmonth,&Nday);
	if((p=fopen("in.txt","r"))==NULL)
	{
		printf("无法打开该文件!");
		exit(1);
	}
	switch(Nmonth)/*判断日期,若输入的月份为1,3,5,7,8,10,12,则输入日期小于31;为2,则调用函数Jyear,否则,返回值30*/
	{
	case 4:case 6:case 9:case 11:m=30;break;
	case 1:case 3:case 5:case 7:case 8:case 10:case 12:m=31;break;
	case 2:m=Jyear();
	}
	if(Nyear>=Year&&Nmonth>=1&&Nmonth<=12&&Nday>=1&&Nday<=m)/*验证输入日期的正确性*/
	{
		for(year=Year;year<Nyear;year++)/*计算从2010年到所指定年份之间的天数*/
		{
			n=Jyear();
			sum1=sum1+337+n;
		}
		int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
		int i;
		if((year%4==0&&year%100!=0)||year%400==0)/*判断平年还是闰年*/
			a[3]+=1;
		else
			a[3]+=0;
	   for(i=0;i<Nmonth;i++)/*计算指定年份到指定月份之间的天数*/			
			sum2+=a[i];		
		int day;
		days=sum1+sum2+Nday;/*计算2010年1月1日到指定日期之间总天数*/
		day=days%5;
		printf("***三天打鱼两天晒网***\n\n");
		printf("从%d年%d月%d日到%d年%d月%d日共有%d天。\n",Year,Month,Day,Nyear,Nmonth,Nday,days);		
		printf("(余数得%d)\n",day);
		fprintf(q,"%s","***三天打鱼两天晒网***\n\n");
		if(day>0&&day<4)
		{	printf("这一天他在打渔!\n");
			fprintf(q,"%s","这一天他在打渔!\n");
		}
		else
			printf("这一天他在晒网!");	
			fprintf(q,"%s","这一天他在晒网!\n");
	}
	else
		printf("您输入的日期不合常理,请重新输入!\n");
	fclose(p);
	fclose(q);
}

 心得体会:

通过这次作业的完成,我深刻的体会到只有在实践中才能发现问题所在并能更深刻的解决问题。在完成过程中遇到过总日期计算错误,原来是将初始值放在了循环之内,在验证日期正确性时,用了一个Jyear函数与switch语句解决,在读写文件时遇到很多问题,最终与同学探讨解决。在过程中体会到带着问题查阅资料更有效率,自己独立深入思考以及与同学互相讨论互相探索的重要性。
 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值