# include
# define N 2012
int main()
{ int year_(int x);
int month_(int x,int y);
void p_(int x,int y,int z);
int year,month,year_days,month_days,sum_days;
for(;;)
{
for(;;)
{ printf("请输入需要查寻的年份:");
scanf("%d",&year);
if(year>=1990)
break;
}
for(;;)
{ printf("请输入需要查寻的月份:");
scanf("%d",&month);
if(month>0&&month<13)
break;
}
year_days=year_(year);
printf("year_days=%3d\n",year_days);
month_days=month_(month,year);
printf("month_days=%3d\n",month_days);
if(year>=N)
sum_days=year_days+month_days;
else
sum_days=year_days-month_days;
p_(sum_days,month,year);
}
return 0;
}
int year_(int x)//判断期间有几个闰年并且求出期间天数 功能函数 有参 有返回值
{ int i=N;
int m,j=0,k=0,z=-1;
if(x-i==0)
z=0;
else
if(x-i>0)
{ for(m=i;m<=x;m++)
if(m%4==0||m%400==0)
++j;
z=j*366+(x-i-j)*365;
}
else
{ for(m=x;m
if(m%4==0||m%400==0)
++k;
z=k*366+(i-x-k)*365;
}
return z;
}
int month_(int x,int y)//判断月份并计算天数 功能函数 有参 有返回值
{ int z=0;
switch(x)
{ case 1 : z= 0; break;
case 2 : z= 31; break;
case 3 : z= 31+28; break;
case 4 : z= 31+28+31; break;
case 5 : z= 31+28+31+30; break;
case 6 : z= 31+28+31+30+31; break;
case 7 : z= 31+28+31+30+31+30; break;
case 8 : z= 31+28+31+30+31+30+31; break;
case 9 : z= 31+28+31+30+31+30+31+31; break;
case 10 : z= 31+28+31+30+31+30+31+31+30; break;
case 11 : z= 31+28+31+30+31+30+31+31+30+31; break;
case 12 : z= 31+28+31+30+31+30+31+31+30+31+30; break;
}
if(x>2&&(y%4==0||y%400==0))
return z+1;
else
return z+0;
}
void p_(int x,int y,int z)//输出函数
{ int i,j,monthdays;
if(z%4!=0||z%400!=0)
if(y==1||y==3||y==5||y==7||y==8||y==10||y==12)
monthdays=31;
else
if(y==2)
monthdays=28;
else
monthdays=30;
else
if(y==1||y==3||y==5||y==7||y==8||y==10||y==12)
monthdays=31;
else
if(y==2)
monthdays=29;
else
monthdays=30;
if(z>=N)
j=x%7;
else
j=7-x%7;
printf("%5s%5s%5s%5s%5s%5s%5s\n","日"," 一","二","三","四","五","六");//根据系统不一样 自己调节间距保持和日期对其
for(i=0;i
printf("%5s"," ");
for(i=1;i<=monthdays;i++)
{ printf("%5d",i);
if((j+i)%7==0)
printf("\n");
}
printf("\n");
printf("\n");
}