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