C/C++ code#include
#include
int isLeap(int year);
int GetMonthDays(int year,int month);
int GetWeekDay(int year,int month,int day);
void PrintMonthCalender(int year, int month);
int main()
{
int year,month;
printf("Please input year and month:");
scanf("%d %d",&year,&month);
printf("The result is:\n");
PrintMonthCalender(year,month);
return 0;
}
int isLeap(int year)
{
int m1,m2,m3;
m1=year%4;
m2=year%100;
m3=year%400;
if( (0==m1&&0!=m2) || (0==m3) )
{
return 1;
}
else
{
return 0;
}
}
int GetMonthDays(int year,int month)
{
int x=isLeap(year);
if(1 == x) //x代表判断闰年的返回值
{
switch(month)
{
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
return 31;break;
case 4:case 6:case 9:case 11:
return 30;break;
case 2:
return 29;break;
default:printf("Your input is wrong.\n");exit(0);break;
}
}
else
{
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
break;
case 4:
case 6:
case 9:
case 11:
return 30;break;
case 2:
return 28;
break;
default:printf("Your input is wrong.\n");
exit(0);
break;
}
}
return 0;
}
int GetWeekDay(int year,int month,int day)
{
int days,y,s=0,k,weekDay;
int x=isLeap(year);
if(1==x)
{
k=29;
}
if(0==x)
{
k=28;
}
y=year-1;
switch(month-1)
{
case 12:
s=s+31;
case 11:
s=s+30;
case 10:
s=s+31;
case 9:
s=s+30;
case 8:
s=s+31;
case 7:
s=s+31;
case 6:
s=s+30;
case 5:
s=s+31;
case 4:
s=s+30;
case 3:
s=s+31;
case 2:
s=s+k;
case 1:
s=s+31;
}
s=s+day;
days=y*365+y/400+y/4-y/100+s;
weekDay = days % 7;
return weekDay;
}
void PrintMonthCalender(int year,int month)
{
int startDay;
int i=1,count,t=1,w;
w=GetMonthDays(year,month);
startDay=GetWeekDay(year,month,1);
printf("\t\t\t%d-%d\n",year,month);
printf("Sun.\tMon.\tTue.\tWed.\tThu.\tFri.\tSat.\n");
count=startDay;
while( i <= w )
{
while(t < count )
{
printf("\t");
t++;
}
while(count<=7 && i <= w )
{
printf("%d\t",i);
i++;
count++;
}
printf("\n");
count=1;
}
printf("\n");
}
//有一些修改 自己看吧