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

求解释switch语句

#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是怎么分组的?

提问者:橘右京的橘子掉了 2016-10-04 10:58

个回答

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

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

  • 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即为所求