如果一个渔夫从 2011 年 1 月 1 日开始每三天打一次渔,两天晒一次网,编程实现当输入 2011 1 月 1 日以后的任意一天,输出该渔夫是在打渔还是在晒网。

实现过程:

(1) 自定义函数 leap(),用来判断输入的年份是否是闰年。

(2) 自定义函数 number(),用来计算输入日期距 2011 年 1 月 1 日共有多少天。

(3) main() 函数作为程序的入口函数,在 main() 函数中调用上面两个函数。程序代码如下:

#include <stdio.h>
int leap(int a) /*自定义函数leap()用来指定输入的年份是否为闰年*/
{if (a%4==0&&a%100!=0||a%400==0)    /* 闰年判定条件 */return 1;    /*是闰年返回1*/elsereturn 0;    /*不是闰年返回O*/
}
int number(int year,int month,int day)    /*自定义函数 number() 计算输入日期距2011年1月1日共有多少天*/
{int sum = 0, i, j, k;int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};    /*数组a存放平年每月的天数*/int b[12]={31,29,31,30,31,30,31,31,30,31,30,31};    /*数组b存放闰年每月的天数*/if(leap(year)==1)    /*判断是否为闰年*/for(i=0;i<month-1;i++)sum+=b[i];    /*是闰年,累加数组b前m-1个月份的天数*/elsefor(i=0;i<month-1;i++)sum+=a[i];    /*不是闰年,累加数组a前m-1个月份的天数*/for(j=2011;j<year;j++)if (leap(j)==1)sum+=366;    /*2011年到输入的年份是闰年的加366*/elsesum+=365;    /*2011年到输入的年份不是闰年的加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);    /*调用函数 number()*/if((n%5)<4&&(n%5)>0)    /*余数是1或2或3时说明在打渔,否则在晒网*/printf("%d:%d:%d 打鱼\n",year,month,day);elseprintf("%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。

其次要将 12 个月每月的天数存到数组中,因为闰年 2 月份的天数有别于平年,故采用两个数组 a 和 b 分别存储。若输入年份是平年,月份为 m 时就在前面累加日期的基础上继续累加存储着平年每月天数的数组的前 m-1 个元素,将累加结果加上输入的日期便求出了最终结果。闰年的算法类似。

C语言渔夫打鱼晒网问题相关推荐

  1. JavaScript网页特效-“渔夫打鱼晒网”程序设计

    程序设计时,把可能需要反复执行的代码封装为函数,然后在需要执行该段代码功能的地方进行调用,这样不仅可以实现代码的复用,更重要的是可以保证代码的一致性,只需要修改该函数代码,则所有调用位置均得到体现.同 ...

  2. java捕鱼设计_java实现渔夫打鱼晒网

    package com.example.demo.sample; import java.util.Scanner; /** * Desc :如果一个渔夫从 2015 年 1 月 1 日开始每三天打一 ...

  3. C语言练习题 打鱼晒网问题

    题目: 一个渔夫从2011年1月1日起每三天打一次鱼,两天晒一次网,编程实现输入2011年1月1日后任意一天,输出当天是在打鱼还是晒网. 代码: #include <stdio.h> #i ...

  4. C语言试题七十七之请编写函实现渔夫打鱼晒网问题

  5. c语言200例 009 打鱼晒网问题

    问题:中国有句俗语叫"三天打鱼两天晒网".某人从2011年1月1日起便开始"三天打鱼两天晒网",问这个人在以后的某一天中是"打鱼"还是&qu ...

  6. 68-C语言-打鱼晒网问题

    问题: 正所谓三天打鱼两天晒网,你成为了一名渔夫,每三天第一次鱼,每两天打一次网,若你从2011年1月1日开始干活,请从键盘输入任意日期,问这天是打鱼还是晒网? 思路: 这个什么时候打鱼,什么时候晒网 ...

  7. python练习, 打鱼晒网问题

    如果一个渔夫从 2011 年 1 月 1 日开始每三天打一次渔,两天晒一次网,编程实现当输入 2011 1 月 1 日以后的任意一天,输出该渔夫是在打渔还是在晒网. import time # 判断是 ...

  8. 打鱼晒网问题(C++)

    题目链接:https://www.bilibili.com/video/av21356335?p=3 问题描述:某人从1999年1月1日起开始三天打鱼两天晒网,计算输入的日期是打鱼还是晒网 问题分析: ...

  9. 算法初级_Question3_打鱼还是晒网(java实现)

    这篇文章讲述的是算法初级部分的打鱼还是晒网问题的java实现,参考的书籍为清华大学出版社出版,贾蓓等编著的<c语言趣味编程1000例>,如有错误或者不当之处,还望各位大神批评指正. 问题描 ...

  10. Python趣味算法入门 - 打鱼还是晒网

    问题描述 中国有句俗语叫"三天打鱼两天晒网".某人从1990年1月1日起便开始"三天打鱼两天晒网",问这个人在以后的某一天中是"打鱼"还是& ...

最新文章

  1. 如何区分网线是几类的_认清网线的六种材质,挑选网线不再被坑
  2. 一周一论文(翻译)——[SIGMOD 2015] TIMELY RTT-based Congestion Control for the Datacenter
  3. 深度学习笔记 第五门课 序列模型 第二周 自然语言处理与词嵌入
  4. ORACLE 10.2.01升级10.2.05 for windows 详细文档
  5. 前端学习(2031)vue之电商管理系统电商系统之创建新分支
  6. JavaScript -- this 总结
  7. EASYUI- EASYUI左移右移 GRID中值
  8. [C#]方法示例:判断是否闰年
  9. 如何编写一个Makefile文件(手把手的教你)
  10. 单片机原理——MCS-51单片机结构及原理
  11. When executing step qmake
  12. 安全知识、工具网址集锦(持续更新)
  13. mscorsvw.exe是什么
  14. JDK8 ThreadLocal 源码解析与最佳实践
  15. 使用office2007发表csdn博客
  16. 把Form转换成TXT格式的文件
  17. DVWA靶场通关教程
  18. 高斯分布数学性质及推导(一):如何证明高斯分布的积分为1
  19. 牛客网编程入门刷题简单整理
  20. 【历史上的今天】8 月 2 日:字节跳动收购 Musical.ly;PlayStation 之父诞生;早期的女性计算机先驱

热门文章

  1. Terminator the Sara Conner Chronicles
  2. VCRedist.exe静默安装方法(转)
  3. 中文三元组联合标注工具LAnn介绍
  4. 科大讯飞python 思维导图
  5. nginx ajax 错误500,聊聊nginx报错499问题
  6. 南邮计算机就业,这两所大学实力强劲,从专业到就业率分析,来看看谁更强吧...
  7. C++重温笔记(五): 多态与虚函数
  8. Win10电脑出现No Bootable Device且无法开机或开机后蓝屏无限重启的多个解决方法
  9. Roaring Bitmaps结构原理
  10. idea任务栏图标变白色,桌面快捷方式变白色