三天打鱼,两天晒网
1)计算从2010年1月1日开始至指定日期共有多少天;
2)由于“打鱼”和“晒网”的周期为5天,所以将计算出的天数用5去除;
若余数为1,2,3,,在“打鱼”,否则是在“晒网”。
3)对平年闰年分情况考虑,能被4整除但不能被100整除或能被400整除的年份为闰年,有366天,其余年份为平年,是365天。将平年闰年每月的天数分别存入数组,用来解决不是整年的具体天数。
``
#include <stdio.h>
#include <stdlib.h>
#define YEAR 2010 //定义初始年月日
#define MONTH 1
#define DAY 1
int Input(); //录入数据并判断是否合法
int Days(int, int, int); //求期间的天数,参数为年月日
int Days(int year, int month, int day)
{
int days = 0; //期间共有多少天
int days_tmp = 0; //不满一年的整月天数
int ping_nian[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int run_nian[] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int i= 0,j=0;
for(i = YEAR; i <= year; i++) //遍历每一年
if((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0)) //判断闰年
{
if((year - i) != 0) //判断是否为完整的一年
days += 366;
else
{
for(j = 0; j < month - MONTH; j++)
days_tmp += run_nian[j];
days += days_tmp + day;
}
}
else
{
if((year - i) != 0) //判断是否为完整的一年
days += 365;
else
{
for(j = 0; j < month - MONTH; j++)
days_tmp += ping_nian[j];
days += days_tmp + day;
}
}return days;
}
int Input()
{
int days = 0, year = 0,month = 0,day = 0;
int num = 0;
printf("\t输入一个2010年包括1月1日之后的日期\n\n");
printf("输入年月日:");
while(1) //录入数据并判断是否合法
{
scanf("%d,%d,%d", &year, &month, &day);
if(year >= YEAR && month >= 1 && month <= 12) //判断年月
{
if(month == 1||month == 3||month == 5||month == 7||month == 8||month == 10||month == 12)
{
if(day >= 1&&day <= 31) //大月天数是否合法
break;
else
{
printf("输入有误,请重新输入:");
fflush(stdin);} //清空缓存区
}
else if(month == 2) //2月天数是否合法
{
if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) //闰年
{
if(day >= 1 && day <= 29)
break;
else
{
printf("输入有误,请重新输入:");
}
}
else
{
if(day >= 1 && day <= 28)
break;
else
{
printf("输入有误,请重新输入:");
fflush(stdin);
}
}
}
else if(day >= 1 && day <= 30) //小月天数是否合法
break;
else
{
printf("输入有误,请重新输入:");
fflush(stdin);
}
}
else
{
printf("输入有误,请重新输入:");
fflush(stdin);
}
}
days = Days(year, month, day); //调用求天数的函数
return days; }
int main()
{
int days = 0; //从始至终的总天数
days = Input(); //调用函数
printf("这是第%d天\n", days);
if((days % 5 == 4) || (days % 5 == 0)) //利用取余判断打鱼还是晒网
printf("这一天晒网");
else
printf("这一天打鱼");
return 0;
}