c语言实例--打渔晒网问题

问题:中国有句俗语叫“三天打鱼两天晒网”。某人从2018年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。

思路先行:

        第一步:先判断输入的年份是否为闰年,闰年366天,平年365天;

        第二步:计算从2018年1月1日起到以后某年的总天数;

                    2.1:先判断是否为闰年

                    2.2:再分别定义平年数组的月份和闰年数组的月份,再加上当年月的月份-1的天数;

                    2.3:接下来,在从2018年起,年份的个数;

                    2.4:最后,加上输入年份的日期个数。

        第三步:判断“三天打渔,两天晒网”的含义:1,2,3,4,5,6,7,8,9,10.....可以发现以5为周期,余数为1,2,3的为打渔,为0,4的是晒网。

代码如下:

#include <stdio.h>                                //引用头文件

int leap(int a)                                   //第一步:判断是否为闰年:能被4整除,但被100整除,或者能被400整除
{
	if(a%4==0 && a%100!=0 ||  a%400==0)
		return 1;                                 //是闰年返回1
	else
		return 0;									//平年返回0
}
												//第二步:
int number(int year,int month,int day)        //定义年月日和距离2018年1月1日的总数n
{
	int sum=0,int i,j;							//定义天数总和sum,变量i,j;
	int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};     //定义平年的12个月份
	int b[12]={31,29,31,30,31,30,31,31,30,31,30,31};	//定义闰年的12个月份

	if(leap(year)==1)							//判断是否为闰年
		for(i=0;i<month-1;i++)					//是闰年,累加数组b前month-1个月份的天数
			sum +=b[i];				
	else
		for(i=0;i<month-1;i++)					//是平年,累加数组a前month-1个月份的天数
			sum +=a[i];
	for(j=2018;j<year;j++)					//从2018年1月1日起,开始计算总天数
		if(leap(j)==1)
			sum +=366;                       //是闰年,直接加上366天
		else  
			sum +=365;						//是平年,直接加上365天
		sum +=day;
	return sum;								//最后,加上天数分总和
}
                                              //第三步:
void main()                                      
{
	int year,month,day,n;								
	printf("请输入您想判断的年月日:");	
	scanf("%d%d%d",&year,&month,&day);					//输入年月份
	n=number(year,month,day);
	if((n%5)>0 && (n%5)<4)								//注意:1,2,3,4,5,6,7,8,9,....每三天打一次渔,两天晒一次网,循环天数为5,并且余数为1,2,3的为打渔,4,5的为晒网
		printf("%d年%月%d日:打渔\n",year,month,day);
	else
		printf("%d年%d月%d日:晒网\n",year,month,day);
}

输出结果如下:


阅读更多

没有更多推荐了,返回首页