题目
使用函数方法编写程序,要求当用户输入年份时能输出该年的日历,在日历上能够看出某天是星期几,可以显示任意一年任意一天,并能够知道是否是闰年的。
#include <stdio.h>
int isLeapYear(int year)
{
if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
{
return 1;
}
else
{
return 0;
}
}
int getDaysInYear(int year)
{
return isLeapYear(year) ? 366 : 365;
}
int getDaysInMonth(int month, int year)
{
int days[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if (month == 2 && isLeapYear(year))
{
return 29;
}
return days[month - 1];
}
int getDayOfWeek(int day, int month, int year)
{
if (month < 3)
{
month += 12;
year--;
}
int h = (day + 2 * month + 3 * (month + 1) / 5 + year + year / 4 - year / 100 + year / 400) % 7;
return h;
}
void printCalendar(int year, int day)
{
printf(" %d年\n", year);
printf("日 一 二 三 四 五 六\n");
int startDay = getDayOfWeek(1, 1, year);
int daysInYear = getDaysInYear(year);
int i;
for (i = 0; i < startDay; i++)
{
printf(" ");
}
for (i = 1; i <= daysInYear; i++)
{
printf("%2d ", i);
if ((i + startDay) % 7 == 0)
{
printf("\n");
}
}
printf("\n\n");
}
int main()
{
int year, day;
printf("请输入年份:");
scanf_s("%d", &year);
printf("请输入日期(1-31):");
scanf_s("%d", &day);
printCalendar(year, day);
return 0;
}