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

求解释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是怎么分组的?

正在回答

2 回答

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

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

fl1995

楼主的代码有问题吧,换一个不是31天的月份试试
2016-10-04 回复 有任何疑惑可以回复我~
#2

橘右京的橘子掉了 提问者 回复 fl1995

代码没问题,运行结果正确,就是不理解它的case怎么分的组
2016-10-04 回复 有任何疑惑可以回复我~
#3

橘右京的橘子掉了 提问者

非常感谢!
2016-10-04 回复 有任何疑惑可以回复我~
#4

fl1995 回复 橘右京的橘子掉了 提问者

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

我们算天数的时候是怎么算的?比如说三月七日,是不是需要计算已经过去的月份的总天数(一月和二月)再加上当前月的天数(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即为所求


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

橘右京的橘子掉了 提问者

谢谢,了解了
2016-10-04 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C语言入门
  • 参与学习       924371    人
  • 解答问题       20753    个

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

进入课程

求解释switch语句

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