谁可以给我详细解释下这题目

2024-11-25 01:35:40
推荐回答(3个)
回答1:

#include

int judge(int y,int m,int d)
{
int flag; /*用来返回判断结果,flag=0表示输入的日期不对,flag=1表示输入的日期正确*/

if(m<1 || m >12) /*月份当然只能是1-12*/
return 0;

switch(m)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
if(d<1 || d >31) /*大月有31天*/
flag=0;
else flag=1;
break;
case 4:
case 6:
case 9:
case 11:
if(d<1 || d >30) /*小月只有30天*/
flag=0;
else flag=1;
break;
case 2: /*2月平年28天,闰年29天*/
if(y%4==0&&y%100!=0||y%400==0) /*能被4整除并且不能被100整除或者能被400整除就是闰年*/
{
if(d<1 || d>29) /*闰年29天*/
flag=0;
else
flag=1;}
else
{if(d<1||d>28) /*平年28天*/
flag=0;
else
flag=1;}
break;

}
return flag;
}

main()
{
int y,m,d;
scanf("%d %d %d",&y,&m,&d);
if(judge(y,m,d))
{
switch(m)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
if(d<31) /*没到月底,日加一天*/
{d=d+1;}
else if(m<12) /*到了月底,小于12月只改月和日,比如2007年10月31日->2007年11月1日*/
{m=m+1;d=1;}
else /*12月底,改年,月和日,比如2007年12月31日->2008年1月1日*/
{y++;m=1;d=1;}

break;
case 4:
case 6:
case 9:
case 11:
if(d<30) /*没到月底,日加一天*/
d++;
else /*到了月底,改月和日*/
{d=1;m++;}
break;
case 2:
if(y%4==0&&y%100!=0||y%400==0)
{
/*闰年29天*/
if(d<29) /*没到月底,日加一天*/
d++;
else /*到了月底,改月和日*/
{d=1;m++;}
}
else
/*平年28天,不是29天*/
{if(d<28)/*没到月底,日加一天*/
d++;
else /*到了月底,改月和日*/
{d=1;m++;}
break; }}

printf("next day is %d %d %d\n",y,m,d);}
else
printf("not valid date");
getch();
}

回答2:

return flag
意即返回flag的值(判断是否是合法的日期)

d,m分别表示日,月,如果是一个月的最后一天
那么d=1,m++ (相当于m=m+1)就表示是下一个月的一号
如果不是最后一天,那么只要d++就行了

回答3:

哇靠~~完全看不懂