欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言编写程序计算某年某月某日是该年中的第几天(3种方法)

程序员文章站 2024-02-02 18:27:22
...

C语言编写程序计算某年某月某日是该年中的第几天

编写程序计算某年某月某日是该年中的第几天
例如输入fool girl 的出生日期1999-5-27
输出147

第一种switch语句代码实现

    int year,month,day,sum=0,i;
    scanf("%d-%d-%d",&year,&month,&day);
    if(month==1)                //如果是1月,直接输出day就行
        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%400==0||year%4==0&&year%100!=0&&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;
    if(year%4==0&&year%100!=0||year%400==0&&month>2)
        sum++;
    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);
        if(year%400==0||year%4==0&&year%100!=0)
            a[0]=day,a[2]=29;
        else a[0]=day;      
   //将day存放到a[0]的位置,方便后续统计,如果是闰年,需要将2月份改为29天
        for(i=0;i<month;i++)
            sum+=a[i];
   //因为a[0]存放的是day,所以就可以直接从a[0]遍历相加
        printf("%d ",sum);

第3种运算实例

C语言编写程序计算某年某月某日是该年中的第几天(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%400==0||year%4==0&&year%100!=0)   //闰年366天
            a[2]=29,sum=366;    //因为是从a[12]开始,所以a[0]就用不到了
        for(i=12;i>month;i--)    //从12月份开始往前减
            sum-=a[i];
        printf("%d ",sum-a[month]+day);     //天数减去该月的该天之后的天数