三天打渔两天晒网

(ps:虽然错别字,还理解有问题。可能我傻吧。。。反正跟着前人的步伐就好)在这里插入图片描述

一、题目名称:“三天打渔两天晒网”
二、题目内容:中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用C或C++语言/java/python实现程序解决问题。
三、算法设计:
1.输入当前日期的年、月、日。
2.检验当前日期是否合法。
3.从2010年开始遍历
3.1若当前年份小于输入年份
3.1.1若当前年份为闰年,则总天数累加366
3.1.2若当前年份不是闰年,则总天数累加365
3.2遍历年份+1
4.计算输入的月份之前每个月的天数,并累加到总天数中
5.将输入的日期累加到总天数中
6.将总天数对5取模,得到余数
7.若余数为1、2、3时,则当天打鱼,否则为晒网。
在这里插入图片描述
图 1 算法流程图
四、调试截图:
1.调试输入部分,确保程序能由接收到输入。

图 2 调试“输入”
2.调试计算天数的部分,验证间隔天数是否正确。

图 3 调试“计算总天数”

图 4 调试“判断结果”

图 5 调试“读取in.dat文件”

图 6 调试“文件写入”

图 7 调试“日期合法检查”
五、测试结果:
1.结果测试
2.日期合法性测试
附代码
#include
#include
using namespace std;
class Time
{
public:
int year;
int month;
int day;
};
int main()
{
Time time;
char ch[500];
FILE *fpi = fopen( “in.txt”, “w” ), *fpo = fopen( “out.txt”, “w” ); // 创建in.txt, out.txt文件并打开
int days[12]={31,0,31,30,31,30,31,31,30,31,30,31};
int sum=0;
cout << “请输入年月日” << endl;
cin >>time.year >>time.month >>time.day;
sprintf ( ch, “%d %d %d\n”, time.year, time.month, time.day ); // 将int型日期转换为字符型,以便写入文件
fprintf ( fpi, ch ); // 向文件中写入字符型日期
if( time.year < 2010 || time.month > 12 ) // 判断输入日期是否符合实际
{
cout << “日期输入错误!”;
fprintf ( fpo, “日期输入错误!” );
return 0;
}
if(( time.year%4 == 0 && time.year%100 != 0 ) || time.year%400 == 0 ) // 根据闰年平年给2月赋值
days[1]=29;
else
days[1]=28;
for( int i=0; i<12; i++ ) // 判断日期是否符合要求
if( time.month == i+1 && time.day > days[i] )
{
cout<<“日期输入错误!”;
fprintf(fpo,“日期输入错误!”);
return 0;
}
for( int i=2010; i<time.year; i++) // 计算时间
if (( time.year%4 == 0 && time.year%100 != 0 ) || time.year%400 == 0 )
sum+=366;
else
sum+=365;
for( int i = 1; i < time.month; i++)
sum += days[i];
sum += time.day;
if ( sum%5 >= 1 && sum % 5 < 4 ) // 根据除以5取余,判断输出
{
cout << “打鱼!”;
fprintf ( fpo, “打鱼!” ); // 结果写入out.txt文件中
}
else
{
cout << “晒网!”;
fprintf ( fpo, “晒网!” );
}
fclose ( fpo );
fclose ( fpi );
return 0;
}
最后,感谢CSDN的各位大牛的文章!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值