题目:输入某年某月某日,判断这一天是这一年的第几天?
分析:这个程序主要问题在于月份31天和30天,以及二月份的闰年29天和平年28天问题,解决办法首先判断是平年还是闰年,确定二 月份的时间,然后用case选择语句,算出该月份以前的总天数,从三月份开始在加上2月份天数;本次设计程序也有一定局限 性, 需要输入合法时间,才能正确输出正确的结果:
#include
int main(int argc,char *argv[])
{
int y,m,d,days,February;
printf("input the year:");
scanf("%d",&y);
printf("input the mouth:");
scanf("%d",&m);
printf("input the day:");
scanf("%d",&d);
if (y%400==0||(y%4==0&&y%100!=0))
February=29;
else
February=28;
switch (m) {
case 1:
days=0;
printf("%d年%d月%d日是一年中的第%d天!",y,m,d,days+d);
break;
case 2:
days=31;
printf("%d年%d月%d日是一年中的第%d天!",y,m,d,days+d);
break;
case 3:
days=31+February;
printf("%d年%d月%d日是一年中的第%d天!",y,m,d,days+d);
break;
case 4:
days=62+February;
printf("%d年%d月%d日是一年中的第%d天!",y,m,d,days+d);
break;
case 5:
days=92+February;
printf("%d年%d月%d日是一年中的第%d天!",y,m,d,days+d);
break;
case 6:
days=123+February;
printf("%d年%d月%d日是一年中的第%d天!",y,m,d,days+d);
break;
case 7:
days=153+February;
printf("%d年%d月%d日是一年中的第%d天!",y,m,d,days+d);
break;
case 8:
days=184+February;
printf("%d年%d月%d日是一年中的第%d天!",y,m,d,days+d);
break;
case 9:
days=215+February;
printf("%d年%d月%d日是一年中的第%d天!",y,m,d,days+d);
break;
case 10:
days=245+February;
printf("%d年%d月%d日是一年中的第%d天!",y,m,d,days+d);
break;
case 11:
days=276+February;
printf("%d年%d月%d日是一年中的第%d天!",y,m,d,days+d);
break;
case 12:
days=306+February;
printf("%d年%d月%d日是一年中的第%d天!",y,m,d,days+d);
break;
default:
printf("你输入月份错误!");
break;
}
system("PAUSE");
return 0;
}
编译软件是用的DEV-C++需要加system("PAUSE");才能让结果暂停住,显示出来;
另一种 差不多方法
程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
#include
int main()
{
int day,month,year,sum,leap;
printf("\nplease input year,month,day\n");
scanf("%d,%d,%d",&year,&month,&day);
printf("%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;
default:
printf("data error");
break;
}
sum=sum+day; /*再加上某天的天数*/
if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/
leap=1;
else
leap=0;
if(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/
sum++;
printf("It is the %d day.",sum);
return 0;
}