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 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 关于#python#的问题:自动化测试