nidhogga 2021-12-05 08:43 采纳率: 66.7%
浏览 53
已结题

【日期】找找哪些日期是星期几

要求:编写程序,从键盘输入结束日期和星期几的序数(15),然后输出从2017-01-01至结束日期之间全部为星期几的日期
输入:1、结束日期,2017-01-01至2018-12-31为有效值
2、序数(1
5),分别代表星期一至星期五。例:
2018-12-13
5
输出:每个日期占一行。例:
[2017-01-01~2018-12-31,5]
001 2017-01-06
002 2017-01-13
.
.
.
104 2018-12-28

  • 写回答

1条回答 默认 最新

  • 关注

    运行结果及代码如下:

    img

    代码:

    #include <stdio.h>
    //判断闰年
    int isrn(int year)
    {
        if (year%4==0 &&year%100 !=0 || year%400==0)
            return 1;
        else
            return 0;
    }
    
    //判断日期是否超出
    
    int main()
    {
        int dd[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
        int year,mon,day,xs;
        int d=1;
        int i,j,k;
        int cnt=0;
        scanf("%d-%d-%d",&year,&mon,&day);
        scanf("%d",&xs);
        if(xs<1 || xs >7)
        {
            printf("ERROR!");
            return 0;
        }
        
        i=2017;
        j=1;
        k=d+xs;
    
    
        if(i>year)
        {
            printf("NO DATE FOUND!");
            return 0;
        }
        else if(i==year)
        {
            if(j>mon)
            {
                printf("NO DATE FOUND!");
                return 0;
            }
            else if(j==mon)
            {
                if(k>day)
                {
                    printf("NO DATE FOUND!");
                    return 0;
                }
            }
        }
    
    
        cnt++;
        printf("[2017-01-01~%d-%d-%d,%d\n",year,mon,day,xs);
        printf("%03d %d-%02d-%02d\n",cnt,i,j,k); //2017-01-06 
        while (1)
        {
            k+= 7;
            if(isrn(i))
                dd[2]=29;
            else
                dd[2]=28;
    
            if(k > dd[j])
            {
                k -= dd[j];
                j++;
            }
            if(j>12)
            {
                i++;
                j=1;
            }
    
            if(i>year)
                break;
            else if(i==year)
            {
                if(j>mon)
                    break;
                else if(j==mon)
                {
                    if(k>day)
                        break;
                }
            }
    
    
            cnt++;
            printf("%03d %d-%02d-%02d\n",cnt,i,j,k); //2017-01-06 
        }
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月5日
  • 已采纳回答 12月5日
  • 创建了问题 12月5日

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog