打卡C语言程序设计Day16 万年历

 题目

       使用函数方法编写程序,要求当用户输入年份时能输出该年的日历,在日历上能够看出某天是星期几,可以显示任意一年任意一天,并能够知道是否是闰年的。

#include 
int isLeapYear(int year) 
{
    if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) 
    {
        return 1;
    }
    else 
    {
        return 0;
    }
}
int getDaysInYear(int year) 
{
    return isLeapYear(year) ? 366 : 365;
}
int getDaysInMonth(int month, int year) 
{
    int days[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    if (month == 2 && isLeapYear(year))
    {
        return 29;
    }
    return days[month - 1];
}
int getDayOfWeek(int day, int month, int year)
{
    if (month < 3) 
    {
        month += 12;
        year--;
    }
    int h = (day + 2 * month + 3 * (month + 1) / 5 + year + year / 4 - year / 100 + year / 400) % 7;
    return h;
}
void printCalendar(int year, int day)
{
    printf("      %d年\n", year);
    printf("日 一 二 三 四 五 六\n");
    int startDay = getDayOfWeek(1, 1, year);
    int daysInYear = getDaysInYear(year);
    int i;
    for (i = 0; i < startDay; i++) 
    {
        printf("   ");
    }
    for (i = 1; i <= daysInYear; i++) 
    {
        printf("%2d ", i);
        if ((i + startDay) % 7 == 0) 
        {
            printf("\n");
        }
    }
    printf("\n\n");
}
int main()
{
    int year, day;
    printf("请输入年份:");
    scanf_s("%d", &year);
    printf("请输入日期(1-31):");
    scanf_s("%d", &day);
    printCalendar(year, day);
    return 0;
}

你可能感兴趣的:(算法,数据结构)