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

算法与case顺序的关系,真诚求助

正序case,答案错误为153

#include <stdio.h>
int main()

    int year = 2008;
    int month = 8;
    int day = 8;
    int date=0;
    switch(month)
    {
        case 1:date+=8;
        case 2:date+=31;
        case 3:   
        if((year%4==0&&year%100!=0)||year%400==0)
        {date+=29;}
        else
        {date+=28;}
        case 4:date+=31;
        case 5:date+=30;
        case 6:date+=31;
        case 7:date+=30;
        case 8:date+=31;
        case 9:date+=31;
        case 10:date+=30;
        case 11:date+=31;
        case 12:date+=30;
       
        printf("%d年%d月%d日是该年的第%d天",year,month,day,date);
        break;
    }
 return 0;
}

倒序case,答案正确为221

#include <stdio.h>
int main()
{
    int year = 2008;
    int month = 8;
    int day = 8;
    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;
}


正在回答

4 回答

你的本意是执行常量表达式1~8的月份,可正序时执行的8~12的表达式

巧的是,你倒叙写常量表达式,正好符合你的想法。

想法不错,你可以看下我写的方法,应该比较好理解

#include <stdio.h>int main() {     /* 定义需要计算的日期 */    int year = 2008;    int month = 8;    int day = 8;    /*     * 请使用switch语句,if...else语句完成本题     * 如有想看小编思路的,可以点击左侧任务中的“不会了怎么办”     * 小编还是希望大家独立完成哦~     */     int i,sum=0,n;     for(i=1;i<month;i++)     {        switch(i)        {            case 1:            case 3:            case 5:            case 7:            case 8:            case 10:            case 12: n=31;break;            case 4:            case 6:            case 9:            case 11: n=30;break;            case 2:       if((year%4==0 && year%100!=0)||(year%400==0))             n=29;     else             n=28;        }        sum+=n;     }    printf("%d年%d月%d日是该年的第%d天",year,month,day,sum+day);    return 0;}


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

此外判断天数的方法还有另外一种方法,我给贴出来,希望对你有益

#include <stdio.h>

int main() 

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

    int year = 2008;

    int month = 8;

    int day = 8;

    /*

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

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

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

     */

     int i,sum=0,n;

     for(i=1;i<month;i++) //计算前month-1个月的总天数 

        {     /*判断这个月的天数,优化了上次的算法*/ 

        if((i>=1 && i<=7 && i%2==1)||(i>=8 && i<=12 && i%2==0)) 

            n=31;    //在1~7月中,余数是1为大月,在8~12月中,余数是0为大月

        else if(i==2)

                if((year%4==0 && year%100!=0)||(year%400==0))     //判断是否为闰年 

                       n=29;

                else

                       n=28;

        else  //此为i!=2是执行的模块 

                n=30;  

        sum+=n;     //累加每个月的天数

        }

        printf("%d年%d月%d日是该年的第%d天",year,month,day,sum+day);

        return 0;

}

    

    


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

#include <stdio.h>

int main() 

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

    int year = 2008;

    int month = 8;

    int day = 8;

    /*

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

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

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

     */

     int i,sum=0,n;

     for(i=1;i<month;i++)

     {

        switch(i)

        {

            case 1:

            case 3:

            case 5:

            case 7:

            case 8:

            case 10:

            case 12: n=31;break;

            case 4:

            case 6:

            case 9:

            case 11: n=30;break;

            case 2:  

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

             n=29;

     else

             n=28;

        }

        sum+=n;

     }

    printf("%d年%d月%d日是该年的第%d天",year,month,day,sum+day);

    return 0;

}

    

    


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

照你这样写的话switch会从case 8开始往下执行到遇到break为止。

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

举报

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

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

进入课程

算法与case顺序的关系,真诚求助

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