You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 23:26:05