>>871 間違っている所があるかも。
#include <stdio.h>
#include <stdlib.h>
int CheckUruuDosi(int year)
{if((year%4==0&&year%100!=0)||year%400==0)return 1;return 0;}
int main(void)
{
int a,i[2],y,m,d,w=0,u;char s[256];
const int day[12]={31,28,31,30,31,30,31,31,30,31,30,31};
for(a=0;a<=1;a++)
{puts(a==0?"year?":"month?");gets(s);i[a]=atoi(s);
if(i[a]<=0||(a==1&&i[a]>=13))a--;}
for(y=1;y<=i[0];y++)for(m=1,u=CheckUruuDosi(y);m<=(y==i[0]?i[1]-1:12);m++)
w=(w+day[m-1]+(u&&m==2?1:0))%7;
u=CheckUruuDosi(i[0])&&i[1]==2?1:0;
puts("\nSun Mon Tue Wed Tur Fri Sat");
for(d=0;d<=w;d++)printf("%4s","");
for(d=1;d<=day[m-1]+u;d++)
printf("%3d%s",d,(d+w+1)%7==0?"\n":" ");
printf("\n\n改行を押してください 終了します");getchar();return 0;
}