思路:根据题目可知,我们要通过给定的日期来计算是该年的第几天,按照要求输入,在年月日之间通过-来分隔,因此在scanf中%d与%d之间需要有“-”。将数据输入后,我们要根据年份来判断该年是否为闰年,在计算二月的天数的时候可以收到正确的数据。
方法一:使用switch语句
#include<stdio.h>
int main()
{
int year,month,day;
int s=0;
scanf("%d-%d-%d", &year,&month,&day);
switch(month)
{//case匹配到且没有break的话,会执行到结束
case 12: s+=30; //加上11月的30天
case 11: s+=31; //加上10月的31天
case 10: s+=30;
case 9: s+=31;
case 8: s+=31;
case 7: s+=30;
case 6: s+=31;
case 5: s+=30;
case 4: s+=31;
case 3: s+=28; //先按平年算,加上2月的28天
case 2: s+=31; //加上 1月的31天
case 1: s+=day; //加上当月天数
}
if((year%4==0 && year%100!=0 || year%400==0) && month>=3)//若为闰年的话,就多加一天
s++;
printf("%d\n",s);
return 0;
}
方法二:使用数组存储一年中每个月的天数,闰年单独加一次。
#include<stdio.h>
int main()
{
int num[12]= {31,28,31,30,31,30,31,31,30,31,30,31};
int year,month,day,sum;
scanf("%d-%d-%d",&year,&month,&day);
sum=0;
if((year%4==0&&year%100!=0)||year%400==0)//判断是否为闰年
{
for(int i = 0; i < month-1; i++)
{
if(i==1)//闰年且二月,不需要加数组中的28,单独加一次29
sum = sum + 29;
else
sum = sum + num[i];
}
sum = sum + day;
printf("%d\n",sum);
}
else
{//平年的话正常相加
for(int i = 0; i < month-1; i++)
sum = sum + num[i];
sum = sum + day;
printf("%d\n",sum);
}
return 0;
}