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

要求:编写程序,从键盘输入结束日期和星期几的序数(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

运行结果及代码如下:

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;
}