问一道基础题做个日历表。。。

要使用基础函数 do-while和 switch-case函数图片说明

谢谢!

#include<stdio.h>

#define bool int//自定义bool类型
#define true 1
#define false 0

bool IsLeap(int year);
int GetWeek(int year,int month);
void main()
{
    int y,m,week,i;
    printf("输入yyyy-mm:");
    scanf("%d%d",&y,&m);
    printf("      %d年%d月\n",y,m);
    printf("=====================\n");
    printf(" 一 二 三 四 五 六 日\n");
    week = GetWeek(y,m);
    if(week == 0)
        week = 7;                                   //若week == 0,将其视作7,以便留下足够的空格

    for (i = 1;i < week; i++)
    {
        printf("   ");                              //三个字符为一个单位,保证第一行与周数对应
    }
    int month[12] = {31,28,31,30,31,30,31,31,30,31,30,31};//以数组方式统计每个月的天数
    if (IsLeap(y) == true)                          //若为闰年,将2月份的天数修改为29
        month[1] = 29;
    for(i=1;i<=month[m-1];i++)                      //利用for循环,依次输出日数,并且若加上通过计算week+i-1%7来判断是否该换行
    {
        printf("%3d",i);
        if((i+week-1) % 7 == 0)                     
            printf("\n");
    }
    printf("\n=====================\n");
}

bool IsLeap(int year)
{
    if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))//判断是否为闰年的条件
        return true;
    else
        return false;
}

int GetWeek(int year,int month)
{
    int m[12] = {31,28,31,30,31,30,31,31,30,31,30,31};          //以数组记录每个月的天数
    int day=0,week,i;
    switch (month)
    {
        case 1:
            day = 1;
            break;
        case 2:
            day = m[0] + 1;
            break;
        case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12:
            if (IsLeap(year) == true)
                m[1] = 29;
            for (i=0;i<month-1;i++)
            {
                day = day + m[i];
            }
            day = day + 1;
            break;

    }
    week = ((year-1) + (year-1)/4 - (year-1)/100 + (year-1)/400 + day) % 7;
    return week;
}

https://blog.csdn.net/ggjustnow/article/details/79310797