#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int check_years(int year)
{
if((year%400==0)||(year%4==0&&year%100!=0))
{
return 1; //如年返回1
}
else
{
return 0; //平年返回0
}
}
//判断输入这一年的1月1日是星期几
//这一年以前所有天数之和%7
int week_f(int year)
{
if(year==1)
{
return 1; //公元1年1月1日
}
int sum=0;
for(int i=1;i<year;i++)
{
if(check_years(i)==1)
{
sum=sum+366;
}
else
{
sum=sum+365;
}
}
return (sum+1)%7; //加1是因为是1号
}
//返回每个月的天数,需要两个:闰年,平年
int month_run(int n)
{
switch(n)
{
case 1:
return 31;
case 2:
return 29;
case 3:
return 31;
case 4:
return 30;
case 5:
return 31;
case 6:
return 30;
case 7:
return 31;
case 8:
return 31;
case 9:
return 30;
case 10:
return 31;
case 11:
return 30;
case 12:
return 31;
}
}
int month_ping(int n)
{
switch(n)
{
case 1:
return 31;
case 2:
return 28;
case 3:
return 31;
case 4:
return 30;
case 5:
return 31;
case 6:
return 30;
case 7:
return 31;
case 8:
return 31;
case 9:
return 30;
case 10:
return 31;
case 11:
return 30;
case 12:
return 31;
}
}
void run(int week)
{
int enter=0; //
int wee=week;
for(int i=1;i<=12;i++)
{
printf("--------->%d month<--------\n",i);
printf("0 1 2 3 4 5 6\n");
for(int k=0;k<wee;k++)
{//输出空格
printf(" ");
enter++;
}
for(int j=1;j<=month_run(i);j++)
{
if(enter%7==0)
{
printf("\n");
}
printf("%d ",j);
enter++;
}
wee=(wee+month_run(i))%7;
enter=enter-wee;
printf(("\n\n\n"));
}
}
void ping(int week)
{
int enter=0; //记录换行
int wee=week;
for(int i=1;i<=12;i++) //12月
{
printf("--------->%d month<--------\n",i);
printf("0 1 2 3 4 5 6\n");
for(int k=0;k<wee;k++)
{//输出空格
printf(" ");
enter++;
}
for(int j=1;j<=month_ping(i);j++)
{
if(enter%7==0)
{
printf("\n");
}
printf("%d ",j);
enter++;
}
wee=(wee+month_ping(i))%7; //第i月最后一天是星期几
enter=enter-wee; //减去wee,则这一行为“空”,不会影响enter下次判断
printf(("\n\n\n"));
}
}
int main(int argc, char *argv[]) {
int year=0;
int week=0;
int sum=0;
printf("input the year:");
scanf("%d,",&year);
week=week_f(year);
if(check_years(year)==1)
{
run(week);
}
else
{
ping(week);
}
return 0;
}
month.run和month.ping可以用if判断是平年还是闰年,返回二月的天数,之后void run 和void ping 也可以改成一个。
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int check_years(int year)
{
if((year%400==0)||(year%4==0&&year%100!=0))
{
return 1; //如年返回1
}
else
{
return 0; //平年返回0
}
}
//判断输入这一年的1月1日是星期几
//这一年以前所有天数之和%7
int week_f(int year)
{
if(year==1)
{
return 1; //公元1年1月1日
}
int sum=0;
for(int i=1;i<year;i++)
{
if(check_years(i)==1)
{
sum=sum+366;
}
else
{
sum=sum+365;
}
}
return (sum+1)%7; //加1是因为是1号
}
//返回每个月的天数,需要两个:闰年,平年
int month(int n,int year)
{
switch(n)
{
case 1:
return 31;
case 2:
if(year==1)
{
return 29;
}
else
{
return 28;
}
case 3:
return 31;
case 4:
return 30;
case 5:
return 31;
case 6:
return 30;
case 7:
return 31;
case 8:
return 31;
case 9:
return 30;
case 10:
return 31;
case 11:
return 30;
case 12:
return 31;
}
}
void run(int week,int year)
{
int enter=0; //
int wee=week;
for(int i=1;i<=12;i++)
{
printf("--------->%d month<--------\n",i);
printf("0 1 2 3 4 5 6\n");
for(int k=0;k<wee;k++)
{//输出空格
printf(" ");
enter++;
}
for(int j=1;j<=month(i,year);j++)
{
if(enter%7==0)
{
printf("\n");
}
printf("%d ",j);
enter++;
}
wee=(wee+month(i,year))%7;
enter=enter-wee;
printf(("\n\n\n"));
}
}
int main(int argc, char *argv[]) {
int year=0;
int week=0;
int sum=0;
int y;
printf("input the year:");
scanf("%d,",&year);
y=check_years(year);
week=week_f(year);
run(week,y);
return 0;
}