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

这段算天数的代码哪儿错了?

#include <stdio.h>

int main() 

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

    int year = 2008;

    int month = 8;

    int day = 8;

    /*

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

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

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

     */

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

    {

        switch(day)

        {

            case 1:

                printf("%d",day);

                break;

            case 2:

                printf("%d",day=31+day);

                break;

            case 3:case 5:case 7:case 9:case 11:

                printf("%d",day=59+(month-1)/2*31+(month-3)/2*30+day);

                break;

            case 8:

                printf("%d",day=213+day);

                break;

            case 10:case 12:

                printf("%d",day=59+month/2*31+(month-3)/2*30+day);

                break;

        }

    }

    else

    {

        switch(day)

        {

            case 1:

                printf("%d",day);

                break;

            case 2:

                printf("%d",day=31+day);

                break;

            case 3:case 5:case 7:case 9:case 11:

                printf("%d",day=60+(month-1)/2*31+(month-3)/2*30+day);

                break;

            case 8:

                printf("%d",day=214+day);

                break;

            case 10:case 12:

                printf("%d",day=60+month/2*31+(month-3)/2*30+day);

                break;

        }

    }

    


return 0;

}


1.当我把8号改成7号,221天变成了219天

2.把8月改成7月,结果没变

3.把2008年改成2020年,运行不出东西


求解答

正在回答

8 回答

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


1 回复 有任何疑惑可以回复我~
#include <stdio.h>
int main() 
{ 
    int year = 2008;
    int month = 8;
    int day = 8;
    int i,j;
    if(year%400==0||(year%4==0&&year%100!=0))i=1;
    else i=0;
    switch(month)
    {
        case 1:j=day;break;
        case 2:j=31+ day;break;
        case 3:j=31+ 28+ day;break;
        case 4:j=31+ 28+ 31+ day;break;
        case 5:j=31+ 28+ 31+ 30+ day;break;
        case 6:j=31+ 28+ 31+ 30+ 31+ day;break;
        case 7:j=31+ 28+ 31+ 30+ 31+ 30+ day;break;
        case 8:j=31+ 28+ 31+ 30+ 31+ 30+ 31+day;break;
        case 9:j=31+ 28+ 31+ 30+ 31+ 30+ 31+ 31+ day;break;
        case 10:j=31+ 28+ 31+ 30+ 31+ 30+ 31+ 31+ 30+day;break;
        case 11:j=31+ 28+ 31+ 30+ 31+ 30+ 31+ 31+ 30+ 31+day;break;
        case 12:j=31+ 28+ 31+ 30+ 31+ 30+ 31+ 31+ 30+ 31+ 30+ day;break;
    }
    if(i==1&&j>=61)j+=1;
    else j+=0;
    printf("%d年%d月%d日是该年的第%d天",year,month,day,j);
    return 0;
}


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

新手学C_请多关照

if(i==1&&j>=61)j+=1; else j+=0; 说实话,只有这里是完全自己想的。如果是闰年的1月或3月1日以前,你加1天。那么答案就错了。现在去测试我的答案。呵呵
2016-07-22 回复 有任何疑惑可以回复我~
#2

新手学C_请多关照

对不起测试答案不正确,应该为; if(i==1&&j>=60&&month>=3)j+=1; else j+=0; 二月第29天是第60天(31+29=60),在之前公式里都是以二月28天算的,那么三月一日等于31+28+1=60.所以月份month至少是3月才加一天。并且j》=60与,month》=3重复了。所以 if(i==1&&month>=3)j+=1; else j+=0
2016-07-22 回复 有任何疑惑可以回复我~
#3

tuzib263629491 提问者 回复 新手学C_请多关照

没有懂你的意思...
2016-07-25 回复 有任何疑惑可以回复我~

这条路很艰难的,,,你要挺住啊。。。。

记住不会就问啊,,不要不会自己在那苦恼。。。。。

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

tuzib263629491 提问者

谢谢你
2016-07-25 回复 有任何疑惑可以回复我~

