#include <stdio.h>
//确定此月共多少天
int get_days(int year, int month) {
int days;
switch (month) {
case 2:
days = ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) ? 29 : 28;
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
default:
days = 31;
break;
}
return days;
}
//用 吉姆拉尔森法则 确定这月第一天是周几
int getDayOfWeek(int year, int month) {
int dayOfWeek;
if (month < 3) {
month += 12;
year--;
}
dayOfWeek = (1 + 2 * month + 3 * (month + 1) / 5 + year + year / 4 - year / 100 + year / 400 + 1) % 7;
return dayOfWeek;
}
void print_calendar(int year, int month) {
int days = get_days(year, month);
int weekday = getDayOfWeek(year, month);
printf(" 日 一 二 三 四 五 六\n");
// 打印该月第一天之前的空格
for (int i = 0; i < weekday; i++) {
printf(" ");
}
// 打印日期
for (int day = 1; day <= days; day++) {
printf("%3d ", day);
weekday++;
if (weekday == 7) {
printf("\n");
weekday = 0;
}
}
printf("\n");
}
int main() {
int year, month;
printf("请输入年份和月份(以空格分隔):");
scanf_s("%d %d", &year, &month);
print_calendar(year, month);
return 0;
}
|