中国有句俗语叫:“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打渔”还是“晒网”。用c++实现程序解决问题。
基本要求:1.程序风格良好,提供友好的输入输出。
提高要求:1.输入数据的正确性验证;
2.使用文件进行数据测试。如将日期20100101 20111214等数据保存在in.txt文件中,并将结果输出至out.txt文件。
思路提示:
****问题分析与算法设计
1)计算从2010年01月1日开始至指定日期共,有多少天;
2)由于“打渔”和“晒网”的周期为5天,所以将计算出的天数用5去除;
3)根据余数判断他是在“打渔”还是“晒网”;
若余数是1,2,3,则他是在“打鱼”
否则是在“晒网”
在这三步中,关键是第一步。求从2010年1月1日至指定日期有多少天,要判断经历年份中。是否有闰年,二月为29天,平年为28天。闰年的方法可以用伪语句描述如下:
如果((年能被4除尽且不能被100除尽)或能被400除尽)
则该年是闰年;
否则不是闰年。
源代码如下:
//Dreamer 张
//2019-3-1
#include<iostream>
#include<fstream>
using namespace std;
struct date{
int year; //定义年份
int month; //定义月份
int day; //定义日期
};
int main()
{
int year,month,day,y,m,days;
int num[13]=0,31,28,31,30,31,30,31,31,30,31,30,31}; //平年每月的天数
ifstream infile("in.txt"); //定义输入流文件对象infile,以输入方式打开磁盘文件in.txt
infile>>year>>month>>day;
cout<<"请输入日期:";
if(!infile)
{
cerr<<"open in.txt error!"<<endl;
exit(1);
}
ofstream outfile("out.txt"); //定义输出文件流outfile,以输出方式打开磁盘文件out.file
if(!outfile)
{
cerr<<"open out.txt error!"<<endl;
exit(1);
}
if(year%400==0||(year%4==0&&year%100!=0)) //判断输入的年份是否为闰年,若是,则二月为29天
{
num[2]+=1;
for(y=2010;y<year;y++)
{
if(y%400==0||(y%4==0&&y%100!=0)) //判断从2010年起的每一年是否为闰年
days+=366; //若是,总天数为366天
else
days+=365; //否则,总天数为365天
}
for(m=1;m<month;m++) //计算某年的从一月份起输入月份的天数
{
days+=mun[m];
}
days+=day; //计算总天数
cout<<"从2010年1月1日起到“<<year<<"年"<<month<<"月"<<day<<"日"<<endl;
outfile<<"从2010年1月1日起到"<<year<<"年"<<month<<"月"<<day<<"日"<<endl;
cout<<"共经过了"<<days<<"天"<<endl;
outfile<<"共经过了"<<days<<"天'<<endl;
if(days%5==1||days%5==2||days%5==3) //用总天数除以5,若余数为1,2,3,则为打鱼,否则为晒网
{
cout<<"他在打鱼"<<endl;
outfile<<"他在打鱼"<<endl;
}
else
{
cout<<"他在晒网"<<endl;
outfile<<"他在晒网"<<endl;
}
return 0;
}
小结:在写程序过程中,一开始文件中的数据读不出来,又或者读出来的数据溢出。后来在同学的帮助下找到了问题所在,解决了问题。希望自己还能够在此基础上不断提升。
程序不尽完善,希望提出宝贵意见。
三天打鱼两天晒网
最新推荐文章于 2023-04-26 08:45:00 发布