题目
中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用C或C++语言/java/python实现程序解决问题。
基本要求:1.程序风格良好(使用自定义注释模板),提供友好的输入输出。
提高要求:1.输入数据的正确性验证。
2.使用文件进行数据测试。如将日期 20100101 20111214 等数据保存在in.txt文件中,程序读入in.dat文件进行判定,并将结果输出至out.txt文件。
程序思路
1、首先输入数据(年、月、日),判断其是否有误,若year<2010 or month<1 or month>12 or day<1 or day>31,则输入数据有误,反之,则正确;
2、判断从指定年到输入的年间的每一年是平年还是闰年, 闰年的判断条件是可被4整除且不能被100整除或整百的年数必须可以被400整除,即((i%4==0)&&(i%100!=0))||(i%400==0));
3.计算从指定年到输入年份前的总天数,从指定年到输入的年间的某一年若为平年,则totaldays=totaldays+365;若为闰年,则totaldays=totaldays+366;
4、计算从1月到输入月份前的总天数,还需判断是平年还是闰年,若为平年,则二月份为28天;若为闰年,则二月份为29天;
5、计算从1日到输入日期的总天数,即totaldays=totaldays+day;
6、因为打渔晒网的周期是5天,将总天数%5,若余数为1、2、3,则该同学是在打鱼;若余数为0,4,则该同学是在晒网。
流程图

代码
//title:三天打鱼两天晒网
//author:Qiu
//time:2019/03/02
#include <iostream>
using namespace std;
class date
{ private:
int year;
int month;
int day;
int totaldays;
public:
input();
judge();
total();
};
//输入数据(年月日)
int date::input()
{
cout<<"请输入数据:"<<endl;
cin>>year;
cin>>month;
cin>>day;
}
int date::judge()
{
if(year<2010)//判断输入的年份是否正确
cout<<"wrong,请重新输入数据"<<endl;
if((month<1)||(month>12))//判断输入的月份是否正确
cout<<"wrong,请重新输入数据"<<endl;
if((day<1)||(day>31))//判断输入的日期是否正确
cout<<"wrong,请重新输入数据"<<endl;
}
//计算总天数,并且判断该同学是打渔还是晒网
int date::total()
{ int i,totaldays=0;
int pingnian[12] = {31,28,31,30,31,30,31,31,30,31,30,31};//平年每一个月的天数
int runnian[12] = {31,29,31,30,31,30,31,31,30,31,30,31};//闰年每一个月的天数
for(i=2010;i<year;i++)
{ if(((i%4==0)&&(i%100!=0))||(i%400==0))//根据余数判断该年是平年还是闰年
totaldays+=366;
else
totaldays+=365;
}
for(i=1;i<month;i++)
{if(((i%4==0)&&(i%100!=0))||(i%400==0)) //根据余数判断该年是平年还是闰年
totaldays+=runnian[i-1];
else
totaldays+=pingnian[i-1];
}
totaldays+=day;
cout<<totaldays<<endl;
if(totaldays%5==1||totaldays%5==2||totaldays%5==3)//判断该同学是打鱼还是晒网
cout<<"该同学在打鱼"<<endl;
else if(totaldays%5==0||totaldays%5==4)
cout<<"该同学在晒网"<<endl;
}
int main()
{ date d;
d.input();
d.judge();
d.total();
return 0;
}
心得
1、该程序还存在许多待完善的地方,例如输入错误的日期会判断出错误,但是还是会接着判断该同学是在打渔还是在晒网,这些地方希望自己能在以后慢慢改善;
2、昨天还看着书试着写了文件的输入与输出,结果以失败告终,希望自己能快点学会如何编写文件的输入与输出部分的代码;
3、以前写代码都懒得写注释,这次写了注释,突然发现写注释还是必要的,若是以后写更长的程序,注释可以帮助我们不忘记代码的作用;
4、学会了用visio画流程图。
这篇博客介绍了一个C++程序,用于判断从2010年1月1日开始的某一天是'打鱼'还是'晒网'。程序首先验证输入的日期是否正确,然后计算到指定日期的总天数,基于5天一周期的规则确定当天活动。同时,作者提到程序有待改进的地方,如错误处理和文件输入输出功能的学习,并认识到编写注释的重要性。
7669

被折叠的 条评论
为什么被折叠?



