C语言编写程序计算某年某月某日是该年中的第几天
编写程序计算某年某月某日是该年中的第几天
例如输入fool girl 的出生日期1999-5-27
输出147
闰年条件
判断一个年份是否为闰年,通常有以下三个条件:
- 如果该年份能够被400整除,则是闰年。
- 如果该年份能够被4整除但不能被100整除,则也是闰年。
- 其他情况则不是闰年。
其中,第一个条件是根据闰年的定义来判断的,即每四年一闰,但是每百年不闰,每四百年再闰。因此,能被400整除的年份必然是闰年。
第二个条件则是对第一个条件的补充,因为能被4整除但不能被100整除的年份也是闰年。例如,2000年就是一个能被400整除的年份,是闰年;而1900年虽然能被4整除,但是也能被100整除,因此不是闰年。
第三个条件则是其他情况,即不能被4整除、或者能被100整除但不能被400整除的年份都不是闰年。
第一种switch语句代码实现
int year,month,day,sum=0,i;
scanf("%d-%d-%d",&year,&month,&day);
//如果是1月,直接输出day就行
if(month==1)
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 % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
if (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;
//如果是闰年,3月之后的都需要+1
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
if (month > 2) {
sum += 1;
}
}
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);
//将day存放到a[0]的位置,方便后续统计,如果是闰年,需要将2月份改为29天
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
a[0]=day;
a[2]=29;
}else{
a[0]=day;
}
//因为a[0]存放的是day,所以就可以直接从a[0]遍历相加
for(i=0;i<month;i++){
sum+=a[i];
}
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 % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
a[2]=29;
sum=366;
}
//从12月份开始往前减
for(i=12;i>month;i--){
sum-=a[i];
}
//天数减去该月的天数
printf("%d ",sum-a[month]+day);