题目要求
中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用C或C++语言实现程序解决问题。
基本要求:1.程序风格良好(使用自定义注释模板),提供友好的输入输出。
提高要求:1.输入数据的正确性验证。
2.使用文件进行数据测试。如将日期 20100101 20111214 等数据保存在in.txt文件中,程序读入in.dat文件进行判定,并将结果输出至out.txt文件。
步骤
算法设计
(1)输入一个日期
(2)判断日期是否合法(如平年的2月29日,月份大于12,日期大于31,年份小于2010都为不合法日期)。
(3)判断是否为闰年。
(4)计算从2010年1月1日起到输入年份的1月1日共有多少天。从2010年开始,进入for循环,计算其中每一年是否为闰年,若为闰年在总天数上加366,若非闰年,在总天数上加365,直至跳出循环。
(5)计算从输入年份的1月1日起,至输入日期共有多少天。首先区分大月和小月,以及平年二月有28天,闰年二月有29天,从1月开始进入循环,使总日期累加直至跳出循环。最后再加上日期数,记为总天数。
(6)判断该天打渔还是晒网。将总天数对5取余,若余数为0或4,得到该天晒网,若得到1,2,3则该天打渔。
概要设计
程序流程图如图2-2-1所示。
测试
(1)输入4000年2月29日时,输出这天在打渔!
(2)输入2021年2月29日,因为2021年为平年,所以输出此年2月没有29天。
(3)输入2008年3月4日,因为从2010年1月1日起,所以输出您输入的日期有误。
调试
输入日期为2013年3月3日,如图2-4-1所示。
未进入循环sumyear为0,如图2-4-2所示。