C语言编写程序计算某年某月某日是该年中的第几天(3种方法)
程序员文章站
2024-02-02 18:27:22
...
C语言编写程序计算某年某月某日是该年中的第几天
编写程序计算某年某月某日是该年中的第几天
例如输入fool girl 的出生日期1999-5-27
输出147
第一种switch语句代码实现
int year,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)
{
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
sum+=31;
break;
case 4:case 6:case 9:case 11:
sum+=30;
break;
case 2:sum+=28;
}
sum+=day; //如果是闰年,3月之后的都需要+1
if(year%400==0||year%4==0&&year%100!=0&&month>2)
sum+=1;
printf("%d ",sum);
}
第2种(将之前的月天数直接给出)
int year, month, day,sum=0;
scanf("%d-%d-%d",&year,&month,&day);
switch(month)
{
case 1: sum=0; break;
case 2: sum=31; break;
case 3: sum=59; break;
case 4: sum=90; break;
case 5: sum=120; break;
case 6: sum=151; break;
case 7: sum=181; break;
case 8: sum=212; break;
case 9: sum=243; break;
case 10: sum=273; break;
case 11: sum=304; break;
case 12: sum=334; break;
}
sum+=day;
if(year%4==0&&year%100!=0||year%400==0&&month>2)
sum++;
printf("%d",sum);
第3种最简方法(纯属个人认为)
int a[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;
else a[0]=day;
//将day存放到a[0]的位置,方便后续统计,如果是闰年,需要将2月份改为29天
for(i=0;i<month;i++)
sum+=a[i];
//因为a[0]存放的是day,所以就可以直接从a[0]遍历相加
printf("%d ",sum);
第3种运算实例
第3种扩展方法(总天数倒着减)
int year,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); //天数减去该月的该天之后的天数
上一篇: UBUNTU安装PHP,即所谓得LAMP
下一篇: 逻辑运算的短路特性(&&,||)