C语言,遍历万年历

目录

int getWeekdayByYearday(int iY, int iM, int iD)

功能:判断某天是周几

参数:年、月、日

返回值:0~6   周日-周6

int MyYear(int year, int month)

功能:判断某年某月有几天(需判断闰年,平年)

参数:年、月

返回值:天数 28 29 30 31

int MyOutPut(int year, int month)

功能:打印某年某月的万年历

参数:年、月

返回值:-1 传参错误,0打印成功

主函数main


int getWeekdayByYearday(int iY, int iM, int iD)

功能:判断某天是周几

参数:年、月、日

返回值:0~6   周日-周6

int getWeekdayByYearday(int iY, int iM, int iD)
{
    int iWeekDay = -1;
    if (1 == iM || 2 == iM) {
        iM += 12;
        iY--;
    }
    iWeekDay = (iD + 1 + 2 * iM + 3 * (iM + 1) / 5 + iY + iY / 4 - iY / 100 + iY / 400) % 7;

    return iWeekDay;
}

int MyYear(int year, int month)

功能:判断某年某月有几天(需判断闰年,平年)

参数:年、月

返回值:天数 28 29 30 31

int MyYear(int year, int month)
{
    int day = 0;
    switch (month) {
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
        day = 31;
        break;
    case 4:
    case 6:
    case 9:
    case 11:
        day = 30;
        break;
    case 2:
        if ((0 == year % 4 && 0 != year % 400) || 0 == year % 400) {
            day = 29;
        } else {
            day = 28;
        }
        break;
    }
    return day;
}

int MyOutPut(int year, int month)

功能:打印某年某月的万年历

参数:年、月

返回值:-1 传参错误,0打印成功

int MyOutPut(int year, int month)
{
    int day = 0;
    int week = 0;
    if (year <= 0 && (month <= 0) || month > 13) {
        printf("参数传递错误,请重新输入:");
        return -1;
    }
    day = MyYear(year, month);
    printf("[%d  %d]:\n", year, month);
    printf("Sun\tMon\tTue\tWed\tThu\tFri\tSat\n");
    for (int i = 1; i <= day; i++) {
        week = getWeekdayByYearday(year, month, i);
        if (1 == i) {
            switch (week) {
            case 0:
                printf("%-2d\t", i);
                break;
            case 1:
                printf("\t%-2d\t", i);
                break;
            case 2:
                printf("\t\t%-2d\t", i);
                break;
            case 3:
                printf("\t\t\t%-2d\t", i);
                break;
            case 4:
                printf("\t\t\t\t%-2d\t", i);
                break;
            case 5:
                printf("\t\t\t\t\t%-2d\t", i);
                break;
            case 6:
                printf("\t\t\t\t\t\t%-2d\n", i);
                break;
            }
        } else {
            switch (week) {
            case 0:

            case 1:

            case 2:

            case 3:

            case 4:

            case 5:
                printf("%-2d\t", i);
                break;
            case 6:
                printf("%-2d\n", i);
                break;
            }
        }
    }
    printf("\n\n");

    return 0;
}

主函数main

int main(int argc, char const* argv[])
{
    printf("********************************\n");
    printf("*****按year输出万年历*************\n");
    printf("*****按month输出万年历************\n");
    printf("********************************\n");
    printf("point '1.year' or '2.month':");
    int choose = 0;
    int year = 0;
    int month = 0;
    int day = 0;
rester1:
    scanf("%d", &choose);
    if (1 != choose && 2 != choose) {
        printf("输出错误!请重新输出 1 or 2:");
        goto rester1;
    }

    if (1 == choose) {
    rester2:
        printf("请输出具体的年份,如2019:");
        scanf("%d", &year);
        if (year <= 0) {
            printf("输出错误!请重新输入年份year>0:");
            goto rester2;
        }
        for (int i = 1; i <= 12; i++) {
            day = MyOutPut(year, i);
        }
    }
    if (2 == choose) {
        printf("请输出具体的年份,月份,如2019 10:");
        scanf("%d%d", &year, &month);
        if (year <= 0) {
            printf("输出错误!请重新输入年份year>0,month>0且month<13:");
            goto rester2;
        }
        day = MyOutPut(year, month);
    }

    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值