C语言经典算法100例-004-年月日判断是年份的第几天

题目如下:

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

1.分析问题:基本算法为之前月份的天数和加当前天,例如3月8日,需要用1,2月份的总天数加8。 但要考虑特殊情况,如果是闰年,那么2月不再是28天,而是29天,此时如果月份大于2,那么之前月份的天数和则应加1才对。

2.源代码:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int year,month,day;
    int sum;
    int leap;
    printf("Please input the date(Like 1990-10-22)!\n");
    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;
    default:
        printf("Data error\n");
        return 0;
        break;
    }
    sum+=day;
    leap=year%400==0||(year%4==0&&year%100!=0)?1:0;     //判断是否为闰年 四年一闰;百年不闰,四百年再闰
    sum+=leap==1&&month>2?1:0;                          //是闰年且月份大于2的需要加一天
    printf("This is %d the %dth day!\n",year,sum);
    return 0;
}


posted @ 2014-02-26 11:14  庄浩  阅读(828)  评论(0编辑  收藏  举报