#include #include int main(){ int a; printf("1:查看日期为星期几,该年是否为闰年\n"); printf("2:单列输出该年日历\n"); printf("3:双列输出该年日历\n"); printf("0:输出0退出程序\n"); printf("请输出你想查询的序号\n"); scanf("%d",&a); switch(a){ case(0):break; case(1): while(1){ //星期计算方法:公元元年1月1日至指定日期总天数%7 int year,month,day; printf("请输入年(格式:0000年)\n"); scanf("%d",&year);//输入年份 if(year==0) break; if(year==1582&&month==10&&day>4&&day<15){ printf("输入有误,请重新输入\n\n\n"); continue;} //判断年的天数 int sumyear1=0;//表示从公元元年开始 ,表示闰年总数 if(year>1582){ for(int i=1;i<=year-1;i++){ if((i%4==0&&i%100!=0)||i%400==0)//公历判断闰年方法 sumyear1++; } } else{ for(int i=1;i<=year-1;i++){ if(i%4==0){ sumyear1++; } //儒略历判断闰年方法 } sumyear1+=5;//儒略历1582年公元元年是星期六,所以加上五天 } int sumday;//统计总天数 sumday=(year-1)*365+sumyear1;//统计至去年的总天数 // 判断公历与儒略历二月天数 int feb; if(year>1582){ if((year%4==0&&year%100!=0)||year%400==0){ printf("%d年是闰年\n\n",year); feb=29;} else{ printf("%d年是平年\n\n",year); feb=28;} } else{ if(year%4==0){ feb=29; printf("%d年是闰年\n\n",year);} else{ printf("%d年是平年\n\n",year); feb=28;} } int a[13]={0,31,feb,31,30,31,30,31,31,30,31,30,31}; printf("请输入月(格式:00月)\n"); scanf("%d",&month); if(month==0) break;//输入月份 //统计公元元年至去年总天数加本年一月至上月总天数 for(int i=1;i<=month-1;i++) sumday+=a[i];//统计完成 if(year==1582&&(month==11||month==12)) sumday+=11; printf("请输入日(格式:00日)\n\n"); scanf("%d",&day);//输入日 if(day==0) break; if(year==1582&&month==10&&day>4&&day<15){ printf("输入有误,请重新输入\n"); continue; } //从公元元年开始求星期 int week; if(year==1582&&month==10&&day>=15){ week=(sumday+day-10)%7; } else week=(sumday+day)%7; if(week!=0){ printf("%d年%d月%d日是星期%d\n\n",year,month,day,week); } else{ printf("%d年%d月%d日是星期日\n\n",year,month,day); } } break; case(2): while(1){/////////////重复 单列输出 //星期计算方法:公元元年1月1日至指定日期总天数%7 int year,month; printf("请输入年(格式:0000年)\n"); scanf("%d",&year);//输入年份 if(year==0) break; //判断年的天数 int sumyear1=0;//表示从公元元年开始 ,表示闰年总数 if(year>1582){ for(int i=1;i<=year-1;i++){ if((i%4==0&&i%100!=0)||i%400==0)//公历判断闰年方法 sumyear1++; } } else{ for(int i=1;i<=year-1;i++){ if(i%4==0){ sumyear1++; } //儒略历判断闰年方法 } sumyear1+=5;//儒略历1582年公元元年是星期六,所以加上五天 } int sumday;//统计总天数 sumday=(year-1)*365+sumyear1;//统计至去年的总天数 // 判断公历与儒略历二月天数 int feb; if(year>1582){ if((year%4==0&&year%100!=0)||year%400==0){ feb=29;} else{ feb=28;} } else{ if(year%4==0){ feb=29;} else{ feb=28;} } int a[13]={0,31,feb,31,30,31,30,31,31,30,31,30,31}; for(month=1;month<=12;month++){ //统计公元元年至去年总天数加本年一月至上月总天数 for(int i=1;i<=month-1;i++) sumday+=a[i];//统计完成 if(year==1582&&(month==11||month==12)) sumday+=11; int day=1,week; week=(sumday+day)%7; printf("\n------------------ %d 年 %d 月 ---------------------\n\n",year,month); printf("日 一 二 三 四 五 六\n\n"); ///放入1号 for(int j=1;j<=week;j++){ printf(" "); } //放入其他日期 当天日期加1号>=7 if(year==1582&&month==10){ for(int j=1;j<=a[month];j++){ printf("%d ", j); if((week+j)>=7){ printf("\n\n"); week-=7; } if(j==4){//单独判断1582 j+=10; week-=10; } } } else{ for(int j=1;j<=a[month];j++){ printf("%d ", j); if((week+j)>=7){ printf("\n\n"); week-=7; } } } } } case(3): while(1){/////////////重复 双列输出 //星期计算方法:公元元年1月1日至指定日期总天数%7 int year,month; printf("请输入年(格式:0000年)\n"); scanf("%d",&year);//输入年份 if(year==0) break; //判断年的天数 int sumyear1=0;//表示从公元元年开始 ,表示闰年总数 if(year>1582){ for(int i=1;i<=year-1;i++){ if((i%4==0&&i%100!=0)||i%400==0)//公历判断闰年方法 sumyear1++; } } else{ for(int i=1;i<=year-1;i++){ if(i%4==0){ sumyear1++; } //儒略历判断闰年方法 } sumyear1+=5;//儒略历1582年公元元年是星期六,所以加上五天 } int sumday;//统计总天数 sumday=(year-1)*365+sumyear1;//统计至去年的总天数 // 判断公历与儒略历二月天数 int feb; if(year>1582){ if((year%4==0&&year%100!=0)||year%400==0){ feb=29;} else{ feb=28;} } else{ if(year%4==0){ feb=29;} else{ feb=28;} } int a[13]={0,31,feb,31,30,31,30,31,31,30,31,30,31}; for(month=1;month<=12;month++){ //统计公元元年至去年总天数加本年一月至上月总天数 for(int i=1;i<=month-1;i++) sumday+=a[i];//统计完成 if(year==1582&&(month==11||month==12)) sumday+=11; int day=1,week; week=(sumday+day)%7; printf("\n--------------------------------------------\n\n"); printf("日 一 二 三 四 五 六 日 一 二 三 四 五 六 \n\n"); for(month=1;month<=12;month+=2){ ///放入1号 for(int j=1;j<=week;j++){ printf(" "); } //放入其他日期 当天日期加1号>=7 for(int j=1;j<=a[month+2];j++){ printf("%d ", j); if((week+j)>=7){ printf("\n\n"); week-=7; } } } for(month=2;month<=12;month+=2){ for(int j=1;j<=week;j++){ printf(" "); } //放入其他日期 当天日期加1号>=7 if(year==1582&&month==10){ for(int j=1;j<=a[month];j++){ printf("%d ", j); if((week+j)>=7){ printf("\n\n"); week-=7; } if(j==4){//单独判断1582 j+=10; week-=10; } } } else{ for(int j=1;j<=a[month];j++){ printf("%d ", j); if((week+j)>=7){ printf("\n\n"); week-=7; } } } } } } } return 0; }