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

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

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

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

#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;
}

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

我就是我颜色不一样的 提问者

非常感谢!
2016-06-05 回复 有任何疑惑可以回复我~

应该是这样吧
#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;
}

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

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

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

这道题中你对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: 的,那也就用不上刚才提到的规则了。

希望对你有帮助!

 

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

我就是我颜色不一样的 提问者

谢谢你
2016-06-05 回复 有任何疑惑可以回复我~

举报

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

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

进入课程

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

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