//计算该日是该年的第几天
第一种:其实是改进后的,麻烦的在下面可以忽略
先判断是否是闰年,再用当前月份先减去1,减去之后的月份全部是满月,计算完之后再加上天数。
#include <stdio.h>
#include <iostream>
using namespace std;
//计算该日是该年的第几天
int main(void)
{
int year,month,day,sum = 0;//定义3个int型变量保存年,月,日,总天数初始值是0
bool isleap = false;
printf("请输入年月日:");
scanf("%d,%d,%d",&year,&month,&day);
printf("\n今天是%d年%d月%d日.\n",year,month,day);
//判断是否是闰年
if( (year%4 == 0 && year%100!=0)||(year%400 == 0))
{
isleap = true;
}
month -= 1;//当月是天数,没有包含完全,所以减1之后才是完整的一个月
while(month > 0)
{
if(month == 1|| month == 3 || month == 5 || month == 7 || month == 8 || month == 10)
{
sum += 31;
month--;
continue;
}
else if(month == 4 || month == 6|| month == 9 || month ==11)
{
sum += 30;
month--;
continue;
}
else if(month == 2)
{
if(isleap) sum +=29;
else sum += 28;
month--;
continue;
}
}
sum += day;
printf("\n今天是本年的第%d天.\n\n",sum);
getchar();
system("pause");
return 0;
}
输出结果:
第二种:有点麻烦,先判断是否是闰年,然后判断月份,求出和。
#include <stdio.h>
#include <iostream>
using namespace std;
//计算该日是该年的第几天
int main(void)
{
int year,month,day,sum = 0;//定义3个int型变量保存年,月,日,总天数初始值是0
bool isleap = false;
printf("请输入年月日:");
scanf("%d,%d,%d",&year,&month,&day);
printf("\n今天是%d年%d月%d日.\n",year,month,day);
//判断是否是闰年
if( year%4 == 0 && year%100!=0 ||(year%400 == 0))
{
isleap = true;
}
//遍历月份
switch(month)
{
case 1: sum += day;break;
case 2: sum += (day + 31); break;
case 3:
if(isleap)
{
sum += (day + 31 + 29);
break;
}
else
{
sum += (day + 31 + 28);
break;
}
case 4:
if(isleap)
{
sum += (day + 31*2 + 29);
break;
}
else
{
sum += (day + 31*2 + 28);
break;
}
case 5:
if(isleap)
{
sum += (day + 31*2 + 29 + 30);
break;
}
else
{
sum += (day + 31*2 + 28 + 30);
break;
}
case 6:
if(isleap)
{
sum += (day + 31*3 + 29 + 30);
break;
}
else
{
sum += (day + 31*3 + 28 + 30);
break;
}
case 7:
if(isleap)
{
sum += (day + 31*3 + 29 + 30*2);
break;
}
else
{
sum += (day + 31*3 + 28 + 30*2);
break;
}
case 8:
if(isleap)
{
sum += (day + 31*4 + 29 + 30*2);
break;
}
else
{
sum += (day + 31*4 + 28 + 30*2);
break;
}
case 9:
if(isleap)
{
sum += (day + 31*5 + 29 + 30*2);
break;
}
else
{
sum += (day + 31*5 + 28 + 30*2);
break;
}
case 10:
if(isleap)
{
sum += (day + 31*5 + 29 + 30*3);
break;
}
else
{
sum += (day + 31*5 + 28 + 30*3);
break;
}
case 11:
if(isleap)
{
sum += (day + 31*6 + 29 + 30*3);
break;
}
else
{
sum += (day + 31*6 + 28 + 30*3);
break;
}
case 12:
if(isleap)
{
sum += (day + 31*6 + 29 + 30*4);//1,3,5,7,8,10是6个31天,4,6,9,11是4个30天
break;
}
else
{
sum += (day + 31*6 + 28 + 30*4);
break;
}
default:
printf("wrong month.\n");break;
}
printf("\n今天是本年的第%d天.\n\n",sum);
getchar();
system("pause");
return 0;
}
结果和上面相同,就是代码太长了,有兴趣的可以试一下。
我是菜鸟,想好好学,欢迎大家支持。