C语言实现:判断‘三天打鱼两天晒网’的日期

需积分: 9 5 下载量 90 浏览量 更新于2024-11-21 收藏 13KB TXT 举报
"C程序设计经典设计2" 本资源是一个关于C语言编程的实例,旨在解决一个有趣的日期问题,即“三天打鱼两天晒网”的周期性问题。问题描述了一个从1990年1月1日开始的人,按照“三天打鱼两天晒网”的规律生活,需要计算在未来的某一天这个人是在“打鱼”还是“晒网”。下面将详细解释这个问题的解决步骤和C语言实现的关键点。 1. **日期计算**:首先,我们需要计算从1990年1月1日到给定日期的总天数。这涉及到对每个月天数的处理,特别是要考虑闰年的情况。闰年的判断规则是:年份能被4整除但不能被100整除,或者能被400整除的年份是闰年。在C语言中,我们可以使用条件表达式和求余运算符(%)来实现这一逻辑。 2. **周期处理**:计算出总天数后,我们将这个数值除以5,因为“打鱼”和“晒网”的周期是5天。使用取模运算符(%)获取余数,如果余数是1、2或3,那么表示这一天他在“打鱼”,否则就是在“晒网”。 3. **程序实现**:给出的C代码包含一个主函数(`main()`)和一个辅助函数(`days()`)。主函数负责接收用户输入的日期,并调用`days()`函数计算指定日期前的总天数。`days()`函数通过一个静态数组`day_tab`存储不同月份的天数,根据闰年条件动态调整2月的天数。然后,对于给定的日期,累加所有月份的天数得到总天数。 4. **输入输出**:程序提示用户输入年/月/日,然后输出结果。如果余数在1到3之间,程序打印“hewasfishingatthatday.”(他在那天打鱼),否则打印“Hewassleepingatthatday.”(他在那天晒网)。 5. **优化点**:为了简化代码,可以考虑使用C库中的日期处理函数,如`mktime()`和`difftime()`,但这可能使得问题的解析稍复杂,不适合初学者。在给定的实现中,手动计算日期天数和闰年判断更具教学价值。 这个程序实例展示了如何在C语言中处理日期计算,以及如何用结构体(`struct date`)存储日期,同时涉及了条件语句、循环和数组等基本语法。这是一个很好的学习C语言和日期处理的实践案例。