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

怎么算出来结果不对?

#include <stdio.h>

int main() 

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

    int year = 2008;

    int month = 8;

    int day = 8;

    /*

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

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

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

     */

    int sum;

    for(sum=1;sum<=12;sum++)

    {

        switch(sum)

        {

            case 1:

            if(month>=1)

            {

                day+=0;

            }

            else break;

        

            case 2:

            if(month>=2)

            {

                day+=31;

            }

            else break;

            

            case 3:

            if(month>=3)

            {

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

                {

                    day+=29;

                }

                else

                {

                    day+=28;

                }

            }

            else break;

            

            case 4:

            if(month>=4)

            {

                day+=31;

            }

            else break;

            

            case 5:

            if(month>=5)

            {

                day+=30;

            }

            else break;

            

            case 6:

            if(month>=6)

            {

                day+=31;

            }

            else break;        

            

            case 7:

            if(month>=7)

            {

                day+=30;

            }

            else break;           

            

            case 8:

            if(month>=8)

            {

                day+=31;

            }

            else break;   

            

            case 9:

            if(month>=9)

            {

                day+=31;

            }

            else break;

        

            case 10:

            if(month>=10)

            {

                day+=30;

            }

            else break;

        

            case 11:

            if(month>=11)

            {

                day+=31;

            }

            else break;

        

            case 12:

            if(month>=12)

            {

                day+=30;

            }

            else break;

        }

    }

    printf("%d",day);

  

return 0;

}






提问者:王师1984 2018-04-13 18:20

个回答

  • 维德
    2018-04-14 19:12:01
    已采纳

    我给楼上补充一下吧,你这个确实是sum=1的时候就运行出结果了。首先你在case语句中使用的是if-else语句;sum=1时,执行case1,注意:此时并没有执行break语句,因为if语句成立(if不成立才执行else语句);case1执行结束,没有break,执行case2,一直往下加,直到month=8。下面的month>=9不成立,执行else语句(执行break),跳出循环,然后sum++,再执行一遍case。

  • qq_241随心_0
    2018-04-14 15:00:14

    你的代码根本用不上for,用了反而错了,因为当sum等2的时候,就从case 2开始执行了,本来sum=1的时候已经得到结果了,你在让day+=31,明显重复了

  • crazy疯子
    2018-04-13 21:22:58

    #include <stdio.h>

    int main() 

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

        int year = 2008;

        int month = 8;

        int day = 8;

        int sumday=0;


        switch(month)

    {

    case 1:sumday=day;break;

    case 2:sumday=31+day;break;

    case 3:sumday=59+day;break;

    case 4:sumday=90+day;break;

    case 5:sumday=120+day;break;

    case 6:sumday=151+day;break;

    case 7:sumday=181+day;break;

    case 8:sumday=212+day;break;

    case 9:sumday=243+day;break;

    case 10:sumday=273+day;break;

    case 11:sumday=304+day;break;

    case 12:sumday=334+day;break;

    default:break;

    if(month>2)

    {

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

    {

    sumday=sumday+1;

    printf("%d年%d月%d日是该年的第%d天",year,month,day,sumday);

    }

    else

    {

    printf("%d年%d月%d日是该年的第%d天",year,month,day,sumday);

    }

    else

    {

    printf("%d年%d月%d日是该年的第%d天",year,month,day,sumday);


    return 0;

    }



    可以把判断闰年放在最后