2401_87809623 2024-11-03 23:36 采纳率: 62.5%
浏览 3
已结题

闰年问题和天数问题第几天

输入年月日,从1月一号开始,输入该日期对应的年份所在年份的第几天,也需考虑闰年问题

  • 写回答

2条回答 默认 最新

  • 香格里辣 2024-11-03 23:37
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    在C语言中解决闰年问题和日期问题,你需要创建一个程序,能够根据输入的年份和日期(月、日)计算出该日期是这一年的第几天。这里有一个基本的示例程序来实现这个功能。请注意,这个程序假设输入的数据是合法的(即年份存在,月份在1到12之间,日期在该月的合理范围内)。如果需要处理非法输入的情况,还需要添加额外的错误检查代码。

    以下是完成此任务的C语言代码示例:

    #include <stdio.h>
    
    // 判断是否为闰年的函数
    int isLeapYear(int year) {
        if (year % 4 != 0) return 0; // 不是4的倍数则不是闰年
        else if (year % 100 != 0) return 1; // 是4的倍数且不是100的倍数则是闰年
        else if (year % 400 != 0) return 0; // 是4的倍数且是100的倍数但不是400的倍数则不是闰年
        else return 1; // 是400的倍数是闰年
    }
    
    // 计算给定日期是一年中的第几天
    int dayOfYear(int year, int month, int day) {
        int daysInMonth[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 平年的月份天数数组
        int index = 0; // 用于遍历数组的下标,默认从一月开始计数(下标为0)
        int totalDays = day; // 总天数从输入的日期开始计算
        // 如果当前年份是闰年,二月应增加一天
        if (isLeapYear(year)) {
            daysInMonth[1] = 29; // 修改二月的天数以适应闰年
        }
        // 计算当前日期之前月份的天数和(包括当前月的天数)
        for (index = 0; index < month - 1; ++index) { // 从一月开始累加至输入月份的前一个月为止
            totalDays += daysInMonth[index]; // 将之前月份的天数累加到总天数上
        }
        return totalDays; // 返回总天数作为结果
    }
    
    int main() {
        int year, month, day; // 用户输入的年月日变量
        printf("请输入年份、月份和日期(格式:YYYY MM DD):"); // 提示用户输入年份和日期信息
        scanf("%d %d %d", &year, &month, &day); // 从标准输入读取年份、月份和日期信息
        // 检查输入的月份是否合法(在有效范围内)和日期是否合法(符合该月的日历规则)这里省略了检查代码。
        // 计算并输出这一天是该年的第几天。假设用户输入的数据是合法的。
        printf("这一天是该年的第%d天。\n", dayOfYear(year, month, day)); // 输出结果到控制台
        return 0; // 程序结束返回状态码(通常返回值为零表示程序正常结束)
    }
    

    注意:上述代码中没有处理非法日期的输入检查(例如,二月有30天或四月有31天等),在实际应用中需要添加相应的错误处理逻辑。此外,为了代码的简洁性,一些细节可能未被考虑,比如输入格式检查等。在实际应用中还需要根据具体需求对代码进行相应的调整和优化。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月17日
  • 已采纳回答 12月9日
  • 创建了问题 11月3日