weixin_47608930 2020-05-21 18:45 采纳率: 100%
浏览 96
已采纳

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

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

谢谢!

  • 写回答

1条回答 默认 最新

  • threenewbee 2020-05-21 21:00
    关注
    #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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用