c万年历
#include <stdio.h>
void main()
{
void print_head(int x,int y); /*打印头文件*/
void print_month(int x,int y); /*打印月历*/
int days_of_month(int x,int y);
int leap(int x,int y);
int i,days,year,month,firstday;
char choose;
do
{
printf ("\n\请输入年份(0000~9999):\n\n");
scanf ("%d",&year);
if (year<0||year>9999) printf ("警告:错误,请重新输入!");}
while (year<0||year>9999);
printf ("\n\n");
do
{
printf ("请输入月份(0~12)\n\n\n");
scanf ("%d",&month);
if (month<=0||month>12) printf ("WANNING:ERROR,please input again!");}
while (month<=0||month>12);
printf ("\n\n");
days=days_of_month(year,month);
firstday=leap(year,month);
print_head(year,month);
print_month(firstday,days);
choose=getchar();
printf ("\n\n\n");
printf("would you like to continue(y/n):\n\n");
scanf("%c",&choose);
if (choose=='y'||choose=='Y') main();
}
days_of_month(int x,int y)
{
int z;
switch (y)
{case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: z=31;break;
case 4:
case 6:
case 9:
case 11: z=30;break;
case 2:
{if ((x%4==0&&x%100!=0)||(x%400==0)) z=29;
else z=28;break;
}
}
return z;
}
leap(int x,int y)
{
int z,i,moday;
z=(x+(x-1)/4-(x-1)/100+(x-1)/400)%7; //请问这行什么意思?
for (i=1;i<y;i++)
{
moday=days_of_month(x,i);
z=(z+moday)%7;
}
return z;
}
void print_head(int x,int y)
{
printf ("\n\n********************************************************************************\n\n");
printf ("\t\t\t\t%d %d\n\n",x,y);
printf ("\t\t\t SUN MON TUE WED THU FRI SAT\n");
printf ("\t\t\t");
}
void print_month(int x,int y)
{
int i;
char space[7]={' '};
for (i=1;i<=x;i++)
printf ("%4c",space[i]);
for (i=1;i<=y;i++)
{if ((i+x)%7==1) printf ("\n\t\t\t%4d",i);
else printf ("%4d",i);}
printf ("\n\n********************************************************************************\n\n");
}