## 三天打鱼两天晒网问题
三天打鱼两天晒网问题(文末有源代码)
1.题目要求:
中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用C或C++语言实现程序解决问题。
基本要求:1.程序风格良好(使用自定义注释模板),提供友好的输入输出。
提高要求:1.输入数据的正确性验证。
2.使用文件进行数据测试。如将日期 20100101 20111214 等数据保存在in.txt文件中,程序读入in.dat文件进行判定,并将结果输出至out.txt文件。
2.算法分析
这个题目首先应该求出从2010年1月1日到指定日期之间经过的总天数,打鱼晒网是5天一轮回,所以用天数对5取余可以来判断打鱼还是晒网。
1)首先应该计算指定日期到2010年1月1日相差的天数;其中要对平年和润年的天数进行判断分析,从而得出总天数。
2)再将计算出的天数用5去除,根据余数判断他是在“打鱼”还是在“晒网”
3)若余数为1,2,3,则他是在“打鱼”余数结果为0或4时为晒网。
3.概要设计(包括数据结构及算法绘制流程图或伪代码表示)
计算总天数的代码如下:
for(i = YEAR; i <= year; i++) //遍历每一年
{
if((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0)) //判断是否为闰年
{
if((year - i) != 0) //判断是否为完整的一年
days += 366;
else
{
for(j = 0; j < month - MONTH; j++)
days_yue += run_nian[j];
days += days_yue + day;
}
}
else
{
if((year - i) != 0) //判断是否为完整的一年
days += 365;
else
{
for(j = 0; j < month - MONTH; j++)
days_yue += ping_nian[j];
days += days_yue + day;
流程图如下:
4.测试(设计测试用例或测试代码的设计与实现,测试结果截屏)
图4-1程序运行总界面
图 4-2年份日期判断
图4-3测试数据
5.调试(对测试出的问题进行调试,界面截屏,调试修正编码)
判断闰年,平年每月天数是否合法时的判断代码出现了错误,经过修改,最终可以运行,代码如下:
while(1) //录入数据并判断是否合法
{
scanf("%d,%d,%d", &year, &month, &day);
if(year >= YEAR && month >= 1 && month <= 12) //判断年月
{
if(month == 1||month == 3||month == 5||month == 7||month == 8||month == 10||month == 12)
{
if(day >= 1 && day <= 31) //大月天数31天判定是否合法
break;
else
{
printf(“输入有误,请重新输入:”);
fflush(stdin); //清空缓存区
}
}
else if(month == 2) //2月天数是否合法
{
if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) //判断为闰年
{
if(day >= 1 && day <= 29) //判断为闰年 29天
break;
else
{
printf(“输入有误,请重新输入:”);
fflush(stdin); //清空缓存区
}
}
else
{
if(day >= 1 && day <= 28) //判断为平年,二月28天
break;
else
{
printf(“输入有误,请重新输入:”);
fflush(stdin);
}
}
}
else if(day >= 1 && day <= 30) //小月30天判断天数是否合法
break;
else
{
printf(“输入有误,请重新输入:”);
fflush(stdin);
}
}
else
{
printf(“输入有误,请重新输入:”);
fflush(stdin);
}
}
days = Days(year, month, day); //调用要求的天数的函数
return days; //返回天数
}
6.心得体会(关键问题的解决思路及步骤总结)
本题的设计过程中,我又重新复习学习了一遍C语言的相关知识点,本题中关键的部分是循环中总天数的计算,即从2010.1.1以后这个人到底过了多少天,今天是该打鱼还是晒网,其次就是要搞清楚平年,闰年的区别,按月份进行区分,大月份小月份,分别计算可以会思路比较清晰一点,在这个过程学习到了很多。希望以后可以用java,pathon实现这个功能。
源代码:
#include <stdio.h>
#include <stdlib.h>
#define YEAR 2010 //用宏定义来定义初始的年月日
#define MONTH 1
#define DAY 1
int Input();
int Days(int, int, int); //求期间的天数,参数为年月日
//定义 变量年 月 日
int Days(int year, int month, int day)
{int days = 0; //期间共有多少天int days_yue = 0; //这个是不满一年的整月的天数int ping_nian[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};int run_nian[] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};int i = 0;int j = 0;for(i = YEAR; i <= year; i++) //遍历每一年{if((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0)) //判断是否为闰年{if((year - i) != 0) //判断是否为完整的一年days += 366;else{for(j = 0; j < month - MONTH; j++)days_yue += run_nian[j];days += days_yue + day;}}else{if((year - i) != 0) //判断是否为完整的一年days += 365;else{for(j = 0; j < month - MONTH; j++)days_yue += ping_nian[j];days += days_yue + day;}}}return days;
}int Input()
{int days = 0, //从始至终的总天数year = 0,month = 0,day = 0;int num = 0;printf("\t请输入一个2010年1月1日之后的日期\n\n");printf("请输入年月日(用逗号隔开):");while(1) //录入数据并判断是否合法{scanf("%d,%d,%d", &year, &month, &day); if(year >= YEAR && month >= 1 && month <= 12) //判断年月{if(month == 1||month == 3||month == 5||month == 7||month == 8||month == 10||month == 12){if(day >= 1 && day <= 31) //大月天数31天判定是否合法break;else{printf("输入有误,请重新输入:");fflush(stdin); //清空缓存区}}else if(month == 2) //2月天数是否合法{if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) //判断为闰年{if(day >= 1 && day <= 29) //判断为闰年 29天 break;else{printf("输入有误,请重新输入:");fflush(stdin); //清空缓存区}}else{if(day >= 1 && day <= 28) //判断为平年,二月28天 break;else{printf("输入有误,请重新输入:");fflush(stdin);}}}else if(day >= 1 && day <= 30) //小月30天判断天数是否合法break;else{printf("输入有误,请重新输入:");fflush(stdin);}}else{printf("输入有误,请重新输入:");fflush(stdin);}}days = Days(year, month, day); //调用要求的天数的函数return days; //返回天数
}int main()
{int days = 0; //这个是总天数days = Input(); //调用函数printf("这是从2010年1月1日之后的第%d天\n", days);if((days % 5 == 4) || (days % 5 == 0)) //利用取余判断打鱼还是晒网printf("这一天这个人在晒网");elseprintf("这一天这个人在打鱼");return 0;
}
## 三天打鱼两天晒网问题相关推荐
- 分支-03. 三天打鱼两天晒网(Switch…case)
中国有句俗语叫"三天打鱼两天晒网".假设某人从某天起,开始"三天打鱼两天晒网",问这个人在以后的第N天中是"打鱼"还是"晒网&qu ...
- Java---中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。
已经实现的功能: 从键盘输入指定的年.月.日: 计算从2010年1月1日至指定日期共有多少天: 由于"打鱼"和"晒网"的周期为5天,所以将计算出的天数用5去除. ...
- python天天向上的力量三天打鱼两天晒网_017 示例3-天天向上的力量-Go语言中文社区...
一."天天向上的力量"问题分析 1.1 天天向上的力量 基本问题:持续的价值 一年365天,每天进步1%,累计进步多少呢? (1.01^{365}) 一年365天,每天退步1%,累 ...
- 三天打鱼两天晒网 (15 分)
中国有句俗语叫"三天打鱼两天晒网".假设某人从某天起,开始"三天打鱼两天晒网",问这个人在以后的第N天中是"打鱼"还是"晒网&qu ...
- 三天打鱼两天晒网python程序设计_Python经常会遇到三天的笔试题:钓鱼和两天的晒网:,之,三天打鱼,两天晒网...
问题概述:中国有句俗语叫"三天打鱼两天晒网"某人从1990年1月1日起开始"三天打鱼两天晒网",问这个人在以后的某一天中是"打鱼"还是&qu ...
- C语言程序设计打鱼还是晒网,C语言编程三天打鱼两天晒网
满意答案 dmmk2822 2018.11.05 采纳率:46% 等级:6 已帮助:160人 中国有句俗语叫 "三天打鱼两天晒网 ".某人从 1990年 1月 1日起开始&q ...
- python天天向上的力量三天打鱼两天晒网_天天向上的力量
我前阵子三天打鱼两天晒网地学了一点Python,也就开个头的样子吧,然后就不想学了,一鼓作气再而衰三而竭了.我学到课程的第三个例子,老师给起的名字叫"天天向上的力量". 其实就是那 ...
- 实验3-9 三天打鱼两天晒网 (15 分)
实验3-9 三天打鱼两天晒网 (15 分) 中国有句俗语叫"三天打鱼两天晒网".假设某人从某天起,开始"三天打鱼两天晒网",问这个人在以后的第N天中是" ...
- 三天打鱼两天晒网--捕鱼小游戏
在B站学了好几天,终于搞通了,能跑了,捕鱼的小游戏~ 下面分步骤跟大家说说呗~~~ /*** Java中的窗体类:JFrame(游戏的支架)用来固定游戏界面* 自定义窗体的固定步骤:* 1.创建一个任 ...
- “三天打鱼两天晒网问题
中国有句俗语叫"三天打鱼两天晒网".某人从2010年1月1日起开始"三天打鱼两天晒网",问这个人在以后的某一天中是"打鱼"还是"晒 ...
最新文章
- jQuery实现用户注册的表单验证
- “十四五”要建设的「交通强国」,会让我们都坐上自动驾驶车么?
- php流媒体视频下载,如何使用PHP流媒体文件?
- SQL优化—— 大批量插入数据
- 解决软件安装中出现checking for FUSE... no方法一例
- DOS下查看局域网的ip使用情况,以及ip对应的主机名
- shell获取当前进程pid和上一个进程pid
- ASP.NET SignalR增加Azure支持
- http请求 url 竖线_http.createServer创建http服务
- 铁汁儿们,现在面试阿里巴巴必考K8S
- yum是什么?(linux命令)
- api hook 例子,截获封包(转载)
- mme设备内部错误_低压配电设备常见故障分析,处理办法介绍
- 数字电子技术基础笔记【阎石第六版】 第一章 数字与编码
- 【Mac】 自带的播放器quicktimeplayer 如何带声音2倍速播放
- linux 冒号命令,Linux命令之:(冒号)
- 书写NDIS过滤钩子驱动实现ip包过滤
- 【应急类漏洞】Linux下变种DDG挖矿病毒紧急通告及处置方法
- HDU 6638 Snowy Smile(线段树)
- Cibersort 算法 分析肿瘤样本免疫细胞组分
热门文章
- 硬盘知识大全(含主板、BIOS)
- R软件--GEO数据分析教程:差异性分析、富集分析(GO\KEGG\DO)
- toad连接数据库时报错 cannot load OCI DLL
- 阿里云模板建站好处(模板建站+定制建站)优惠购买指导
- ipqc的工作流程图_过程质量控制IPQC的介绍及流程
- C/C++——文字RPG游戏:MINERPG
- sipp 注册脚本测试服务端含(401)注册流程(UAC )
- MyBatis-Plus分页查询where后面的参数拼接错误报### The error occurred while setting parameters
- html5代码好学吗,0基础能学习Html5吗?Html5好学吗?
- Android 开发之Okhttp网络请求日志打印