求解释switch语句

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

橘右京的橘子掉了

2016-10-04 10:58

#include <stdio.h>
int main()
{
    /* 定义需要计算的日期 */
    int year = 2008;
    int month = 8;
    int day = 8;
    /*
     * 请使用swtich语句,if...else语句完成本题
     * 如有想看小编思路的,可以点击左侧任务中的“不会了怎么办”
     * 小编还是希望大家独立完成哦~
     */
    int date = 0;
    switch (month)
    {
        case 12:    date += 30;
        case 11:    date += 31;
        case 10:    date += 30;
        case 9:    date += 31;
        case 8:    date += 31;
        case 7:    date += 30;
        case 6:    date += 31;
        case 5:    date += 30;
        case 4:    date += 31;
        case 3:    if(year%400 != 0 && year%4 == 0){
                        date += 29;
                    }else{
                        date += 28;}
        case 2:    date += 31;
        default:    date += 8,printf("2008年8月8日是该年的第%d天",date);break;
    }
    return 0;
}

其中case是怎么分组的?

写回答 关注

2回答

  • JustWannaHugU
    2016-10-04 11:24:52
    已采纳

    你写的程序中,month是从12倒序排列至2,也就是说每次case 当前month后date的值为当前month-1月的天数,但是由于没有break,所以继续累加至case 2,此时的date已经相当于从1月累加至当前month-1的总天数了,最后再加上default中的当前月天数,得到的结果同样是正解

    fl1995 回复橘右京的橘子...

    举个例子,楼主可以测试7月份的某一天,会比其余方法的值多1。因为楼主代码在跑8月8号的时候,是计算了2月1号到8月31号,再加上8月1号到8月8号,因为1月份和8月份一样是31天,所以结果没有错误,这只能说是巧合。换一个和1月份天数不同的月份计算结果就会有错误~。十一玩了几天,也没学,也没看。。

    2016-10-08 08:51:23

    共 4 条回复 >

  • JustWannaHugU
    2016-10-04 11:20:00

    我们算天数的时候是怎么算的?比如说三月七日,是不是需要计算已经过去的月份的总天数(一月和二月)再加上当前月的天数(7天),所以程序也这样设计,sum代表case month之前共有多少天(比如说case 3:执行的结果就是sum=31+28=59;)得到当前的sum后break跳出switch,最后再加上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;//此时的sum即为所求


    橘右京的橘子...

    谢谢,了解了

    2016-10-04 15:20:55

    共 1 条回复 >

C语言入门

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

926021 学习 · 20793 问题

查看课程

相似问题