C语言编写程序计算某年某月某日是该年中的第几天
编写程序计算某年某月某日是该年中的第几天
例如输入fool girl 的出生日期1999-5-27
输出147
第一种switch语句代码实现
intyear,month,day,sum=0,i; scanf("%d-%d-%d",&year,&month,&day); if(month==1) //如果是1月,直接输出day就行printf("%d ",day); else{ for(i=1;i<month;i++) switch(i) { case1:case3:case5:case7:case8:case10:case12: sum+=31; break; case4:case6:case9:case11: sum+=30; break; case2:sum+=28; } sum+=day; //如果是闰年,3月之后的都需要+1if(year%400==0||year%4==0&&year%100!=0&&month>2) sum+=1; printf("%d ",sum); }
第二种方法(将之前的月天数直接给出)
intyear, month, day,sum=0; scanf("%d-%d-%d",&year,&month,&day); switch(month) { case1: sum=0; break; case2: sum=31; break; case3: sum=59; break; case4: sum=90; break; case5: sum=120; break; case6: sum=151; break; case7: sum=181; break; case8: sum=212; break; case9: sum=243; break; case10: sum=273; break; case11: sum=304; break; case12: sum=334; break; } sum+=day; if(year%4==0&&year%100!=0||year%400==0&&month>2) sum++; printf("%d",sum);
第三种最简方法(纯个人认为)
inta[13]={0,31,28,31,30,31,30,31,31,30,31,30,31},year,month,day,sum=0,i; //数组下标和月份一一对应,内容为对应月份的天数scanf("%d-%d-%d",&year,&month,&day); if(year%400==0||year%4==0&&year%100!=0) a[0]=day,a[2]=29; elsea[0]=day; //将day存放到a[0]的位置,方便后续统计,如果是闰年,需要将2月份改为29天for(i=0;i<month;i++) sum+=a[i]; //因为a[0]存放的是day,所以就可以直接从a[0]遍历相加printf("%d ",sum);
第三种运算实例
第三种拓展方法(总天数倒着数)
intyear,month,day,sum=365,i,a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; scanf("%d-%d-%d",&year,&month,&day); if(year%400==0||year%4==0&&year%100!=0) //闰年366天a[2]=29,sum=366; //因为是从a[12]开始,所以a[0]就用不到了for(i=12;i>month;i--) //从12月份开始往前减sum-=a[i]; printf("%d ",sum-a[month]+day); //天数减去该月的该天之后的天数