三天打鱼两天晒网C++实现

问题描述
中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用C或C++语言实现程序解决问题。
基本要求:1.程序风格良好(使用自定义注释模板),提供友好的输入输出。
提高要求:1.输入数据的正确性验证。
2.使用文件进行数据测试。如将日期 20100101 20111214 等数据保存在in.txt文件中,程序读入in.dat文件进行判定,并将结果输出至out.txt文件。
问题分析
)计算从2010年1月1日开始至指定日期共有多少天;
2)由于“打鱼”和“晒网”的周期为5天,所以将计算出的天数用5去除取余;
3)根据余数判断他是在“打鱼”还是在“晒网”;
若 余数为1,2,3,则他是在“打鱼”
否则 是在“晒网” 。
程序设计
创建一个date类,包含年月日。创建一个distance函数用于计算指定日期到2010年1月1日的天数。创建一个一个方法meath用于判断打鱼或者晒网。创建一个数据读取read函数用于把读取数据存入到磁盘钟,。创建一个文件写入函数write用于把文件数据读入数组中。创建一个text函数用于判断函数英语判断输入数据是否有误,在write函数中调用text函数用于判断输入。主函数调用write函数读数据,read函数写数据,把读取数据一一放入distance函数求天数,其返回值传入meath函数中判断打鱼或者晒网并输出并保存。

程序框架

