打鱼还是晒网

发布时间 2023-04-14 21:52:57作者: jais

一、问题描述:

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

二、设计思路:

1、输入当前日期today。

2、求出指定日期距离1990年1月1日的天数totalday。

3、将天数与5进行求余计算。

4、如果余数为1、2、3则输出今天大鱼;如果余数为4或5则输出今天晒网。

三、程序流程图:

 

 

四、代码实现:

#include<stdio.h>
typedef struct date{
int year;
int month;
int day;
}DATE;
int countDay(DATE);/*函数声明*/
int runYear(int);/*函数声明*/
void main()
{
DATE today;/*指定日期*/
int totalDay;/*指定日期距离1990年1月1日的天数*/
int result;/*todalDay对5求余的结果*/
/*输入指定日期,包括年,月,日*/
printf("please input 指定日期 包括年,月,日 如1990 1 31\n");
scanf("%d%d%d",&today.year,&today.month,&today.day);
/*求指定日期距离1990年1月1日的天数*/
totalDay=countDay(today);
/*天数%5,判断输出打鱼还是晒网*/
result=totalDay%5;
if(result>0&&result<4)
printf("今天打鱼");
else
printf("今天晒网");
}
/*判断是否为闰年,是返回1,否返回0*/
int runYear(int year)
{
if((year%4==0&&year%100!=0)||(year%400==0))
return 1;
else
return 0;
}
/*计算指定日期距离1990年1月1日的天数*/
int countDay(DATE currentDay)
{
int perMonth[13]={0,31,28,30,31,30,31,30,31,30,31,30};/*每月天数数组*/
int totalDay=0,year,i;
/*求出指定日期前的每一天的天数累加和*/
for(year=1990;year<currentDay.year;year++)
{
if(runYear(year))
totalDay=totalDay+366;
else
totalDay=totalDay+365;
}
/*如果为闰年,则2月份为29天*/
if(runYear(currentDay.year))
perMonth[2]+=1;
/*将本年内的天数累加到totalDay中*/
for(i=0;i<currentDay.month;i++)
totalDay+=perMonth[i];
/*将本月内的天数累加到totalDay中*/
totalDay+=currentDay.day;
/*返回totalDay*/
return totalDay;
}