#include int isLeapYear(int year) { return (year % 4 == 0 && year % 100!= 0) || (year % 400 == 0); } int getDaysInMonth(int year, int month) { int daysInMonth[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; if (month == 1 && isLeapYear(year)) { return 29; } return daysInMonth[month]; } void printCalendarHeader() { printf(" Sun Mon Tue Wed Thu Fri Sat\n"); } void printMonth(int year, int month) { int z; int days = getDaysInMonth(year, month); int firstDayOfMonth = (year * 365 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400) % 7; int i,day; for (i = 0; i < month; i++) { firstDayOfMonth += getDaysInMonth(year, i); } firstDayOfMonth %= 7; printCalendarHeader(); for (i = 0; i < firstDayOfMonth; i++) { printf(" "); } for (day = 1; day <= days; day++) { printf("%5d", day); if ((firstDayOfMonth + day) % 7 == 0) { printf("\n"); } } } int main(void) { int choice; printf("1. 查询对应年份日历\n"); printf("2. 查询对应日期星期\n"); printf("3. 判断所输入年份是否为闰年\n"); printf("4. 退出\n"); scanf("%d", &choice); int year,month,week,day,day_x,day_z=0,c=0; int i,j,k,l,m,n,b; char a; start: switch (choice) { case 1: printf("请输入年份:"); scanf("%d", &year); int month; int z; printf("1.单列输出\n2.双列输出\n"); scanf("%d",&z); for (month = 0; month < 12; month++) { printf("\n %d月\n", month + 1); printMonth(year, month); } break; case 2: printf("请输入该查询的年份:\n"); scanf("%d",&year); printf("请输入该查询的月份:\n"); scanf("%d",&month); printf("请输入该查询的日期: \n"); scanf("%d",&day); if(year<1 || year>9999) { printf("输入年份错误,请重新输入:"); scanf("%d",&year); } if(month<1 || month>12) { printf("输入月份错误,请重新输入:"); scanf("%d",&month); } if(day<1 || day>31) { printf("输入日期错误,请重新输入:"); scanf("%d",&day); } if(month<3) { year--; month+=12; } if(year==1582 && month==10) { day_x=21; if(day>=15) { k=year%100;j=year/100;l=day;m=month; n=(l+(26*(m+1)/10)+k+(k/4)+(j/4)+5*j)%7; switch(n) { case 0: printf("星期六"); break; case 1: printf("星期日"); break; case 2: printf("星期一"); break; case 3: printf("星期二"); break; case 4: printf("星期三"); break; case 5: printf("星期四"); break; case 6: printf("星期五"); break; } break; } else { l=day+10; k=year%100;j=year/100;m=month; n=(l+(26*(m+1)/10)+k+(k/4)+(j/4)+5*j)%7; switch(n) { case 0: printf("星期六"); break; case 1: printf("星期日"); break; case 2: printf("星期一"); break; case 3: printf("星期二"); break; case 4: printf("星期三"); break; case 5: printf("星期四"); break; case 6: printf("星期五"); break; } } break; } else { k=year%100;j=year/100;l=day;m=month; n=(l+(26*(m+1)/10)+k+(k/4)+(j/4)+5*j)%7; switch(n) { case 0: printf("星期六"); break; case 1: printf("星期日"); break; case 2: printf("星期一"); break; case 3: printf("星期二"); break; case 4: printf("星期三"); break; case 5: printf("星期四"); break; case 6: printf("星期五"); break; } } break; case 3: printf("请输入年份:\n"); scanf("%d",&year); if(year%4==0 && year%100!=0 || year%400==0) { printf("%d是闰年\n",year); } else { printf("%d不是闰年\n",year); } break; case 4: a=choice; if(a==4) { return 0; } break; default: printf("无效的选择,请重新输入(1~4):\n"); scanf("%d",&choice); do { if(choice>4 || choice==0) { printf("无效选择,请重新输入:"); continue; } else { break; } } while(choice<=4 && choice!=0); goto start; } return 0; }