问答详情
源自:4-17 switch与if语句的应用

大神在哪里

我套用了for语句为什么,什么都没输出来呢?

#include <stdio.h>

int main() 

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

    int year = 2008;

    int month = 8;

    int day = 8;

    /*

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

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

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

     */

    int sum,m,i;

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

    {   

        if(m<8)

        {

            switch(m=m%2)

            {

               case 1:i=31;

               break;

               case 0:

               if(m=2)

                {

                   i=28;

                }

               else

                {

                   i=30;

                }

               break;

            }

        }

        if(8<=m<=12)

        {

            switch(m%=2)

            {

                case 1:i=30;

                case 0:i=31;

            }

        }

        else

        {

            printf("一年只有12个月");

        }

        sum=sum+i;

    }

    if(year%4=0)

    {

        sum++;

    }

    printf("%d",sum);

    return 0;


提问者:君家不见 2015-06-19 22:58

个回答

  • chavin
    2015-06-19 23:06:37
    已采纳

    if(8<=m<=12)你确定可以这样而不是8<=m && m<=12

     case 1:i=30;

      case 0:i=31;  这里的break去哪里了?

      if(m=2) 、 if(year%4=0)     判断相等要用  ==     这是我目测发现的问题,没有仔细看代码

  • sanjiaofeng
    2015-07-05 00:49:32

    如果只修正其他问题,不修正闰年问题,代码如下:

    #include <stdio.h>
    int main() 
    { 
        int year=2008,month=8,day=8,sum=0,m,i=0,j=m%2;
        for(m=1;m<=month;m++)
        {
            if(m<8)
            {
                switch(j)
                {
                   case 1:i=31;break;
                   case 0:
                   if(m=2)
                    {
                       i=28;
                    }
                   else
                    {
                       i=30;
                    }
                   break;
                }
            }
            if(m>=8 && m<=12)
            {
                switch(j)
                {
                    case 1:i=30;break;
                    case 0:i=31;break;
                }
            }
            else
            {
                printf("一年只有12个月\n");
            }
            sum=sum+i;
        }
        if(year%4==0)
        {
            sum++;
        }
        printf("%d",sum);
        return 0;
    }

    有结果,是:

    一年只有12个月
    一年只有12个月
    一年只有12个月
    一年只有12个月
    一年只有12个月
    一年只有12个月
    一年只有12个月
    248


    依然不知道问题在哪儿!

  • sanjiaofeng
    2015-07-05 00:45:24

    除了楼上指出的问题,还有以下问题:

    1、case0后的if(m=2)不正确。因为前面已经使用了switch(m=m%2),m有了新的值,非0即1,不会再等于2了。这也是switch后面可以使用case0、case1的基础。

    如果想使用if(m=2),就必须在前面重新定义一个变量,来接收m%2的值。

    比如,int j=m%2;

    这样就可以用switch(j)来代替switch(m=m%2)

    2、sum没有初始值,可能影响结果。(这一点我也不是很确定)

    3、闰年的判定方法不正确。

    闰年的要求是“四年一闰,百年不闰,四百年再闰”。

    判断方法是:year%4==0&&year%100!=0||year%400==0

    4、把以上问题修正后,代码依然无法执行,不知道问题在哪儿!!!