这是我写的代码,你看下:

  1. #include <stdio.h>

  2. int main() 

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

  4.     int year = 2200;

  5.     int month = 8;

  6.     int day = 8;

  7.     int sum = 0;  //记录天数。。

  8.     /*

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

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

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

  12.      */

  13.     if(month>0&&month<=12)

  14.     {

  15.         switch(month)

  16.         {

  17.             case 1:sum=day;break;

  18.             case 2:sum=day+31;break;                   

  19.             case 3:sum=day+31+28;break;

  20.             case 4:sum=day+31+28+31;break;

  21.             case 5:sum=day+31+28+31+30;break;

  22.             case 6:sum=day+31+28+31+30+31;break;

  23.             case 7:sum=day+31+28+31+30+31+30;break;

  24.             case 8:sum=day+31+28+31+30+31+30+31;break;

  25.             case 9:sum=day+31+28+31+30+31+30+31+31;break;

  26.             case 10:sum=day+31+28+31+30+31+30+31+31+30;break;

  27.             case 11:sum=day+31+28+31+30+31+30+31+31+30+31;break;

  28.             case 12:sum=day+31+28+31+30+31+30+31+31+30+31+30;break;

  29.             default:

  30.                 printf("恭喜您脑子进水了");break;

  31.         }

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

  33.         {

  34.             sum+=1;

  35.         }

  36.         else

  37.         {

  38.             sum+=0;

  39.         }

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

  41.     }

  42.     else

  43.     {

  44.         printf("%s","恭喜您脑子进水了。。");

  45.     }

  46. return 0;

  47. }


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

错误很多。。。。你最好重新写一遍。。。。。

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

你这段代码的逻辑非常混乱。。。。。

建议重新梳理。。。

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

tuzib263629491 提问者

不混乱啊,分为闰年和平年,几种特别情况和两种普通情况。
2016-07-15 回复 有任何疑惑可以回复我~
#2

慕运维7000377 回复 tuzib263629491 提问者

你写这段代码你有想过,4月份和6月份在那了吗。。。。。 case 3:case 5:case 7:case 9:case 11: printf("%d", day = 59 + (month - 1) / 2 * 31 + (month - 3) / 2 * 30 + day); 你有想过你这段代码的逻辑吗,,你这段代码是怎么实现3月5月7月的天数的。
2016-07-16 回复 有任何疑惑可以回复我~
#3

慕运维7000377 回复 tuzib263629491 提问者

if (year % 4 != 0 || year % 100 == 0 || year % 400 != 0) 连判断闰年和平年的判断语句都错了。。。
2016-07-16 回复 有任何疑惑可以回复我~
#4

慕运维7000377 回复 tuzib263629491 提问者

switch (day) { case 1: printf("%d", day); break; } 你这整段代码错误百出。。。你这段代码实现的功能就像是这样: printf("%d",221);毫无意义。。。。。 建议你推倒重来,,不要在修改这段代码了。
2016-07-16 回复 有任何疑惑可以回复我~
#5

慕运维7000377 回复 慕运维7000377

case 3:case 5:case 7:case 9:case 11: printf("%d", day = 59 + (month - 1) / 2 * 31 + (month - 3) / 2 * 30 + day); 你有自己的想法是很好啦,但请你自己想到正确。。要不然错误的不改正以后会成习惯哦。。 要认真。。
2016-07-16 回复 有任何疑惑可以回复我~
#6

tuzib263629491 提问者 回复 慕运维7000377

3/5/7月的天数是用 59+(这个月-1)/2*31+这个月的天数,判断语句错了我知道,但是算天数的有错吗
2016-07-25 回复 有任何疑惑可以回复我~
查看3条回复

骚年,你看这里

    switch(day)

懂了没。。。

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

tuzib263629491 提问者

没懂,哪儿错了?
2016-07-15 回复 有任何疑惑可以回复我~
#2

慕运维7000377 回复 tuzib263629491 提问者

switch(day) 你这里判断的是天数不是月份,,,,,你没发现吗。。。。。 你说对吗。。。。。。
2016-07-16 回复 有任何疑惑可以回复我~
#3

tuzib263629491 提问者

我是判断天数啊...我按月份的不同判断的天数
2016-07-18 回复 有任何疑惑可以回复我~

闰年判断条件应该是year%4==0&&year%100!=0||year%400==0

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

tuzib263629491 提问者

重点不是这个
2016-07-14 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

这段算天数的代码哪儿错了?

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