要求:输入年份和月份,输出该月的日历
只输入年份时,输出该年全部月历
(这里输入以分号结束)(以1900年1月1日为起始基准)
#include <stdio.h>
int isLeepYear(int year)//判断闰年
{
return 0 == year % 4 && 0 != year % 100 || 0 == year % 400;
}
int daysOfMonth(int year,int month)//判断单月份天数
{
int day[] = {31,0,31,30,31,30,31,31,30,31,30,31};
if(2 == month)
{
if(isLeepYear(year))
{
return 29;
}
else
{
return 28;
}
}
return day[month - 1];
}
int yearTheDays(int year)//判断年份到90年的总天数
{
int i;
int sum = 0;
for(i = 1900;i < year;++i)
{
if(isLeepYear(i))
{
sum = sum + 366;
}
else
{
sum = sum + 365;
}
}
return sum;
}
int yearTheFirstday(int year)//判断年份第一天星期几
{
return yearTheDays(year) % 7 + 1;
}
int monthTheFirstday(int year,int month)//判断月份第一天星期几
{
int i;
int sum = yearTheDays(year);
for(i = 1;i < month;++i)
{
sum = sum + daysOfMonth(year,i);
}
return sum % 7 + 1;
}
void printMonth(int year ,int month)//输出单月日历
{
int i;
printf(" %d年%d月\n",year,month);
printf("一 二 三 四 五 六 七\n");
for(i = 1;i < monthTheFirstday(year,month);++i)
{
printf(" ");
}
for(i = 1;i <= daysOfMonth(year,month);++i)
{
printf("%2d ",i);
if((i + monthTheFirstday(year,month) - 1) % 7 == 0)
{
printf("\n");
}
}
printf("\n");
}
void printYear(int year)//输出年的所有月份
{
int i;
for(i = 1;i <= 12;++i)
{
printMonth(year,i);
printf("********************\n");
}
}
int main(void)
{
int year,month;
char c;
scanf("%d",&year);
scanf("%c",&c);
if(c == ';')
{
month = 0;
printYear(year);
}
else
{
scanf("%d",&month);
printMonth(year,month);
}
return 0;
}