题目:输入某年某月某日,判断这一天是这一年的第几天?


分析:这个程序主要问题在于月份31天和30天,以及二月份的闰年29天和平年28天问题,解决办法首先判断是平年还是闰年,确定二          月份的时间,然后用case选择语句,算出该月份以前的总天数,从三月份开始在加上2月份天数;本次设计程序也有一定局限                性, 需要输入合法时间,才能正确输出正确的结果:


#include <stdio.h>   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 <stdio.h>  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; }

结果截图: