请学帝看看哪里不对? 为什么不能累加

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

我就是我颜色不一样的

2016-06-02 23:43

#include <stdio.h>
int main()
{
    int year = 2008;
    int month = 8;
    int day = 8;
    int sum = 0;
    int i = 1;
    switch(month)
    {
        case 1 :sum==31;
        case 2 :sum+=29;
        case 3 :sum+=31;
        case 4 :sum+=30;
        case 5 :sum+=31;
        case 6 :sum+=30;
        case 7 :sum+=31;
        case 8 :sum+=31;break;
        case 9 :sum+=30;break;
        case 10 :sum+=31;break;
        case 11 :sum+=30;break;
        case 12 :sum+=31;break;
        default :;break;
    }
    if(year%4==0&&year%100!=0)
    sum=sum+day;
    else
    sum=sum+day+i;
    printf("%d年%d月%d日是该年中的第%d天",year,month,day,sum);
 return 0;
}

写回答 关注

4回答

  • 慕粉3186754
    2016-06-03 01:31:01
    已采纳

    理解你的思维,可是写反了,改为如下:

    #include <stdio.h>
    int main() 

        int year = 2008;
        int month = 8;
        int day = 8;
        int sum = 0;
        int i = 1;
        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 :sum+=28;
            case 2 :sum+=31;
            case 1:sum+=0;
            default :;break;
        }
        if(year%4==0&&year%100!=0)
        sum=sum+day;
        else
        sum=sum+day+i;
        printf("%d年%d月%d日是该年中的第%d天",year,month,day,sum);
     return 0;
    }

    我就是我颜色...

    非常感谢!

    2016-06-05 23:56:21

    共 1 条回复 >

  • 暹罗猫
    2016-07-11 21:15:59

    应该是这样吧
    #include <stdio.h>
    int main()
    {
        int year = 2008;
        int month = 12;
        int day = 8;
        int sum = 0;
        int i = 1;
        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 :sum+=28;
            case 2 :sum+=31;
            case 1:sum+=0;
            default :;break;
        }
        if((year%4==0&&year%100!=0)||year%400==0)
        sum=sum+day+i;
        else
        sum=sum+day;
        printf("%d年%d月%d日是该年中的第%d天",year,month,day,sum);
     return 0;
    }

  • 小仓老师
    2016-06-04 16:48:44

    month=8;  进入switch后就直接找case8了,然后break。就相当于只算了一个8月份的天数。

  • 小雾3378873
    2016-06-03 22:42:58

    这道题中你对case语句后不加break;情况的理解有些偏差。

    首先,我们先看看为什么结果不累加

    你的程序结果为39,很明显是31+8(day)得来的,那么这个31是怎么来的?有人可能理解为来自case 1:  ,但这里没有break;  即然程序到这里为什么没有继续执行,而是跳出来了呢?很显然这个31并不是这里的。那么我们看前面,因为mouth=8,所以程序进入swich内,应该直接执行case 8: 的语句,然后跳出来,这样就可以说清了。

    那为什么不是按照你的想法让前8个叠加后再跳出呢,这就是理解的偏差问题了。虽然咱们前面看到过这样的知识点:“在case子句后如果没有break;会一直往后执行一直到遇到break;才会跳出switch语句。”实际上这句话的前提是“符合条件的正被执行的case子句后如果没有…………”,你程序中因为mouth=8,所以程序进入swich内,直接执行case 8: 的语句,而不是case 1: 的,那也就用不上刚才提到的规则了。

    希望对你有帮助!

     

    我就是我颜色...

    谢谢你

    2016-06-05 23:57:17

    共 1 条回复 >

C语言入门

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

926210 学习 · 20797 问题

查看课程

相似问题