首先考虑要用到switch语句,因为有十二个月份,如果用if语句太过于复杂
在switch里面,进行一个简单的加法就可以计算出是几天了;当然我们必须考虑是否是润年,这里只要记得瑞年的判断语句,就比较简单,因为它们只相差一天,所以使用if语句就可以进行输出了,代码如下:
#include
// 输入某年某月某日,判断这一天是这一年的第几天
//这是又缺陷的,没有仔细判断输入的月份不合规则的情况
int main()
{
int year,month,day,sum;
printf("请输入您想查询的年月日(使用英文逗号隔开):\n");
scanf("%d,%d,%d",&year,&month,&day);
if(month>12||day>31||month<0||day<0||year<0)
{
printf("您输入的日期不合法");
return 1;
}
switch(month)
{
case 1: sum=day; break;
case 2: sum=31+day; break; //29
case 3: sum=60+day; break;
case 4: sum=91+day; break;
case 5: sum=121+day;break;
case 6: sum=152+day;break;
case 7: sum=182+day;break;
case 8: sum=213+day;break;
case 9: sum=244+day;break;
case 10:sum=274+day;break;
case 11:sum=305+day;break;
case 12:sum=335+day;break;
default: printf("请输入正确的日期");break;
}
if(month<3)
{
printf("%d年%d月%d日是这年的第%d天",year,month,day,sum);
}
else if((year%4==0&&year%100!=0)||year%400==0) //是四的公倍数,但不是100的公倍数,或者是400的公倍数
{
printf("%d年%d月%d日是这年的第%d天",year,month,day,sum);
}
else
printf("%d年%d月%d日是这年的第%d天",year,month,day,sum-1);
return 0;
}