编辑代码

#include<stdio.h>
/*1.公元1年1月1日,是星期一
  2.累加至输入年份之前的所有年的天数
  3.总天数模7,0(星期日)---6(星期六) 
*/

int check_year(int year)/*检查平年闰年函数*/
{
	if((year%400==0)||(year%4==0&&year%100!=0))
    {
		return 1;/*是闰年返回1*/
	}
    else
    {
		return 0;/*不是闰年返回0*/
	}
}

int week_f(int year)/*返回输入年份1月1日是星期几*/
{
	if(year==1)/*如果是公元1年1月1日*/
    {
		return 1;/*返回公年1月1日是星期一*/
	}
 
	int sum=0;
	for(int i=1;i<year;i++)/*累加至输入年份之前的所有年的天数*/
    {
		if(check_year(i)==1)
        {
			sum=sum+366;/*闰年累加366天*/
		} 
        else
        {
			sum=sum+365;/*闰年累加365天*/
		}
	}
	return (sum+1)%7;/*返回输入年份1月1日是星期几,由于把星期日放在了首位,因此需要将sum+1*/
}

int month_run(int n)/*闰年各月的天数*/
{
	switch(n)
    {
		case 1:return 31;/*1月的天数*/
		case 2:return 29;/*2月的天数*/
		case 3:return 31;/*3月的天数*/
		case 4:return 30;/*4月的天数*/
		case 5:return 31;/*5月的天数*/
		case 6:return 30;/*6月的天数*/
		case 7:return 31;/*7月的天数*/
		case 8:return 31;/*8月的天数*/
		case 9:return 30;/*9月的天数*/
		case 10:return 31;/*10月的天数*/
		case 11:return 30;/*11月的天数*/
		case 12:return 31;/*12月的天数*/
	}
}

int month_ping(int n)/*平年各月的天数*/
{
	switch(n)
    {
		case 1:return 31;/*1月的天数*/
		case 2:return 28;/*2月的天数*/
		case 3:return 31;/*3月的天数*/
		case 4:return 30;/*4月的天数*/
		case 5:return 31;/*5月的天数*/
		case 6:return 30;/*6月的天数*/
		case 7:return 31;/*7月的天数*/
		case 8:return 31;/*8月的天数*/
		case 9:return 30;/*9月的天数*/
		case 10:return 31;/*10月的天数*/
		case 11:return 30;/*11月的天数*/
		case 12:return 31;/*12月的天数*/
	}
}
 
void run(int week)/*闰年输出函数*/
{
	int enter=0;/*记录换行*/
	int wee=week;/*将输入年份1月1日是星期几赋值给wee*/
	for(int i=1;i<=12;i++)/*最外层遍历12个月*/
    { 
		printf("----------------------> %d月<----------------------\n",i);/*输出月份标头*/
		printf("日	一	二	三	四	五	六\n") ;/*输出星期标头*/
		for(int k=0;k<wee;k++)/*%d月输出wee个空格后输出%d月1日*/
        {
			printf("	");
			enter++;/*记录空格数*/
		} 
		
		for(int j=1;j<=month_run(i);j++)/*用循环来输出每月的天*/
        { 
			if(enter%7==0)/*如果enter%7==0,则表明需要已过了一周,需换行*/
            {
				printf("\n");
			}
			printf("%d	",j);/*输出每月的天*/
			enter++;/*记录空格数*/
		}
		wee=(wee+month_run(i))%7;/*把下一个月1日是星期几赋值给wee*/
		enter=enter-wee;/*使enter变为7的倍数or变为0,方便下一月的计数*/
		printf("\n\n\n"); 
	}
}

 void ping(int week)/*平年输出函数*/
 {
	int enter=0;/*记录换行*/
	int wee=week;/*将输入年份1月1日是星期几赋值给wee*/
	for(int i=1;i<=12;i++)/*最外层遍历12个月*/
    { 
		printf("----------------------> %d月<----------------------\n",i);/*输出月份标头*/
		printf("日	一	二	三	四	五	六\n") ;/*输出星期标头*/
		for(int k=0;k<wee;k++)/*%d月输出wee个空格后输出%d月1日*/
        { 
			printf("	");/*输出空格*/
			enter++;/*记录空格数*/
		}

		for(int j=1;j<=month_ping(i);j++)/*用循环来输出每月的天*/
        { 
			if(enter%7==0)/*如果enter%7==0,则表明需要已过了一周,需换行*/
            {
				printf("\n");
			}
			printf("%d	",j);/*输出每月的天*/
			enter++;/*记录空格数*/
		}
		wee=(wee+month_ping(i))%7;/*把下一个月1日是星期几赋值给wee*/
		enter=enter-wee;/*使enter变为7的倍数or变为0,方便下一月的计数*/
		printf("\n\n\n"); 
	}
}
int main()
{
	int year;
	int week=0;
	int sum=0; 
	printf("请输入年份:");/*提示输入年份*/
	scanf("%d",&year); 
	week=week_f(year);/*调用函数,得知年份1月1日是星期几*/
	if(check_year(year)==1)
    {
		run(week);/*值为真,调用闰年函数*/
	} else
    {
		ping(week);/*值为真,调用平年函数*/
	}
	return 0;
}