这个题有一个难点,首先是要判断是不是闰年,然后再判断2月份有没有29号。
代码如下。
#include <stdio.h>
int main()
{
int y,m,d,e,sum=0;//分别为年,月,日,总天数
printf("\n请输入年月日,格式为:年 月 日。\n");
scanf("%d%d%d",&y,&m,&d);
if(y%4==0&&(y%100!=0||y%400==0))// 判断是不是闰年
e=1;
else
e=0;
switch(m)
{
case 1:if(d>0&&d<=31)sum=0;
else
{printf("输入错误,请重新输入日期(1月在1-31日之间)\n");
return 0;}
break;
case 2:if(d>0&&d<=29&&e==1)//2月份分闰年和非闰年
sum=31;
if(d>0&&d<=29&&e==0)
sum=31;
if((d<=0||d>=29)&&e==0)
{printf("输入错误,非闰年2月日期为1-28\n");
return 0;}
if((d<=0||d>=30)&&e==1)
{printf("输入错误,闰年2月日期为1-29\n");
return 0;}
break;
case 3:if(d>0&&d<=31)sum=31+29;
else
{printf("输入错误,请重新输入日期(3月在1-31日之间)\n");
return 0;}
break;
case 4:if(d>0&&d<=30)sum=31+29+31;
else
{printf("输入错误,请重新输入日期(4月在1-30日之间)\n");
return 0;}
break;
case 5:if(d>0&&d<=31)sum=31+29+31+30;
else
{printf("输入错误,请重新输入日期(5月在1-31日之间)\n");
return 0;}
break;
case 6:if(d>0&&d<=30)sum=31+29+31+30+31;
else
{printf("输入错误,请重新输入日期(6月在1-30日之间)\n");
return 0;}
break;
case 7:if(d>0&&d<=31)sum=31+29+31+30+31+30;
else
{printf("输入错误,请重新输入日期(7月在1-31日之间)\n");
return 0;}
break;
case 8:if(d>0&&d<=31)sum=31+29+31+30+31+30+31;
else
{printf("输入错误,请重新输入日期(8月在1-31日之间)\n");
return 0;}
break;
case 9:if(d>0&&d<=30)sum=31+29+31+30+31+30+31+31;
else
{printf("输入错误,请重新输入日期(9月在1-30日之间)\n");
return 0;}
break;
case 10:if(d>0&&d<=31)sum=31+29+31+30+31+30+31+31+30;
else
{printf("输入错误,请重新输入日期(10月在1-31日之间)\n");
return 0;}
break;
case 11:if(d>0&&d<=30)sum=31+29+31+30+31+30+31+31+30+31;
else
{printf("输入错误,请重新输入日期(11月在1-30日之间)\n");
return 0;}
break;
case 12:if(d>0&&d<=31)sum=31+29+31+30+31+30+31+31+30+31+30;
else
{printf("输入错误,请重新输入日期(12月在1-31日之间)\n");
return 0;}
break;
default:
printf("输入错误,请重新输入月份(在1-12月之间)\n");return 0;
}
if(y%4==0&&(y%100!=0||y%400==0))// 判断是不是闰年
e=1;
else
e=0;
if(e==1)
sum=sum+d;
else
{
if(m<=2)
sum=sum+d;
else
sum=sum+d-1;
}
printf("这是这一年的第 %d 天。\n",sum);
}