问答详情
源自:4-17 switch与if语句的应用

这段算天数的代码哪儿错了?

#include <stdio.h>

int main() 

    /* 定义需要计算的日期 */

    int year = 2008;

    int month = 8;

    int day = 8;

    /*

     * 请使用switch语句,if...else语句完成本题

     * 如有想看小编思路的,可以点击左侧任务中的“不会了怎么办”

     * 小编还是希望大家独立完成哦~

     */

    if(year%4!=0||year%100==0||year%400!=0)

    {

        switch(day)

        {

            case 1:

                printf("%d",day);

                break;

            case 2:

                printf("%d",day=31+day);

                break;

            case 3:case 5:case 7:case 9:case 11:

                printf("%d",day=59+(month-1)/2*31+(month-3)/2*30+day);

                break;

            case 8:

                printf("%d",day=213+day);

                break;

            case 10:case 12:

                printf("%d",day=59+month/2*31+(month-3)/2*30+day);

                break;

        }

    }

    else

    {

        switch(day)

        {

            case 1:

                printf("%d",day);

                break;

            case 2:

                printf("%d",day=31+day);

                break;

            case 3:case 5:case 7:case 9:case 11:

                printf("%d",day=60+(month-1)/2*31+(month-3)/2*30+day);

                break;

            case 8:

                printf("%d",day=214+day);

                break;

            case 10:case 12:

                printf("%d",day=60+month/2*31+(month-3)/2*30+day);

                break;

        }

    }

    


return 0;

}


1.当我把8号改成7号,221天变成了219天

2.把8月改成7月,结果没变

3.把2008年改成2020年,运行不出东西


求解答

提问者:tuzib263629491 2016-07-14 11:38

个回答

  • 新手学C_请多关照
    2016-07-22 19:31:53

    #include <stdio.h>
    int main() 
    { 
        int year = 2008;
        int month = 3;
        int day = 1;
        int i,j;
        if(year%400==0||(year%4==0&&year%100!=0))i=1;
        else i=0;
        switch(month)
        {
            case 1:j=day;break;
            case 2:j=31+ day;break;
            case 3:j=31+ 28+ day;break;
            case 4:j=31+ 28+ 31+ day;break;
            case 5:j=31+ 28+ 31+ 30+ day;break;
            case 6:j=31+ 28+ 31+ 30+ 31+ day;break;
            case 7:j=31+ 28+ 31+ 30+ 31+ 30+ day;break;
            case 8:j=31+ 28+ 31+ 30+ 31+ 30+ 31+day;break;
            case 9:j=31+ 28+ 31+ 30+ 31+ 30+ 31+ 31+ day;break;
            case 10:j=31+ 28+ 31+ 30+ 31+ 30+ 31+ 31+ 30+day;break;
            case 11:j=31+ 28+ 31+ 30+ 31+ 30+ 31+ 31+ 30+ 31+day;break;
            case 12:j=31+ 28+ 31+ 30+ 31+ 30+ 31+ 31+ 30+ 31+ 30+ day;break;
        }
        if(i==1&&month>=3)j+=1;
        else j+=0;
        printf("%d年%d月%d日是该年的第%d天",year,month,day,j);
        return 0;
    }


  • 新手学C_请多关照
    2016-07-22 19:02:25

    #include <stdio.h>
    int main() 
    { 
        int year = 2008;
        int month = 8;
        int day = 8;
        int i,j;
        if(year%400==0||(year%4==0&&year%100!=0))i=1;
        else i=0;
        switch(month)
        {
            case 1:j=day;break;
            case 2:j=31+ day;break;
            case 3:j=31+ 28+ day;break;
            case 4:j=31+ 28+ 31+ day;break;
            case 5:j=31+ 28+ 31+ 30+ day;break;
            case 6:j=31+ 28+ 31+ 30+ 31+ day;break;
            case 7:j=31+ 28+ 31+ 30+ 31+ 30+ day;break;
            case 8:j=31+ 28+ 31+ 30+ 31+ 30+ 31+day;break;
            case 9:j=31+ 28+ 31+ 30+ 31+ 30+ 31+ 31+ day;break;
            case 10:j=31+ 28+ 31+ 30+ 31+ 30+ 31+ 31+ 30+day;break;
            case 11:j=31+ 28+ 31+ 30+ 31+ 30+ 31+ 31+ 30+ 31+day;break;
            case 12:j=31+ 28+ 31+ 30+ 31+ 30+ 31+ 31+ 30+ 31+ 30+ day;break;
        }
        if(i==1&&j>=61)j+=1;
        else j+=0;
        printf("%d年%d月%d日是该年的第%d天",year,month,day,j);
        return 0;
    }


  • 慕运维7000377
    2016-07-16 03:02:17

    这条路很艰难的,,,你要挺住啊。。。。

    记住不会就问啊,,不要不会自己在那苦恼。。。。。

  • 慕运维7000377
    2016-07-14 17:39:35

    这是我写的代码,你看下:

    1. #include <stdio.h>

    2. int main() 

    3.     /* 定义需要计算的日期 */

    4.     int year = 2200;

    5.     int month = 8;

    6.     int day = 8;

    7.     int sum = 0;  //记录天数。。

    8.     /*

    9.      * 请使用switch语句,if...else语句完成本题

    10.      * 如有想看小编思路的,可以点击左侧任务中的“不会了怎么办”

    11.      * 小编还是希望大家独立完成哦~

    12.      */

    13.     if(month>0&&month<=12)

    14.     {

    15.         switch(month)

    16.         {

    17.             case 1:sum=day;break;

    18.             case 2:sum=day+31;break;                   

    19.             case 3:sum=day+31+28;break;

    20.             case 4:sum=day+31+28+31;break;

    21.             case 5:sum=day+31+28+31+30;break;

    22.             case 6:sum=day+31+28+31+30+31;break;

    23.             case 7:sum=day+31+28+31+30+31+30;break;

    24.             case 8:sum=day+31+28+31+30+31+30+31;break;

    25.             case 9:sum=day+31+28+31+30+31+30+31+31;break;

    26.             case 10:sum=day+31+28+31+30+31+30+31+31+30;break;

    27.             case 11:sum=day+31+28+31+30+31+30+31+31+30+31;break;

    28.             case 12:sum=day+31+28+31+30+31+30+31+31+30+31+30;break;

    29.             default:

    30.                 printf("恭喜您脑子进水了");break;

    31.         }

    32.         if((year%4==0&&year%100!=0)||year%400==0)

    33.         {

    34.             sum+=1;

    35.         }

    36.         else

    37.         {

    38.             sum+=0;

    39.         }

    40.         printf("%d年%d月%d日是该年的%d天",year,month,day,sum);

    41.     }

    42.     else

    43.     {

    44.         printf("%s","恭喜您脑子进水了。。");

    45.     }

    46. return 0;

    47. }


  • 慕运维7000377
    2016-07-14 17:33:41

    错误很多。。。。你最好重新写一遍。。。。。

  • 慕运维7000377
    2016-07-14 17:31:27

    你这段代码的逻辑非常混乱。。。。。

    建议重新梳理。。。

  • 慕运维7000377
    2016-07-14 17:29:06

    骚年,你看这里

        switch(day)

    懂了没。。。

  • 简称歌神
    2016-07-14 15:35:03

    闰年判断条件应该是year%4==0&&year%100!=0||year%400==0