不明白哪里不对,求解

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

夜半饮酒

2016-12-27 02:46

#include <stdio.h>

int main() 

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

    int year = 2008;

    int month = 8;

    int day = 8;

    /*

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

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

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

     */

    int sum,i;

    sum=0;

    for (i=0;i<=8;i++)

    {

        switch(i)

        {

            case 1:i+=31;

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

                    {

                       i+=29; 

                    }

                    else

                    {

                        i+=28;

                    }

            case 3:i+=31;

            case 4:i+=30;

            case 5:i+=31;

            case 6:i+=30;

            case 7:i+=31;

            case 8:i+=31;

            break;

        

        }

        sum=sum+i;

        sum+=8;

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

    }

return 0;

}


写回答 关注

2回答

  • 莫名的讯
    2016-12-27 09:46:10
    已采纳

    孩纸  你太调皮了  要加break  还有 你的 i+=····各个变量有实际意义的不要乱用  要养成好习惯

    这是正确的代码  看看思路吧

    #include <stdio.h>

    int main()

    {

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

        int year = 2008;

        int month = 8;

        int day = 8;


        int sum, i;

        sum=0;//sum代表总天数


        for (i=0;i<month;i++)//每个月的天数加起来 i代表第i个月

        {

            switch(i)

            {

                case 1:sum+=31;break;

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

                        {

                           sum+=29;

                        }

                        else

                        {

                            sum+=28;

                        }break;

                case 3:sum+=31;break;

                case 4:sum+=30;break;

                case 5:sum+=31;break;

                case 6:sum+=30;break;

                case 7:sum+=31;break;

                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:                ;

            }

        }

        sum+=day;

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

        return 0;

    }

    夜半饮酒

    只有八月,为什么case 里面要写到12月???那个break不是用来跳出循环的吗。。。我想就到八月过,所以只有那里放了break。。。。是不是跳出一个循环然后开始下一个??额。。。。。还有一个问题,for循环里,为什么i要小于month????谢谢你,大好人

    2016-12-27 20:44:52

    共 1 条回复 >

  • 莫名的讯
    2016-12-28 23:24:10

    恩恩   那个本人有喜欢完整   就把月份都写出来了

    那个12月份可以不写  不影响的

    对break可以跳出循环  也可以跳出switch语句

    for里面包含或者说嵌套了一个switch语句,里面的break可以跳出

    本题用i代表月份  i<month=8  即i可以等于1,2,3····7,这几个月的天数加起来   再单独加第8月的天数



    夜半饮酒

    谢谢,我现在明白了

    2016-12-30 18:13:44

    共 1 条回复 >

C语言入门

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

926021 学习 · 20793 问题

查看课程

相似问题