C学习示例100之四

输入某年某月某日,判断这一天是这一年的第几天?

#include <stdio.h>

int dayOfYear(int year, int month, int day);
int main(void)
{
    int year, month, day;
    printf("本程序用于判断你输入的日期是本年度的第几天,\n请输入你要查询的年月日,格式为2025 6 3:");
    scanf("%d %d %d", &year, &month, &day);
    dayOfYear(year, month, day);
    return 0;
}

int dayOfYear(int year, int month, int day)
{
    int sum = 0;
    int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
    {
        days[1] = 29;
    }
    if (month < 1 || month > 12 || day < 1 || day > days[month - 1])
    {
        printf("输入不合法,月分不能大于12,平年2月不能大于28日,闰年2月不能大于29日。\n");
    }
    else
    {
        for (int i = 0; i < month - 1; i++)
        {
            sum += days[i];
        }
        printf("%d年%d月%d日是这一年的第%d天。\n", year, month, day, sum + day);
    }
    return 0;
}

该示例中,将一年每月的天数固定存储在一个数组中,然后判断输入的年份是否为闰年,如果是闰年则修改数组中2月为29天,否则直接计算天数。

判断是否闰年的方法:能被4整除,且不能被100整除,或者能被400整除的年份均为闰年。

该程序针对输入错误还有改进空间,如,可以判断输入的是月份错误还是日期错误,分别给予错误提示。

发表评论