一、问题描述
一个渔夫从1990年1月1日起开始“三天打鱼两天晒网”,问这人在以后的某一天是打鱼还是晒网
二、设计思路: 1:要求出总天数; 2:考虑到闰年和平年的二月天数不同; 3:打鱼还是晒网主要是找一个周期,明显为5,对5求余找余数; 三、程序流程图![](/i/l/?n=23&i=blog/3167965/202304/3167965-20230413205743847-1957684857.png)
typedef struct date//定义一个时间类的结构体
{
int year;
int month;
int day;
}Date;
int runYear(int b)//写一个判断润年的函数
{
if((b%400==0)||(b%100!=0&&b%4==0))
{
return 1;//是闰年则返回真值1
}
else return 0;//不是闰年则返回0
}
int coutday(Date a)//写一个计算总天数的函数
{
int permonth[13]={0,31,28,31,30,31,30,31,31,30,31,30};//初始化当闰年时候的月份天数
//特意设置13个的长度,为了将数组名月月份相对应
int year;//定义一个年份中间变量
int i;
int totalday=0;//定义并初始化总天数
for(year=1990;year<a.year;year++)//利用年份的循环求出指定年份与1990年的天数累加和
{
if(runYear(year))//条件判断,当该年为闰年
{
totalday=totalday+366;//则总天数加上366天
}
else totalday=totalday+365;//否则总天数加上365天
}
if(runYear(a.year))//这里做到了修改二月的天数,如果为闰年,则2月份为29天
{
permonth[2]++;
}
for(i=0;i<a.month;i++)//把指定日期前的月份加起来,指定日期所在月份不足一个月,不能加,跳出循环
{
totalday+=permonth[i];
}
totalday+=a.day;//把指定日期不足一个月的天数,也加进总天数
return totalday;//返回总天数的值,等待调用
}
int main()
{
Date today;//初始化一个名为today的结构体对象
int totalday;
int result;
printf("请输入年月日,如1999 1 31\n");//提示用户输入,一定要有
scanf("%d%d%d",&today.year,&today.month,&today.day);//结构体以圆点的形式访问地址
totalday=coutday(today);//函数声明
result=totalday%5;//三天打鱼两天晒网,则周期为5天,总天数对5求余,若结果为1,2,3则打鱼,
if(result>0&&result<4)
{
printf("今天打鱼");
}
else printf("今天晒网");
return 0;
} 五、收获 1:结构体来定义多个变量比较好操作; 2:从年,月,日逐层去剥的思路,先加年份,再加月份,再加日 3,找周期,求余数来判断打鱼还是晒网 标签:totalday,还是,打鱼,int,天数,31,year,晒网 From: https://www.cnblogs.com/bzsc/p/17316415.html