为了账号安全,请及时绑定邮箱和手机立即绑定

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

#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 回答

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

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

另外还要多加上day!

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

希望对你有帮助。

0 回复 有任何疑惑可以回复我~
#1

Hu丶0403 提问者

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

程序媛ing 回复 Hu丶0403 提问者

上面从12月到一月那个代码,由于month为8,所以程序跳到case 8:,然后执行下面的代码,由于没有break,所以计算机会默认一直到switch代码块结束或遇到break的这段代码都会被执行。所以就是八月开始,31+30+31+30+31+29+31+8=221; 同样的,下面一月到12月的代码,从case 8开始加:31+31+30+31+30=153.
2017-02-25 回复 有任何疑惑可以回复我~
#3

Hu丶0403 提问者 回复 程序媛ing

哦!原来不是按照case后面那个顺序读的啊,只是自上而下读的啊!我知道了,谢谢啦
2017-02-25 回复 有任何疑惑可以回复我~
#4

Hu丶0403 提问者

非常感谢!
2017-02-25 回复 有任何疑惑可以回复我~
#5

程序媛ing 回复 Hu丶0403 提问者

没事!
2017-02-25 回复 有任何疑惑可以回复我~
查看2条回复

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

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信