C++编程作业求助:实现日期输入、累计天数计算与闰年判断
C++日期累计天数计算程序问题修复与优化
需要实现的功能:
- 接收用户输入的月份、日期、年份
- 计算该日期在当年的累计天数
- 判断输入年份是否为闰年
- 示例输入
10 12 2000,需输出累计天数286(2000年为闰年)
原代码存在多处语法与逻辑错误,同时使用数组(而非char类型)会大幅简化代码,以下是问题分析与修复方案:
原代码的核心问题
- 错误的输入操作:switch分支中错误使用
cin >>,实际应为对累计天数的赋值计算,而非再次读取输入 - 赋值运算符误用:使用
==(比较运算符)替代=(赋值运算符),导致变量未正确更新 - 闰年判断语法错误:逻辑表达式括号不完整,正确的闰年判断逻辑需用括号包裹整个条件
- switch分支贯穿:
case 9缺少break语句,会导致执行完case9后直接进入case10 - 累计天数计算错误:各case中的月份天数累加值错误(如case3错误累加31+30,实际应为1月+2月的天数)
- 未输出目标结果:原代码仅输出输入的月日年,未输出累计天数和闰年判断结果
优化后的代码(使用数组简化逻辑)
使用数组存储平年各月的天数,再根据闰年调整2月天数,遍历计算累计天数,代码更简洁易维护:
#include <iostream> using namespace std; int main() { int month, day, year; cout << "输入月份(1-12): "; cin >> month; cout << "输入日期: "; cin >> day; cout << "输入年份: "; cin >> year; // 平年各月天数 int month_days[] = {31,28,31,30,31,30,31,31,30,31,30,31}; int total_days = day; // 判断闰年 bool is_leap = false; if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) { is_leap = true; month_days[1] = 29; // 闰年2月改为29天 } // 累加前month-1个月的天数 for (int i = 0; i < month - 1; ++i) { total_days += month_days[i]; } // 输出结果 cout << "累计天数: " << total_days << endl; cout << year << "年" << (is_leap ? "是" : "不是") << "闰年" << endl; return 0; }
代码说明
- 用数组
month_days存储平年各月天数,避免了冗长的switch分支 - 闰年判断逻辑:能被4整除但不能被100整除,或能被400整除的年份为闰年
- 通过循环累加目标月份之前所有月份的天数,加上当月日期得到累计天数
- 清晰输出累计天数和闰年判断结果,符合需求
内容的提问来源于stack exchange,提问作者IDE002
相关产品推荐
相关产品推荐

