C语言解决渔夫打鱼晒网问题
如果一个渔夫从 2015 年 1 月 1 日开始每三天打一次渔,两天晒一次网,编程实现当输入 2015 1 月 1 日以后的任意一天,输出该渔夫是在打渔还是在晒网。
实现过程:
(1) 自定义函数 leap(),用来判断输入的年份是否是闰年。
(2) 自定义函数 number(),用来计算输入日期距 20152015201520152015 年 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)==i)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; }
运行结果:
linuxidc@linuxidc:~/linuxidc.com$ ./linuxidc.com
请输入年月日
2019 5 19
2019:5:19 晒网
linuxidc@linuxidc:~/linuxidc.com$ ./linuxidc.com
请输入年月日
2019 5 18
2019:5:18 打鱼
linuxidc@linuxidc:~/linuxidc.com$ ./linuxidc.com
请输入年月日
2019 5 20
2019:5:20 晒网
技术要点:
本实例主要有以下两个技术要点:
(1) 判断输入的年份(2015 年以后包括 2015 年)是否为闰年,这里自定义函数 leap() 来进行判断。该函数的核心内容就是闰年的判断条件即能被 4 整除但不能被 100 整除,或能被 400 整除。
(2) 求输入日期距 2015 年 1 月 1 日有多少天。首先判断 2015 年距输入的年份有多少年,这其中有多少年是闰年就将 sum 加多少个 366,有多少年是平年便将 sum 加上多少个 365。
其次要将 12 个月每月的天数存到数组中,因为闰年 2 月份的天数有别于平年,故采用两个数组 a 和 b 分别存储。若输入年份是平年,月份为 m 时就在前面累加日期的基础上继续累加存储着平年每月天数的数组的前 m-1 个元素,将累加结果加上输入的日期便求出了最终结果。闰年的算法类似。
C语言解决渔夫打鱼晒网问题相关推荐
- JavaScript网页特效-“渔夫打鱼晒网”程序设计
程序设计时,把可能需要反复执行的代码封装为函数,然后在需要执行该段代码功能的地方进行调用,这样不仅可以实现代码的复用,更重要的是可以保证代码的一致性,只需要修改该函数代码,则所有调用位置均得到体现.同 ...
- java捕鱼设计_java实现渔夫打鱼晒网
package com.example.demo.sample; import java.util.Scanner; /** * Desc :如果一个渔夫从 2015 年 1 月 1 日开始每三天打一 ...
- C语言试题七十七之请编写函实现渔夫打鱼晒网问题
- C语言练习题 打鱼晒网问题
题目: 一个渔夫从2011年1月1日起每三天打一次鱼,两天晒一次网,编程实现输入2011年1月1日后任意一天,输出当天是在打鱼还是晒网. 代码: #include <stdio.h> #i ...
- c语言200例 009 打鱼晒网问题
问题:中国有句俗语叫"三天打鱼两天晒网".某人从2011年1月1日起便开始"三天打鱼两天晒网",问这个人在以后的某一天中是"打鱼"还是&qu ...
- 68-C语言-打鱼晒网问题
问题: 正所谓三天打鱼两天晒网,你成为了一名渔夫,每三天第一次鱼,每两天打一次网,若你从2011年1月1日开始干活,请从键盘输入任意日期,问这天是打鱼还是晒网? 思路: 这个什么时候打鱼,什么时候晒网 ...
- python练习, 打鱼晒网问题
如果一个渔夫从 2011 年 1 月 1 日开始每三天打一次渔,两天晒一次网,编程实现当输入 2011 1 月 1 日以后的任意一天,输出该渔夫是在打渔还是在晒网. import time # 判断是 ...
- 打鱼晒网问题(C++)
题目链接:https://www.bilibili.com/video/av21356335?p=3 问题描述:某人从1999年1月1日起开始三天打鱼两天晒网,计算输入的日期是打鱼还是晒网 问题分析: ...
- 算法初级_Question3_打鱼还是晒网(java实现)
这篇文章讲述的是算法初级部分的打鱼还是晒网问题的java实现,参考的书籍为清华大学出版社出版,贾蓓等编著的<c语言趣味编程1000例>,如有错误或者不当之处,还望各位大神批评指正. 问题描 ...
- Python趣味算法入门 - 打鱼还是晒网
问题描述 中国有句俗语叫"三天打鱼两天晒网".某人从1990年1月1日起便开始"三天打鱼两天晒网",问这个人在以后的某一天中是"打鱼"还是& ...
最新文章
- Spring Boot实战pdf
- 菜鸟学习物联网---辨析基于Andriod 5.1,Linux,Windows10开发Dragon Board 410c板
- 关于java同步包中ConcurrentLinkedQueue类的深入分析与理解
- 散点图 横纵坐标_厉害了,Matplotlib还能这样画散点图!
- mvn spring-boot:run 增加jvm启动参数
- 干货 | Elasticsearch7.X Scripting脚本使用详解
- 第 39 章 ThinkPHP--CURD 操作
- 【MATLAB】Parzen窗与K近邻算法原理与代码详解
- 操作 Wave 文件(13): waveOutGetVolume、waveOutSetVolume
- 6-6-阶段案例:传智书城JSP页面
- java逆序对距离之和,七天刷完剑指offer-【第27道-第37道】
- POJ 3122 Pie 二分枚举
- django urls路由匹配分发
- Mahout学习笔记-分类算法之Decision Forest
- python在线翻译小程序_Python 做一个翻译小程序
- java new string编码_Java String 类型编码转换
- 微信扫一扫登录(使用小程序实现)
- 开心消消乐html5游戏在线玩,开心消消乐在线玩
- 使用xml配置文件实现HSF框架和EDAS注册服务器的发布-订阅模式
- android菜单对话框文字,Android 对话框、信息提示和菜单
热门文章
- 凝思系统常用操作命令
- 领导力21法则(归纳)
- 720视频2码率够吗_两个人去丽江5000够吗,2人去云南旅游5天多少钱(超详细篇)...
- 和一群程序猿的旧金山优胜美地之旅
- 计算机应用基础IE浏览器设置,计算机应用基础IE浏览器设置学习笔记.docx
- 必看!软考系统架构设计师考试详情与备考攻略
- Webots学习笔记—距离传感器的介绍和四轮小车的避障
- 不下心删了线上环境mysql数据库数据,辛亏有惊无险
- 《CODE》读后笔记——第14~20章
- oracle nlv 全称,oracle: OCA-047-题解与实验(9)--SQL语句中COUNT和NLV的用法