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

这是我参与11月更文挑战的第18天,活动详情查看:2021最后一次更文挑战

编写程序计算某年某月某日是该年中的第几天 例如输入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种运算实例

在这里插入图片描述

第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);     //天数减去该月的该天之后的天数
复制代码

Guess you like

Origin juejin.im/post/7034876013662175239