#include <stdio.h>
int isLeapYear(int year);
int getMonthDays(int year, int month);
void printMonth(int year, int month);
void printYear(int year);
int main() {
int studentID, year;
printf("请输入你的学号:");
scanf("%d", &studentID);
year = 2000 + studentID % 100;
if (year < 2001 || year > 2100) {
printf("年份不在21世纪内。\n");
return 1;
}
printYear(year);
return 0;
}
int isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
int getMonthDays(int year, int month) {
switch (month) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
return 31;
case 4: case 6: case 9: case 11:
return 30;
case 2:
return isLeapYear(year) ? 29 : 28;
default:
return 0;
}
}
void printMonth(int year, int month) {
int days = getMonthDays(year, month);
int firstDayOfWeek;
int dayOfYear = (year - 2000) * 365 + (year - 2001) / 4 - (year - 2001) / 100 + (year - 2001) / 400;
for (int m = 1; m < month; m++) {
dayOfYear += getMonthDays(year, m);
}
firstDayOfWeek = (dayOfYear + 6) % 7 + 1;
printf("\n%d年%d月的日历:\n", year, month);
printf("日 一 二 三 四 五 六\n");
for (int i = 1; i < firstDayOfWeek; i++) {
printf(" ");
}
for (int day = 1; day <= days; day++) {
printf("%2d ", day);
if ((firstDayOfWeek + day - 1) % 7 == 0) {
printf("\n");
}
}
if ((firstDayOfWeek + days) % 7 != 1) {
printf("\n");
}
}
void printYear(int year) {
for (int month = 1; month <= 12; month++) {
printMonth(year, month);
}