题目描述
输入年份与月份,打印该月日历。
参考代码
#include <iostream>
using namespace std;
// 函数printMonth:按要求的格式打印某年某月的日历
// 参数:year-年,month-月
// 返回值:无
void printMonth(int year, int month);
// leapYear:判断闰年
// 参数:y-年
// 返回值:1-是闰年,0-不是闰年
int leapYear(int y)
{
if(y % 4 == 0 && y % 100 != 0 || y % 400 == 0)
return 1;
return 0;
}
// 函数whatDay:计算某年某月的1号是星期几
// 参数:year-年,month-月
// 返回值:1到7--星期1到星期日
int whatDay(int year, int month)
{
int y=1,day=0;
int mon[12]={31, 28, 31, 30, 31,30,
31, 31, 30, 31, 30, 31 };
if(leapYear(year)) mon[1] = 29;
while (y<year)
{
if (leapYear(y)) day += 366;
else day += 365;
y++;
}
for(int i=1;i<month;i++)
{
day += mon[i-1];
}
day += 1;
day %= 7;
if(day == 0) return 7;
else return day;
}
void printMonth(int year, int month)
{
int mon[12]={31, 28, 31, 30, 31,30,
31, 31, 30, 31, 30, 31 };
if(leapYear(year)) mon[1] = 29;
int i=0,j=0,d,day;
day = mon[month-1];
cout<<" Mon Tue Wes Thr Fri Sat Sun"<<endl;
d = 1;
while(d<=day)
{
i++;j++;
if(j < whatDay(year,month)) cout<<" ";
else
{
printf("%4d",d);
d++;
}
if(i==7)
{
cout<<endl;
i=0;
}
}
whatDay(year,month);
}
int main()
{
// 年、月
int y, m;
// 输入年月
cin >> y >> m;
// 输出该年月的日历
printMonth(y,m);
return 0;
}