#include<iostream>
#include<fstream>
using namespace std;
class date {//创建一个日期类
public:int year;int month;int day;date(int a, int b, int c) {//构造函数year = a;month = b;day = c;}date();
};
//定义一个distance函数用于计算从2010年1月1日起至今的天数
int  distance(date d1, date d2) {int y = d2.year - d1.year;//从2110年到今年的年数int dis = 0;//用于记录天数int year = d2.year - 1;int day_tab[2][13] = { {0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31} };//二维数组储存闰年和平年每月的天数for (int i = 1; i <= y; i++) {//计算2010年1月1日起到今年的前一年天数year = year - 1;if (((year) % 4 == 0 && (year) % 100 != 0) || year % 400 == 0)//判断是否闰年dis = dis + 366;//闰年加366天elsedis = dis + 365;//平年加365天}//计算截止这个月前的天数总和if (d2.year % 4 == 0 && d2.year % 100 != 0 || d2.year % 400 == 0) {//判断是否闰年for (int i = 1; i < d2.month; i++) {//闰年二月加29天dis = dis + day_tab[1][i];}}else//不是闰年二月加28天{for (int i = 1; i < d2.month; i++) {//平年二月加28天dis = dis + day_tab[0][i];}}dis = dis + d2.day;return dis;//返回天数
}
//函数meath用于判断是否打鱼或者晒网
void meath(long int dis) {int n = dis % 5;if (n == 1 || n == 2 || n == 3)cout << "今天在打鱼!" << endl;elsecout << "今天在晒网!" << endl;
}
//测试函数用于判断输入数据的正确性
int  text(int d) {int year = d / 10000;int month = d % 10000 / 100;int day = d % 100;if (year < 2010) {cout << "数据输入年份出错,请重新输入数据" << endl;return 1;}if (0 > month || month > 12) {//判断月份cout << "数据输入月份出错,请重新输入数据" << endl;return 1;}if (month == 2) {//判断是否闰年if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {if (day > 29) {//闰年二月小于29天cout << "数据输入天数出错,请重新输入数据" << endl;return 1;}}else {//平年二月小于28天if (day > 28) {cout << "数据输入天数出错,请重新输入数据" << endl;return 1;}}}if(month == 4 || month == 6 || month == 9 || month == 11){//判断天数if (day > 30) {cout << "数据输入天数出错,请重新输入数据" << endl;return 1;}}else {if (day > 31) {//判断天数cout << "数据输入天数出错,请重新输入数据" << endl;return 1;}}return 0;
}
//创建一个write函数用于文件的写入
void write(int d[], int n) {ofstream outfile("D:f2.txt", ios::out);//打开文件流if (!outfile) {cerr << "open error !" << endl;exit(1);}cout << "请输入要查询的日期,并自动存入磁盘f2中:" << endl;for (int i = 0; i < n; i++) {//读取数据并判断cin >> d[i];//读取数据int f=text(d[i]);if (f) {//数据输入错误从新输入i--;continue;}outfile << d[i] << " ";//输出磁盘中的数据}outfile.close();//关闭文件
}
//创建read函数用于读取磁盘中的数据
void read(int d[], int n) {int i = 0;ifstream infile("D:f2.txt", ios::in);if (!infile) {cerr << "open error!" << endl;exit(1);}cout << endl;cout << "磁盘f2.txt中的数据为:" << endl;for (int i = 0; i < n; i++) {infile >> d[i];cout << d[i] << " ";}cout << endl;cout << endl;infile.close();
}int  main() {int distance(date, date);int i = 0;int n;//记录输入输个数int dis;//记录天数date start(2010, 1, 1);cout<<"请输入要保存数据的个数"<<endl;cin >> n;int *d = new int[n];//创建数组用于存放从磁盘中读取的数据date today(2012, 2, 6);write(d,n);//储存数据read(d,n);//读取数据cout << "判断结果为:" << endl;for (int i = 0; i < n; i++) {today.year = d[i] / 10000;//分割数据yeartoday.month = d[i] % 10000 / 100;//分割数据monthtoday.day = d[i] % 100;//分割数据daycout << d[i]<<" ";dis = distance(start, today);//判断是否闰年meath(dis);//判断今天是大于或者晒网}return 0;}

调试截图

测试截图

心得体会
在计算从开始日期到指定日期的天数时,可以先计算中间间隔多少年,然后在判断每一年是否是闰年,把每年的天数相加,在计算指定天数到1月的月数,如果指定月数等于二月则判断是否闰年,把天数放入二维数组里面,一组下标代表闰年,一组代表平年,循环相加的月份天数,最后再加剩下的天数。步骤:(1)判读是否闰年,(2)计算间隔年数的天数总和,(3)计算今年间隔月数的天数总和,(4)计算间隔天数总和。## 标题

三天打鱼两天晒网C++实现相关推荐

  1. 分支-03. 三天打鱼两天晒网(Switch…case)

    中国有句俗语叫"三天打鱼两天晒网".假设某人从某天起,开始"三天打鱼两天晒网",问这个人在以后的第N天中是"打鱼"还是"晒网&qu ...

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

    已经实现的功能: 从键盘输入指定的年.月.日: 计算从2010年1月1日至指定日期共有多少天: 由于"打鱼"和"晒网"的周期为5天,所以将计算出的天数用5去除. ...

  3. python天天向上的力量三天打鱼两天晒网_017 示例3-天天向上的力量-Go语言中文社区...

    一."天天向上的力量"问题分析 1.1 天天向上的力量 基本问题:持续的价值 一年365天,每天进步1%,累计进步多少呢? (1.01^{365}) 一年365天,每天退步1%,累 ...

  4. 三天打鱼两天晒网 (15 分)

    中国有句俗语叫"三天打鱼两天晒网".假设某人从某天起,开始"三天打鱼两天晒网",问这个人在以后的第N天中是"打鱼"还是"晒网&qu ...

  5. 三天打鱼两天晒网python程序设计_Python经常会遇到三天的笔试题:钓鱼和两天的晒网:,之,三天打鱼,两天晒网...

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

  6. C语言程序设计打鱼还是晒网,C语言编程三天打鱼两天晒网

    满意答案 dmmk2822 2018.11.05 采纳率:46%    等级:6 已帮助:160人 中国有句俗语叫 "三天打鱼两天晒网 ".某人从 1990年 1月 1日起开始&q ...

  7. python天天向上的力量三天打鱼两天晒网_天天向上的力量

    我前阵子三天打鱼两天晒网地学了一点Python,也就开个头的样子吧,然后就不想学了,一鼓作气再而衰三而竭了.我学到课程的第三个例子,老师给起的名字叫"天天向上的力量". 其实就是那 ...

  8. 实验3-9 三天打鱼两天晒网 (15 分)

    实验3-9 三天打鱼两天晒网 (15 分) 中国有句俗语叫"三天打鱼两天晒网".假设某人从某天起,开始"三天打鱼两天晒网",问这个人在以后的第N天中是" ...

  9. 三天打鱼两天晒网--捕鱼小游戏

    在B站学了好几天,终于搞通了,能跑了,捕鱼的小游戏~ 下面分步骤跟大家说说呗~~~ /*** Java中的窗体类:JFrame(游戏的支架)用来固定游戏界面* 自定义窗体的固定步骤:* 1.创建一个任 ...

  10. “三天打鱼两天晒网问题

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

最新文章

  1. mysql 执行cmd,mysql命令行中执行sql的几种方式总结
  2. Linux Kernel TCP/IP Stack — L2 Layer — Linux VLAN device for 802.1.q(虚拟局域网)
  3. 解决ScrollView与ViewPage滑动冲突的问题
  4. 阿里云分布式容器平台即将全面启动公测
  5. 安装 | Windows 10下基于Anaconda的TensorFlow详细安装步骤(续)——Pycharm运行tensorflow
  6. python插件使用教程_Python常用扩展插件使用教程解析
  7. linux nodejs 采集器,Linux记录-jstack采集namenode gc信息
  8. 手机计算机数字显示在桌面上,手机计算器有哪些使用方法
  9. C#单例模式的简单使用
  10. 虚拟资源拳王公社:最适合上班没时间的副业赚钱项目是什么,简单易操作的副业项目
  11. C++读写注册表的问题
  12. C# .Net中的类型转换(3)
  13. es5中数组方法unshift、splice、reduce使用
  14. 亚马逊自动化仓库事故,机器人失手戳破有毒喷雾,24名工人被送医院
  15. PCB设计常见的有那些问题
  16. fpga烧写bin文件_FPGA烧写的方式和具体过程分析
  17. Linux下SVN客户端使用教程(全)
  18. 塔米狗分享|2022年企业并购创新的融资方式有哪些
  19. 用 Python 创建属于自己的网易云音乐
  20. jQuery与JS实现AJAX实例!(附AJAX教程、路线图)

热门文章

  1. java中PreparedStatement和Statement详细讲解
  2. php不显示css样式,thinkphp加载不了css样式怎么解决
  3. 百度竞价账户层级及基本设置
  4. 基于JSP的在线调查问卷系统
  5. 循环链表——约瑟夫环
  6. Android中使用CoAP协议
  7. iOS-CocoaPods
  8. JSP与数据库的连接方法
  9. Micro Python———MPU6050六轴传感器
  10. 统计学系列:统计、数据与思想