三天打鱼两天晒网

程序设计方法与优化
中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用C或C++语言/java/python实现程序解决问题。
基本要求:1.程序风格良好(使用自定义注释模板),提供友好的输入输出。
提高要求:1.输入数据的正确性验证。2.使用文件进行数据测试。如将日期 20100101 20111214 等数据保存在in.txt文件中,程序读入in.dat文件进行判定,并将结果输出至out.txt文件。
个人学习心得总结:这次这个题目比较有意思,以前看到这句话从未想到过自己有一天会被它难到。但我通过努力完成这次作业,输入日期后先要判断日期输入是否正确,然后判断这天是打鱼还是晒网,这个可以通过函数来实现,日期一般用结构体来实现。判断日期需要考虑多个方面,不仅需要考虑年份是平年还是闰年,还要考虑每一个月份的天数是固定的,所以我用到了很多if-else语句来进行判断。判断当天是打鱼还是晒网,主要是看从起始日期到终止日期的总天数,我用了for循环来求sum。最后在main函数中调用函数。这次代码的完成还需要靠调试来检查代码是否存在其他问题,还要靠测试来完善自己的代码,虽然起步很辛苦,但收获很多。
源文件

#include<stdio.h>
typedef struct time
{
	int year;
	int month;
	int day;
} date;

void judge(date today)
{	
	int i,j;
	int sum=0;
	int num[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
	if((today.year%4==0&&today.year%100!=0 )|| (today.year%400==0))
	     num[2]+=1;
	for(i=2010;i<today.year;i++)
	{
		if((i%4==0&&i%100!=0 )|| (i%400==0))
			sum+=366;
		else 
			sum+=365;
	}

	for(j=1;j<today.month;j++)
	{	
		sum+=num[j];
	}
	sum+=today.day;//总共的天数
	printf("这是第%d天\n",sum);
	if((sum%5>0 ) && (sum%5<4))
	     printf("这天在打渔\n");
	else printf("这天在晒网\n");
}
int main()
{	
    date today;
    int flag;
	while(1)
	{
	printf("请输入要查询的日期(请以空格隔开):\n");
	scanf("%d %d %d",&today.year,&today.month,&today.day);
	if(today.year<2010||today.month<=0||today.month>12||today.day<=0||today.day>31) 
		   {
		       printf("日期输入有误\n");
			   flag=0;
		    }
	   else if(today.month==1||today.month==3||today.month==5||today.month==7||today.month==8||today.month==10||today.month==12)
	       {
			   if(today.day>31)
				{
				    printf("日期输入有误\n");
				   flag=0;
			    }
			}
		else if(today.month!=2)
		{
			if (today.day>30)
			{
			      printf("日期输入有误\n");
			      flag=0;
			  }
		}
		else if((today.year%4==0&&today.year%100!=0 )|| (today.year%400==0))	
					{
						if(today.day>29)
						{
						printf("日期输入有误\n");
						flag=0;
					    }
					}
		else if(today.day>28)
					{
						printf("日期输入有误\n");
						flag=0;
					}
		else flag=1;	
		if(flag!=0)
		{
		judge(today);
	   } 
	}
  }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值