打鱼晒网C语言程序,C语言打鱼还是晒网问题

问题描述

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

问题分析

根据题意可以将解题过程分为3步:

计算从1990年1月1日开始至指定日期共有多少天。

由于“打鱼”和“晒网”的周期为5天,所以将计算出的天数用5去除。

根据余数判断他是在“打鱼”还是在“晒网”,若余数为1、2、3,则他是在“打鱼”,否则是在“晒网”。

算法设计

该算法为数值计算算法,要利用循环求出指定日期距1990年1月1日的天数,并考虑到循环过程中的闰年情况,闰年二月为29天,平年二月为28天。判断闰年的方法可以用伪语句描述如下:如果(能被4整除并且不能被100整除)或者(能被400整除)则该年是闰年;否则不是闰年。

判断是否为闰年流程图:

3bd3f71ce731c77ccb1aff09fe9b6081.png

算法流程图:

aa1a2d8767c0ff1647bf80f692af67e3.png

下面是完整的代码:

#include

/*定义日期结构体*/

typedef struct date {

int year;

int month;

int day;

}DATE;

int countDay(DATE currentDay); /*函数声明*/

int runYear(int year); /*函数声明*/

int main()

{

DATE today; /*指定日期*/

int totalDay; /*指定日期距离1990年1月1日的天数*/

int result; /*totalDay对5取余的结果*/

/*输入指定日期,包括年,月,日*/

printf("please input 指定日期 包括年,月,日 如:1999 1 31\n");

scanf("%d%d%d", &today.year, &today.month, &today.day);

totalDay=countDay(today); /*求出指定日期距离1990年1月1日的天数*/

/*天数%5,判断输出打鱼还是晒网*/

result=totalDay%5;

if(result>0 && result<4)

printf("今天打鱼");

else

printf("今天晒网");

return 0;

}

/*判断是否为闰年,是返回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,31,30,31,30,31,31,30,31,30}; /*每月天数数组*/

int totalDay=0,year,i;

/*求出指定日期之前的每一年的天数累加和*/

for(year=1990; year

{

if(runYear(year)) /*判断是否为闰年*/

totalDay=totalDay+366;

else

totalDay=totalDay+365;

}

/*如果为闰年,则二月份为29天*/

if(runYear(currentDay.year))

perMonth[2]+=1;

/*将本年内的天数累加到totalDay中*/

for(i=0; i

totalDay+=perMonth[i];

/*将本月内的天数累加到totalDay中*/

totalDay+=currentDay.day;

/*返回totalDay*/

return totalDay;

}

运行结果:

please input 指定日期 包括年,月,日 如:1999 1 31

2017 3 14

今天晒网

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值