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

大佬帮我看看我哪里出错了,输出总是98天,找了好久了

#include <stdio.h>

int main() 

    /* 定义需要计算的日期 */

    int year = 2008;

    int month = 8;

    int day = 8;

    int date=0, sum=0;

    /*

     * 请使用switch语句,if...else语句完成本题

     * 如有想看小编思路的,可以点击左侧任务中的“不会了怎么办”

     * 小编还是希望大家独立完成哦~

     */

        switch(month-1)

        {

            case 1:

            case 3:

            case 5:

            case 7:

            case 8:

            case 10:

            date+=31;

            case 2:

            if (year%400==0||(year%4==0 && year%100!=0))

            {

               date+=29;

            }

            else 

            {

                date+=28;

            };

            case 4:

            case 6:

            case 9:

            case 11:

            date+=30;

        }

 

    date+=day;

    printf("2008年8月8日,是该年中的第%d天",date);

    

return 0;

}


正在回答

3 回答

switch执行case时是直接查找7没错,但你7没break;之后它就会顺序执行直到遇到一个break(这个自己做实验跑一跑代码就能发现)。你以为你的代码是说12578⑩腊(掉了腊)都加31,但其实除了10月其他都没加,。然后你也没出循环,31+29+30+8=98.  答案是221. switch是选择语句,选出一个就break最好

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

首先,month-1=7,这一点没问题吧

按楼主的code,由于没有break,所以从case7开始,直到最后

楼主定义的date是0,就从0算起

第一段有效代码是case 10: date+=31;  此时date=31  

//我知道楼主你意思是从第一个月加起,但事实上switch做的是选择,不是顺序计算

第二段有效代码是case 2:  year定义为2008

if (year%400==0||(year%4==0 && year%100!=0))

//先做判断,2008%400=8,8不等于0,看或后面的内容,很显然2008满足后面的内容

//即判断的条件判定为真,执行以下代码

               date+=29;   此时date=60

else 不执行,跳过

第三段有效代码是case 11:date+=30; 此时date=90

第四段有效代码是

date+=day;

    printf("2008年8月8日,是该年中的第%d天",date);

此时date=date+day,即得date=98

从而输出date,即2008年8月8日,是该年中的第98天

我的分析说完了,楼楼慢慢看

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

不是输出97 ?

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

举报

0/150
提交
取消

大佬帮我看看我哪里出错了,输出总是98天,找了好久了

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