C代码如下
#include <stdio.h>
int main()
{
int m,d,monthmax,y,i,j;
while(1)
{
printf("请输入年份y:");
scanf("%d", &y);
printf("请输入月份m:");
scanf("%d", &m);
if(y%4==0||(y%100==0&&y%400==0))
{
if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)
monthmax=31;
if(m==2)
monthmax=29;
if(m==4||m==6||m==9||m==11)
monthmax=30;
}
if(y%4!=0)
{
if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)
monthmax=31;
if(m==2)
monthmax=28;
if(m==4||m==6||m==9||m==11)
monthmax=30;
}
//基姆拉尔森计算公式取得一号周几
if(m==1||m==2)
{
m+=12;
y--;
}
d=(2+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
if(d==0)
{
d=7;
}
{
{
if(m==13)
{
printf("公元%d+1年 第1月日历\n",y);
}
if(m==14)
{
printf("公元%d+1年 第2月日历\n",y);
}
if(m!=13&&m!=14)
{
printf("公元%d年 第%d月日历\n",y,m);
}
}
printf(" 7 1 2 3 4 5 6\n");
if(d==7)
{
for(i=1; i<=3*(d-1); i++)
{
printf(" ");
}
printf("\n");
}
else
{
for(i=1; i<=3*d; i++)
{
printf(" ");
}
}
for(j=1; j<=monthmax; j++)
{
printf("%3d", j);
if((j+d)%7==0)
{
printf("\n");
}
if(j==monthmax)
{
printf("\n");
}
}
printf("\n");
}
}
return 0;
}