为什么用switch语句,一样的代码顺序不一样输出的结果也不一样?

来源:4-17 switch与if语句的应用

Hu丶0403

2017-02-25 07:04

#include <stdio.h>

int main() 

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

    int year = 2008;

    int month = 8;

    int day = 8;

    /*

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

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

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

     */

    int sum=0;

    switch(month)

    {

        case 12:sum+=30;

        case 11:sum+=31;

        case 10:sum+=30;

        case 9:sum+=31;

        case 8:sum+=31;

        case 7:sum+=30;

        case 6:sum+=31;

        case 5:sum+=30;

        case 4:sum+=31;

        case 3:if(year%4==0&&year%100!=0||year%400==0)sum+=29;else sum+=28;

        case 2:sum+=31;

        case 1:sum+=day;

        

    }

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


return 0;

}

#include <stdio.h>

int main() 

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

    int year = 2008;

    int month = 8;

    int day = 8;

    /*

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

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

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

     */

    int sum=0;

switch(month)

{


        case 1:sum+=day;

case 2:sum+=31;

        case 3:if(year%4==0&&year%100!=0||year%400==0)sum+=29;else sum+=28;

case 4:sum+=31;

case 5:sum+=30;

case 6:sum+=31;

case 7:sum+=30;

case 8:sum+=31;

case 9:sum+=31;

case 10:sum+=30;

case 11:sum+=31;

case 12:sum+=30;



    }

    printf("%d年%d月%d日这一天,是该年中的第%d天。",year,month,day,sum);

    

return 0;

}


写回答 关注

2回答

  • 程序媛ing
    2017-02-25 07:38:33
    已采纳

    你和我开始犯的错误是一样的,就是说他给的是一个月份,如8月,那么按照你的程序,是不是sum=0+31?

    但实际上八月指的是一月到八月的总天数。

    另外还要多加上day!

    switch分支结构不管顺序怎么变,只执行对应case值后的代码块的,所以结果也应该一样。

    希望对你有帮助。

    程序媛ing 回复Hu丶040...

    没事!

    2017-02-25 22:07:31

    共 5 条回复 >

  • Hu丶0403
    2017-02-25 17:58:01

    第一个程序输出的是一到八月的天数221,用其他的数值验证也没有错,是故意没有加上break让数值从上往下加的,程序应该是正确的不信你复制运行看看,但是第二个我只是把第一个的从12到1反过来从1到12验证,但是得到的结果好像是150几还是多少来着不记得了,反正就是不一样

C语言入门

C语言入门视频教程,带你进入编程世界的必修课-C语言

926207 学习 · 20797 问题

查看课程

相似问题