#include #include int isLeapYear(int year) { if ((year % 4 == 0 && year % 100!= 0) || (year % 400 == 0)) { return 1; } return 0; } int getDaysInMonth(int year,int month){ scanf("%d%d",&year,&month); if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) printf("31"); else if(month==4||month==6||month==9||month==11) printf("30"); else{ if((year % 4 == 0 && year % 100!= 0) || (year % 400 == 0)) printf("29"); else printf("28"); } return 0; } int getDayOfWeek(int year, int month, int day) { if (month < 3) { month += 12; year--; } int c = year / 100; int y = year % 100; int week = (day + 2 * month + 3 * (month + 1) / 5 + y + y / 4 + c / 4 - 2 * c + 7) % 7; return week; } /*单月日历*/ void x(int year, int month) { printf("%d%d\n", year, month); printf("日 一 二 三 四 五 六\n"); int dayOfWeek = getDayOfWeek(year, month, 1); for (int i = 0; i < dayOfWeek; i++) { printf(" "); } int daysInMonth; int getDaysInMonth; for (int i = 1; i <= daysInMonth; i++) { printf("%2d ", i); if ((i + dayOfWeek) % 7 == 0) { printf("\n"); } } if ((daysInMonth + dayOfWeek) % 7!= 0) { printf("\n"); } } void z(int year, int month) { printf(" %d%d%d%d\n", year, month, year, month + 1); printf("日 一 二 三 四 五 六 日 一 二 三 四 五 六\n"); int dayOfWeek1 = getDayOfWeek(year, month, 1); int dayOfWeek2 = getDayOfWeek(year, month + 1, 1); for (int i = 0; i < dayOfWeek1; i++) { printf(" "); } int daysInMonth1 ; int daysInMonth2 ; int i1 = 1, i2 = 1; while (i1 <= daysInMonth1 || i2 <= daysInMonth2) { if (i1 <= daysInMonth1) { printf("%2d ", i1); i1++; } else { printf(" "); } if ((i1 + dayOfWeek1 - 1) % 7 == 0 && i1 <= daysInMonth1) { printf(" "); } if (i2 <= daysInMonth2) { printf("%2d ", i2); i2++; } else { printf(" "); } if ((i2 + dayOfWeek2 - 1) % 7 == 0 && i2 <= daysInMonth2) { printf("\n"); } } if ((daysInMonth1 + dayOfWeek1) % 7!= 0 || (daysInMonth2 + dayOfWeek2) % 7!= 0) { printf("\n"); } } void showMenu() { printf("菜单:\n"); printf("1. 查询某年某月某日的日期是周几及该年是否为闰年\n"); printf("2. 输入年份,输出这一年的单月日历\n"); printf("3. 输入年份,输出这一年的双月日历(并排显示两个月)\n"); printf("4."); } int main() { int choice; int year, month, day; int m; do { showMenu(); scanf("%d",&choice); switch (choice) { case 1: printf("请输入年份:"); scanf("%d",&year); printf("请输入月份:"); scanf("%d",&month);; printf("请输入日期:"); scanf("%d",&day); if (year < 1583 && year == 1582 && month == 10 && day >= 5 && day <= 14) { printf("1582年10月5日 - 14日不存在,请重新输入。\n"); continue; } printf("%d%d%d", year, month, day); switch (getDayOfWeek(year, month, day)) { case 0: printf("日\n"); break; case 1: printf("一\n"); break; case 2: printf("二\n"); break; case 3: printf("三\n"); break; case 4: printf("四\n"); break; case 5: printf("五\n"); break; case 6: printf("六\n"); break; } if (is LeapYear){ printf("%d\n", year); } else { printf("%d年不是闰年\n", year); } break; case 2: printf("请输入年份:"); scanf("%d",&year); for (month = 1; month <= 12; month++) { x(year, month); printf("\n"); } break; case 3: printf("请输入年份:"); scanf("%d",&year);; for (month = 1; month <= 11; month += 2) { z(year, month); printf("\n"); } break; default: printf("无效的选择,请重新输入。\n"); } } while (choice!= 0); return 0; }