C语言任意年月日历输出

写在前面:这里是小王成长日志,一名在校大学生,想在学习之余将自己的学习笔记分享出来,记录自己的成长轨迹,帮助可能需要的人。欢迎关注与留言。

题目:

题目链接:https://www.dotcpp.com/oj/problem1493.html

题目 1493: [蓝桥杯][算法提高VIP]任意年月日历输出

时间限制: 1Sec 内存限制: 128MB 提交: 919 解决: 285

题目描述
已知2007年1月1日为星期一。
设计一函数按照下述格式打印2007年以后(含)某年某月的日历,2007年以前的拒绝打印。
为完成此函数,设计必要的辅助函数可能也是必要的。其中输入为年分和月份。

注意:短线“-”个数要与题目中一致,否则系统会判为错误。

输入
年月和月份
输出

样例输入
2010 9

样例输出
在这里插入图片描述

C语言解法

#include <stdio.h>

int fun(int y, int m);
int judge(int y, int m);

int main()
{

    int year, month, i;
    scanf("%d %d", &year, &month);
    printf("---------------------\n\
 Su Mo Tu We Th Fr Sa\n\
---------------------\n");

    // 判断当前从周几开始打印
    int start = fun(year, month);
    // printf("%d\n", start);
    int days = judge(year, month);

    for (i = 1; i <= days + start; i++)
    {
        if (i <= start)
            printf("   ");
        else
            printf("%3d", i - start);
        if (i % 7 == 0)
            printf("\n");
    }

    printf("\n---------------------\n");
}

int fun(int y, int m)
{
    int sum = 0, i;
    //先加本年到这个月为止之前的天数
    for (i = 1; i < m; i++)
        sum += judge(y, i);

    for (i = 2007; i < y; i++)
        if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0)
            sum += 366;
        else
            sum += 365;

    return (sum + 1) % 7; //注意2007 1 1是星期一
}

//根据传入的年份和月份判断当前月有多少天
int judge(int y, int m)
{
    if (m == 2 && ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0))
        return 29;
    else if (m == 2)
        return 28;
    else
        switch (m)
        {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            return 31;
            break;
        case 4:
        case 6:
        case 9:
        case 11:
            return 30;
            break;
        }
}


都看到这里了,各位哥哥姐姐叔叔阿姨给小王点个赞 关个注 留个言吧,和小王一起成长吧,你们的关注是对我最大的支持。
有事没事进来看看吧 : 小王的博客目录索引
C语言专栏看这 : C语言学习专栏


如果以上内容有任何不准确或遗漏之处,或者你有更好的意见,就在下面留个言让我知道吧-我会尽我所能来回答。

猜你喜欢

转载自blog.csdn.net/weixin_45761327/article/details/106922685