![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5SZwUGZyE2NyQ2NyczNkJGM1UGOxgzN1gzM0gTMkZTOw8CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.gif)
点击蓝字关注我们
C语言渔夫打鱼晒网问题
如果一个渔夫从 2011 年 1 月 1 日开始每三天打一次渔,两天晒一次网,编程实现当输入 2011 1 月 1 日以后的任意一天,输出该渔夫是在打渔还是在晒网。
实现过程:
(1) 自定义函数 leap(),用来判断输入的年份是否是闰年。
(2) 自定义函数 number(),用来计算输入日期距 2011 年 1 月 1 日共有多少天。
(3) main() 函数作为程序的入口函数,在 main() 函数中调用上面两个函数。程序代码如下:
#include
int leap(int a)
{
if (a%4==0&&a%100!=0||a%400==0)
return 1;
else
return 0;
}
int number(int year,int month,int day)
{
int sum = 0, i, j, k;
int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int b[12]={31,29,31,30,31,30,31,31,30,31,30,31};
if(leap(year)==1)
for(i=0;i
sum+=b[i];
else
for(i=0;i
sum+=a[i];
for(j=2011;j
if (leap(j)==i)
sum+=366;
else
sum+=365;
sum+=day;
return sum;
}
int main()
{
int year,month,day,n;
printf("请输入年月日\n");
scanf("%d%d%d",&year,&month,&day);
n=number(year,month,day);
if((n%5)<4&&(n%5)>0)
printf("%d:%d:%d 打鱼\n",year,month,day);
else
printf("%d:%d:%d 晒网\n",year,month,day);
return 0;
}
运行结果:
请输入年月日
2011 1 4
2011:1:4 晒网
技术要点:
本实例主要有以下两个技术要点:
(1) 判断输入的年份(2011 年以后包括 2011 年)是否为闰年,这里自定义函数 leap() 来进行判断。该函数的核心内容就是闰年的判断条件即能被 4 整除但不能被 100 整除,或能被 400 整除。
(2) 求输入日期距 2011 年 1 月 1 日有多少天。首先判断 2011 年距输入的年份有多少年,这其中有多少年是闰年就将 sum 加多少个 366,有多少年是平年便将 sum 加上多少个 365。
(3) 其次要将 12 个月每月的天数存到数组中,因为闰年 2 月份的天数有别于平年,故采用两个数组 a 和 b 分别存储。若输入年份是平年,月份为 m 时就在前面累加日期的基础上继续累加存储着平年每月天数的数组的前 m-1 个元素,将累加结果加上输入的日期便求出了最终结果。闰年的算法类似。
计算机与控制工程学院团委宣传部
材料来源:学习部
排版编辑:胡志信
执行编辑:蔡金晶
责任编辑:宋健栋
审 核:贺 毅