慕虎8249917
#include<stdio.h>
#include <windows.h>
//判断是否是闰年,是返回1,否返回0
bool isLeap(int year)
{
if((year%4==0 && year%100!=0) || (year%400==0))
return 1;
else
return 0;
}
void printCalendar(int year)
{
//提前定义一年每月的天数
int months[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int arr[66][66];
//设置一个基准年,获得基准年到当前年份的总天数,通过总天数除以7求余来计算当前第一月的第一天是周几,方便计算基准年设置为1990,1990的第一天是周一
int sum=0,week=0,day=1,k=0;
char s[666];
for(int i=1900;i<year;i++)
{
sum+=365;
//可能存在闰年的情况,天数366天,即需要修正总天数和二月份的天数
sum+=isLeap(i);
}
months[1]+=isLeap(year);
week=sum%7;//当前年份第一天即为周(week+1)
//循环打印12月日历
for(int i=0;i<12;i++)
{
//获得之后月份第一天是周几
if(i>0)
{
sum+=months[i-1];
week=sum%7;
}
printf("%d月\n",i+1);
printf("周日\t周一\t周二\t周三\t周四\t周五\t周六\n");
//week+1代表每月第一天前需要空出来的位置
if(week!=6)
for(int j=0;j<week+1;j++){
printf("\t");
}
for( k=0;k<months[i];k++)
{
printf("%d\t",day);
if((week+day+1)%7==0)
{
printf("\n");
}
day++;
}
day=1;
printf("\n");
printf("--------------------------------------------------");
printf("\n");