#include int main(void) { int x; int j; printf("1.查询某年某月是星期几,并判断是否为闰年\n"); printf("2.打印单列日历\n"); printf("3.打印双列日历\n"); printf("4.退出\n"); scanf("%d",&x); int year; int month; int day; int week; int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int c; int y; int k=1; int a=2; int dayss=1; switch(x) { case 1: scanf("%d-%d-%d",&year,&month,&day); if(((year%4==0)&&(year%100!=0))||(year%400==0)) { days[2]=29; printf("闰年\n"); } else printf("平年\n"); if((month==1&&day<=31)||(days[2]==29&&month==2&&day<=29)||(days[2]==28&&month==2&&day<=28)||(month==3&&day<=31)||(month==4&&day<=30)|| (month==5&&day<=31)||(month==6&&day<=30)||(month==7&&day<=31)||(month==8&&day<=31)||(month==9&&day<=30)||(year!=1582&&month==10&&day<=31)||(month==11&&day<=30)|| (month==12&&day<=31)||(year==1582&&month==10&&day!=5&&day!=6&&day!=7&&day!=8&&day!=9&&day!=10&&day!=11&&day!=12&&day!=13&&day!=14)) { if (month == 1 || month == 2) year--, month += 12; c = year / 100; y = year - c * 100; if(year>1582) week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + day - 1; else if(year==1582&&month>10) week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + day - 1; else if((year==1582&&month==10)&&day>4) week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + day - 1; else week=(day+1+2*month+3*(month+1)/5+year+year/4+5)%7; if(month==13||month==14) year++; while(week < 0) week += 7; week %= 7; switch (week) { 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; case 0:printf("星期天\n"); break; }break; } else printf("输入错误"); case 2: scanf("%d-%d-%d",&year,&month,&day); if((month==1&&day<=31)||(days[2]==29&&month==2&&day<=29)||(days[2]==28&&month==2&&day<=28)||(month==3&&day<=31)||(month==4&&day<=30)|| (month==5&&day<=31)||(month==6&&day<=30)||(month==7&&day<=31)||(month==8&&day<=31)||(month==9&&day<=30)||(year!=1582&&month==10&&day<=31)||(month==11&&day<=30)|| (month==12&&day<=31)||(year==1582&&month==10&&day!=5&&day!=6&&day!=7&&day!=8&&day!=9&&day!=10&&day!=11&&day!=12&&day!=13&&day!=14)) { for( j=1;j<=12;j++) { month=j; printf("\n"); printf("%d 月\n",month); printf("周日 周一 周二 周三 周四 周五 周六\n"); if (month == 1 || month == 2) year--, month += 12; c = year / 100; y = year - c * 100; if(year>1582) week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + 1 - 1; else if(year==1582&&month>10) week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + 1 - 1; else if((year==1582&&month==10)&&day>4) week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + 1 - 1; else week=(1+1+2*month+3*(month+1)/5+year+year/4+5)%7; if(month==13||month==14) year++; while(week < 0) week += 7; week %= 7; if(year==1582&&month==10) week=1; switch (week) { case 1:printf(" "); break; case 2:printf(" "); break; case 3:printf(" "); break; case 4:printf(" "); break; case 5:printf(" "); break; case 6:printf(" "); break; } for(day=1;day<=days[j];day++) { month=j; while((year==1582&&month==10)&&(day==5||day==6||day==7||day==8||day==9||day==10||day==11||day==12||day==13||day==14)) day++; if (month == 1 || month == 2) year--, month += 12; c = year / 100; y = year - c * 100; if(year>1582) week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + day - 1; else if(year==1582&&month>10) week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + day - 1; else if((year==1582&&month==10)&&day>4) week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + day - 1; else week=(day+1+2*month+3*(month+1)/5+year+year/4+5)%7; if(month==13||month==14) year++; while(week < 0) week += 7; week %= 7; if(week==6) printf("%2d\n",day); else printf("%2d ",day); } }break; }else printf("输入错误"); case 3: scanf("%d-%d-%d",&year,&month,&day); if((month==1&&day<=31)||(days[2]==29&&month==2&&day<=29)||(days[2]==28&&month==2&&day<=28)||(month==3&&day<=31)||(month==4&&day<=30)|| (month==5&&day<=31)||(month==6&&day<=30)||(month==7&&day<=31)||(month==8&&day<=31)||(month==9&&day<=30)||(year!=1582&&month==10&&day<=31)||(month==11&&day<=30)|| (month==12&&day<=31)||(year==1582&&month==10&&day!=5&&day!=6&&day!=7&&day!=8&&day!=9&&day!=10&&day!=11&&day!=12&&day!=13&&day!=14)) { for( j=1;j<=12;j+=2) {day=1; month=j; printf("\n"); printf("%d 月 %d月\n",month,month+1); printf("周日 周一 周二 周三 周四 周五 周六 周日 周一 周二 周三 周四 周五 周六\n"); if (month == 1 || month == 2) year--, month += 12; c = year / 100; y = year - c * 100; if(year>1582) week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + 1 - 1; else if(year==1582&&month>10) week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + 1 - 1; else if((year==1582&&month==10)&&day>4) week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + 1 - 1; else week=(1+1+2*month+3*(month+1)/5+year+year/4+5)%7; if(month==13||month==14) year++; while(week < 0) week += 7; week %= 7; if(year==1582&&month==10) week=1; switch (week) { case 1:printf(" "); break; case 2:printf(" "); break; case 3:printf(" "); break; case 4:printf(" "); break; case 5:printf(" "); break; case 6:printf(" "); break; } for(;day<=days[k];day++) { month=k; while((year==1582&&month==10)&&(day==5||day==6||day==7||day==8||day==9||day==10||day==11||day==12||day==13||day==14)) day++; if (month == 1 || month == 2) year--, month += 12; c = year / 100; y = year - c * 100; if(year>1582) week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + day - 1; else if(year==1582&&month>10) week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + day - 1; else if((year==1582&&month==10)&&day>4) week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + day - 1; else week=(day+1+2*month+3*(month+1)/5+year+year/4+5)%7; if(month==13||month==14) year++; while(week < 0) week += 7; week %= 7; if(week!=6) printf("%2d ",day); else { printf("%2d ",day); for( ;a<=12;a+=2) { month=a; if (month == 1 || month == 2) year--, month += 12; c = year / 100; y = year - c * 100; if(year>1582) week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + 1 - 1; else if(year==1582&&month>10) week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + 1 - 1; else if((year==1582&&month==10)&&day>4) week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + 1 - 1; else week=(1+1+2*month+3*(month+1)/5+year+year/4+5)%7; if(month==13||month==14) year++; while(week < 0) week += 7; week %= 7; if(year==1582&&month==10) week=1; switch (week) { case 1:printf(" "); break; case 2:printf(" "); break; case 3:printf(" "); break; case 4:printf(" "); break; case 5:printf(" "); break; case 6:printf(" "); break; }} for(;dayss<=days[a];dayss++) { month=a; while((year==1582&&month==10)&&(dayss==5||dayss==6||dayss==7||dayss==8||dayss==9||dayss==10||dayss==11||dayss==12||dayss==13||dayss==14)) dayss++; if (month == 1 || month == 2) year--, month += 12; c = year / 100; y = year - c * 100; if(year>1582) week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + dayss - 1; else if(year==1582&&month>10) week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + dayss - 1; else if((year==1582&&month==10)&&day>4) week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + dayss - 1; else week=(dayss+1+2*month+3*(month+1)/5+year+year/4+5)%7; if(month==13||month==14) year++; while(week < 0) week += 7; week %= 7; if(week==6) {printf("%2d\n",dayss);continue;} else printf("%2d ",dayss); } } } } break; case 4: break; default: printf("输入错误"); break; } } return 0; }