1. 代码
#include<stdio.h>
int judgedays(int y, int m);
int judgeleapyear(int y);
int sumdays1(int y);//1900到y-1年的总天数
int yearFirstday(int d1); // 计算y年1月1日是周几 输入y-1年到1900年1月1日的总天数
int sumdays2(int y, int m); //计算y年1月到m-1月总天数
int ymFirstday(int d2, int zhou1);//y年m月1号是周f
int ymFirstday(int d2,int zhou1)//y年m月1号是周f
{
int e = 0;
e = d2 % 7;
int zhou2 = 0; //y年m月1日从周f开始
zhou2 = zhou1 + e;
return zhou2;
}
int sumdays2(int y, int m) //计算y年1月到m-1月总天数
{
int m1 = m-1; //y年m-1到1月的总月份数
int days2 = 0; // y年1月到m-1月总天数
if (judgeleapyear(y) == 0) //计算平年 y年1月到m-1月的总天数
{
switch (m-1)
{
case 0:
days2 = 0;
break;
case 1:
days2 = 31;
break;
case 2:
days2 = 59;
break;
case 3:
days2 = 90;
break;
case 4:
days2 = 120;
break;
case 5:
days2 = 151;
break;
case 6:
days2 = 181;
break;
case 7:
days2 = 212;
break;
case 8:
days2 = 243;
break;
case 9:
days2 = 273;
break;
case 10:
days2 = 304;
break;
case 11:
days2 = 334;
break;
}
}else if (judgeleapyear(y) == 1) //计算润年 y年1月到m-1月的总天数
{
switch (m-1)
{
case 0:
days2 = 0;
break;
case 1:
days2 = 31;
break;
case 2:
days2 = 60;
break;
case 3:
days2 = 91;
break;
case 4:
days2 = 121;
break;
case 5:
days2 = 152;
break;
case 6:
days2 = 182;
break;
case 7:
days2 = 213;
break;
case 8:
days2 = 244;
break;
case 9:
days2 = 274;
break;
case 10:
days2 = 305;
break;
case 11:
days2 = 335;
break;
}
}
int d2 = days2;
return d2;
}
int yearFirstday(int d1) // 计算y年1月1日是周几 输入y-1年到1900年1月1日的总天数
{
int d = 0;
d = d1 % 7;
int zhou1;
zhou1 = d + 1; //y年1月1日从周zhou1开始
return zhou1; //返回 y年1月1日从周zhou1开始
}
int sumdays1(int y) //1900到y-1年的总天数
{
int y1 = y - 1900; //1900到y-1年的总年数
int i = 0; //i作为循环计数变量
int j = 0; //j作为闰年计数变量
for (i = 1900; i < y; ++i) //判断闰年
{
if (judgeleapyear(i) == 1)
{
j = j + 1;
}
}
int d1;
d1 = (y-1900-j)*365 + j*366;
return d1; //返回1900到y-1年的总天数
}
int judgeleapyear(int y)
{
int lp = 0;
if (y%4==0 && y%100!=0 || y%400==0)
{
lp = 1;
}else
{
lp = 0;
}
return lp;
}
int judgedays(int y, int m)
{
int days = 0;
if (m==4 || m==6 || m==9 || m==11)
{
days = 30;
}else if (m==1 || m==3 || m==5 || m==7 || m==8 || m==10 || m==12)
{
days = 31;
}else if (judgeleapyear(y) == 1)
{
days = 29;
}else
{
days = 28;
}
return days;
}
int main(void)
{
int y = 0;
int m = 0;
printf("Injuput year and month:\n");
scanf("%d%d",&y,&m);
int d1 = sumdays1(y); //计算1900到y-1年的总天数
int zhou1 = yearFirstday(d1);//计算y年1月1日是周k
int d2 = sumdays2(y,m); //计算y年1月到m-1月总天数
int zhou2 = ymFirstday(d2,zhou1);//计算y年m月1日是周f
printf(" %d月 %d \n",m,y);
printf("一 二 三 四 五 六 日 \n");
int day = judgedays(y,m);
int t = 0;
for (t = 1; t <= zhou2-1; ++t )//y年m月1号对应zhou2前面的空格
{
printf(" ");
}
int data1 = 1;
int x = 0;
for (x = zhou2; x <=7; ++x)
{
printf(" %d ",data1);
++data1;
}
putchar('\n');
int i = 0;
int j = 0;
for (i = 2; i <= 6; ++i)//行数
{
for (j = 1; j <= 7; ++j )//列数
{
printf("%2d ",data1);
if (data1 == judgedays(y,m))
{
printf("\n");
return 0;
}
++data1;
}
printf("\n");
}
return 0;
}
2. 运行结果