您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > C++-由日期得到星期几--三种答案--都能运行
第一种#includeiostream.hvoidmain(void){intflag=0,year,month,day;longn;//输入日期,并检验日期的合法性,直到输入正确为止cout请输入日期(年月日):;do{if(flag!=0)cout\n\n输入日期无效!请重新输入:;cinyearmonthday;flag=0;if(year1)//检验年{flag=1;cout年份大于零\n;continue;}if(month1||month12)//检验月{flag=1;cout月份为1—12\n;continue;}switch(month)//检验日{case1:case3:case5:case7:case8:case10:case12:if(day31){flag=1;cout大月的年份为1—31!\n;continue;}break;case2:if((year%4==0)&&year%100!=0||(year%400==0)){if(day29){flag=1;cout闰年2月的天数为1-29\n;continue;}}elseif(day28){flag=1;cout非闰年2月的天数为1-28\n;continue;}break;case4:case6:case9:case11:if(day30){flag=1;cout小月的天数为1-30\n;continue;}}}while(flag);//计算公元1年1月1日到输入日期的天数n=(year-1)*365L;//公元1年到输入日期的天数(不考虑闰年)n+=(year-1)/4;//考虑闰年n-=(year-1)/100;n+=(year-1)/400;switch(month-1)//输入日期那年1月至输入日期那年那月的天数{case11:n+=30;case10:n+=31;case9:n+=30;case8:n+=31;case7:n+=31;case6:n+=30;case5:n+=31;case4:n+=30;case3:n+=31;case2:if((year%4==0)&&year%100!=0||(year%400==0))n+=29;elsen+=28;case1:n+=31;}n+=day;//输入日期那年那月的天数n%=7;//折成星期几。若为0,则为星期天//输出星期几cout输入日期是星期;switch(n){case0:cout天\n;break;case1:cout一\n;break;case2:cout二\n;break;case3:cout三\n;break;case4:cout四\n;break;case5:cout五\n;break;case6:cout六\n;break;}}第二种#includeiostream.hintIsLeap(intyear);intCheck(intyear,intmonth,intday);intWeek(intyear,intmonth,intday);voidOutputError(interrorCode);voidOutputWeek(intweek);voidmain(void){intflag,year,month,day,week;//输入日期,并检验日期的合法性,直到输入正确为止cout请输入日期(年月日):;cinyearmonthday;while(flag=Check(year,month,day)){OutputError(flag);cout\n\n输入日期无效!请重新输入:;cinyearmonthday;}//计算日期是星期几week=Week(year,month,day);//输出日期是星期几OutputWeek(week);}intCheck(intyear,intmonth,intday){if(year1)return1;//检验年if(month1||month12)return2;//检验月if(day1)return7;//检验日switch(month){case1:case3:case5:case7:case8:case10:case12:if(day31)return3;break;case2:if(IsLeap(year)){if(day29)return5;}elseif(day28)return6;break;case4:case6:case9:case11:if(day30)return4;}return0;}intIsLeap(intyear){if((year%4==0)&&year%100!=0||(year%400==0))return1;return0;}intWeek(intyear,intmonth,intday){longintn;//计算公元1年1月1日到输入日期的天数n=(year-1)*365L;//公元1年到输入日期的天数(不考虑闰年)n+=(year-1)/4;//考虑闰年n-=(year-1)/100;n+=(year-1)/400;switch(month-1)//输入日期那年1月至输入日期那年那月的天数{case11:n+=30;case10:n+=31;case9:n+=30;case8:n+=31;case7:n+=31;case6:n+=30;case5:n+=31;case4:n+=30;case3:n+=31;case2:if((year%4==0)&&year%100!=0||(year%400==0))n+=29;elsen+=28;case1:n+=31;}n+=day;//输入日期那年那月的天数n%=7;//折成星期几。若为0,则为星期天returnn;}voidOutputError(intErrorCode){switch(ErrorCode){case1:cout年非法(year0)\n;break;case2:cout月非法(month1或month12)\n;break;case3:cout日非法(大月天数超过31)\n;break;case4:cout日非法(小月天数超过30)\n;break;case5:cout日非法(闰年二月天数超过29)\n;break;case6:cout日非法(非闰年二月天数超过28)\n;break;case7:cout日非法(天数小于1)\n;break;default:cout其他错误\n;}}voidOutputWeek(intweek){cout日期是星期;switch(week){case0:cout天\n;break;case1:cout一\n;break;case2:cout二\n;break;case3:cout三\n;break;case4:cout四\n;break;case5:cout五\n;break;case6:cout六\n;break;}}第三种#includeiostream.h#includestdlib.hclassCDate{intyear,month,day,week;intIsLeap(void);intWeek(void);voidOutputError(intErrorCode);intCheck();public:CDate(intm=1,intd=1,inty=2001){year=y;month=m;day=d;if(Check()){year=2001;month=1;day=1;cout\n初始生日无效!;exit(1);}week=Week();}voidInputDate();voidOutputWeek(void);};intCDate::IsLeap(void){if((year%4==0)&&year%100!=0||(year%400==0))return1;elsereturn0;}intCDate::Week(void){longintn;//计算公元1年1月1日到输入日期的天数n=(year-1)*365L;//公元1年到输入日期的天数(不考虑闰年)n+=(year-1)/4;//考虑闰年n-=(year-1)/100;n+=(year-1)/400;switch(month-1)//输入日期那年1月至输入日期那年那月的天数{case11:n+=30;case10:n+=31;case9:n+=30;case8:n+=31;case7:n+=31;case6:n+=30;case5:n+=31;case4:n+=30;case3:n+=31;case2:if((year%4==0)&&year%100!=0||(year%400==0))n+=29;elsen+=28;case1:n+=31;}n+=day;//输入日期那年那月的天数n%=7;//折成星期几。若为0,则为星期天returnn;}intCDate::Check(void){if(year1)return1;//检验年if(month1||month12)return2;//检验月if(day1)return7;//检验日switch(month){case1:case3:case5:case7:case8:case10:case12:if(day31)return3;break;case2:if(IsLeap()){if(day29)return5;}elseif(day28)return6;break;case4:case6:case9:case11:if(day30)return4;}return0;}voidCDate::OutputError(intErrorCode){switch(ErrorCode){case1:cout年非法(year0)\n;break;case2:cout月非法(month1或month12)\n;break;case3:cout日非法(大月天数超过31)\n;break;case4:cout日非法(小月天数超过30)\n;break;case5:cout日非法(闰年二月天数超过29)\n;break;case6:cout日非法(非闰年二月天数超过28)\n;break;case7:cout日非法(天数小于1)\n;break;default:cout其他错误\n;}}voidCDate::OutputWeek(){coutyear年month月day日,生日是星期;switch(week){case0:cout天\n;break;case1:cout一\n;break;case2:cout二\n;break;case3:cout三\n;break;case4:cout四\n;break;case5:cout五\n;break;case6:cout六\n;break;}}voidCDate::InputDate(void){intflag;cout请输入日期(年月日):;cinyearmonthday;while(flag=Check()){OutputError(flag);cout\n\n输入日期无效!请重新输入:;cinyearmonthday;}week=Week();//计算生日是星期几}voidmain(void){CDated(4,5,2001);d.OutputWeek();//输出生日是星期几d.InputDate();//输入生日,并检验日期的合法性,直到输入正确为止d.OutputWeek();//输出生日是星期几CDated1(4,19);d1.OutputW
本文标题:C++-由日期得到星期几--三种答案--都能运行
链接地址:https://www.777doc.com/doc-5385372 .html