#include<stdio.h> #define CURRENT_YEAR 2015 #define CURRENT_MON 6 #define CURRENT_DAY 21 enum month{Jan=1,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec}; int year; //输入的年份 enum month mon; //输入的月份 int day; //输入的日 int total_yday=0; //相差满年天数 int total_mday=0; //相差不满年天数 int total_day =0; //相差总天数 int plus_mday[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//默认月份天数 int i,j; void greater_date() //比当前年份大 { total_yday=0; //重置相差满年天数 total_mday=0; //重置相差不满年天数 total_day =0; //重置相差总天数 for(i=CURRENT_YEAR+1;i<year;i++)//算出满年天数 { if((i%4==0 && i%100!=0) || (i%400 == 0)) total_yday=total_yday+366; else total_yday=total_yday+365; } if((CURRENT_YEAR%4==0 && CURRENT_YEAR%100!=0) || CURRENT_YEAR%400 ==0)//设置当前年份二月天数 plus_mday[2]=29; for(j=CURRENT_MON+1;j<13;j++) //当前预设月份到年尾天数 { total_mday=total_mday+plus_mday[j]; } total_mday=total_mday+plus_mday[CURRENT_MON]-CURRENT_DAY; //将当前月份不满月天数添加进total_mday,tot plus_mday[2]=28; //恢复二月默认天数28 if((year%4==0 && year%100!=0) || year%400==0) //设置输入年份二月份天数 plus_mday[2]=29; for(j=1;j<mon;j++) { total_mday=total_mday+plus_mday[j]; } total_mday=total_mday+day; total_day=total_yday+total_mday; total_day=total_day%7; } void smaller_date() //比当前年份小 { total_yday=0; //重置相差满年天数 total_mday=0; //重置相差不满年天数 total_day =0; //重置相差总天数 for(i=year+1;i<CURRENT_YEAR;i++) { if((i%4==0 && i%100!=0) || (i%400 == 0)) total_yday=total_yday+366; else total_yday=total_yday+365; } if((year%4==0 && year%100!=0) || year%400==0) //设置输入年份二月份天数 plus_mday[2]=29; for(j=mon+1;j<13;j++) //输入月份到年尾天数 { total_mday=total_mday+plus_mday[j]; } total_mday=total_mday+plus_mday[mon]-day; //将输入月份不满月天数添加进total_mday,tot plus_mday[2]=28; //恢复二月默认天数28 if((CURRENT_YEAR%4==0 && CURRENT_YEAR%100!=0) || CURRENT_YEAR%400 ==0) //设置当前年份二月天数 plus_mday[2]=29; for(j=1;j<CURRENT_MON;j++) //计算当前预设日期已过当年天数 { total_mday=total_mday+plus_mday[j]; } total_mday=total_mday+CURRENT_DAY; total_day=total_yday+total_mday; total_day = (7-total_day%7)%7; } void equal_date() //年份与预设年份相同 { total_yday=0; //重置相差满年天数 total_mday=0; //重置相差不满年天数 total_day =0; //重置相差总天数 if(mon<CURRENT_MON)//比当前预设月份小 { for(i=mon+1;i<CURRENT_MON;i++) { total_mday=total_mday+plus_mday[i]; } total_mday=total_mday+plus_mday[mon]-day+CURRENT_DAY; total_day=total_mday; total_day=(7-total_day%7)%7; } if(mon>CURRENT_MON) //比当前预设月份大 { for(i=CURRENT_MON+1;i<mon;i++) { total_mday=total_mday+plus_mday[i]; } total_mday=total_mday+plus_mday[CURRENT_MON]-CURRENT_DAY+day; total_day=total_mday; total_day=total_day%7; } if(mon==CURRENT_MON) { if(day>=CURRENT_DAY) { total_day=day-CURRENT_DAY; total_day%=7; } if(day<CURRENT_DAY) { total_day=CURRENT_DAY-day; total_day=(7-total_day%7); } } } void get_date() //输入日期 { year=0; day=0; mon=0; printf("Input year:"); scanf("%d",&year); int i,j; getchar(); while(1) //get month { printf("Input month:"); scanf("%d",(int*)&mon); getchar(); if(mon>0&&mon<=12) break; } while(1) //get day { printf("Input day:"); scanf("%d",&day); getchar(); if(day>0&&day<=31) break; } } void output_weekday() { switch(total_day) { case 1: printf("%d年%d月%d日是星期一 ",year,mon,day); break; case 2: printf("%d年%d月%d日是星期二 ",year,mon,day); break; case 3: printf("%d年%d月%d日是星期三 ",year,mon,day); break; case 4: printf("%d年%d月%d日是星期四 ",year,mon,day); break; case 5: printf("%d年%d月%d日是星期五 ",year,mon,day); break; case 6: printf("%d年%d月%d日是星期六 ",year,mon,day); break; case 0: printf("%d年%d月%d日是星期天 ",year,mon,day); break; default: break; } } int main() { while(1) { get_date(); if(year>CURRENT_YEAR) greater_date(); if(year<CURRENT_YEAR) smaller_date(); if(year==CURRENT_YEAR) equal_date(); output_weekday(); } }