输入一个日期(年月日),输出该日期的后天。用C语言实现。

对于这个问题,首先想到后天就是日再加2,那么如果输入的这个日期是每个月的前些天,输出结果就是年,月,日+2.这么简单。但是如果输入的这个日期是月末的两天,那月份一定会加1,如果这个月是12月,那年份也要加1,月份变为1,日期也会改变。而且,每个月的天数都不一样,更需要注意的是2月还分闰年和平年,一个29天一个28天。

所以,解决这个问题首先要对所有可能的日期进行分类。

我初步分为:2月,12月,大月(31天),小月(30天)四个大类。其中2月再细分为28和29天。

其次,再对这些月再分为是否是月末的两天(牵扯到年月的改变)。

接下来看代码:

#include 
#include int main()
{printf("请输入年月日,以空格隔开,回车结束\n");int year,mounth,day;scanf("%d%d%d",&year,&mounth,&day);/*//自定义的函数。用来做月份不需要变,只变日的输出。希望可以简化代码量int out(year,mounth,day){printf("%d %d %d",year,mounth,day+2);}*///先分离每年的2月if(mounth==2){//如果是闰年的2月,每月29天if(year%4==0){//如果是月末的两天,输出的月份会加一if(day>=28){printf("%d %d %d",year,mounth+1,day+2-29);}//不是月末的;两天,输出依然是本月,只改变日else{printf("%d %d %d",year,mounth,day+2);}}//如果是平年的2月,每月28天else{//并且是月末的两天,输出的月份会加1if(day>=27){printf("%d %d %d",year,mounth+1,day+2-28);}//不是月末的那两天,输出依然是本月,只改变日else{printf("%d %d %d",year,mounth,day+2);}}}//再处理每年的12月else if(mounth==12){//如果是月末的两天,输出的年份会加1,月份会变成1.日期也会变if(day>=30){printf("%d %d %d",year+1,1,day+2-31);}//不是月末的那两天,输出依然是本月,只改变日else{printf("%d %d %d",year,mounth,day+2);}}//再处理其他的大月,31天else if(mounth==1||mounth==3||mounth==5||mounth==7||mounth==8||mounth==10){//如果是月末的两天,月份会加1.日期也会变if(day>=30){printf("%d %d %d",year,mounth+1,day+2-31);}//不是月末的那两天,输出依然是本月,只改变日else{printf("%d %d %d",year,mounth,day+2);}}//最后处理小月,30天else if(mounth==4||mounth==6||mounth==9||mounth==11){//如果是月末的两天,月份会加1.日期也会变if(day>=29){printf("%d %d %d",year,mounth+1,day+2-30);}//不是月末的那两天,输出依然是本月,只改变日else{printf("%d %d %d",year,mounth,day+2);}}//再做一个简单的异常处理else if(mounth>12||mounth<1||day<1||day>31){printf("输入有误,请重启程序再输入正确的日期");}return 0;
}

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部