| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 812 人关注过本帖
标题:一道计算输入年月日就能显示这天在一年中的第几天!代码有点问题,求指教!
只看楼主 加入收藏
刘欣2
Rank: 1
等 级:新手上路
帖 子:32
专家分:6
注 册:2014-5-12
结帖率:72.73%
收藏
已结贴  问题点数:5 回复次数:8 
一道计算输入年月日就能显示这天在一年中的第几天!代码有点问题,求指教!
#include <stdio.h>
typedef struct
{
   int year;
   int month;
   int day;
}date;
int days(date d)
{
    int num = 0;
    int m, da, i;
    if ((d.year %4 == 0 && d.year %100!=0)||(d.year % 400 == 0))
    {
         for (m = 1; m < d.month ; m++)
         {
              if (m == 2)
              {
                   da = 29;
                   num = num + da;
              }
              else if (m==4||m==6||m==8||m==11)
              {
                   da = 30;
                   num = num+da;
              }
              else
              {
                   da = 31;
                   num = num +da;
              }
              num = num + d.day;
        }
        return num;
   }
   else
   {
        for (m = 1; m <d.month ; m++)
        {
             if (m == 2)
             {
                  da = 28;
                  num = num +da;
             }
             else if (m==4||m==6||m==8||m==11)
             {
                  da = 30;
                  num = num +da;
             }
             else
             {
                  da = 31;
                  num = num +da;
             }
              num = num + d.day;
        }
        return num;
   }
}
int main()
{
 date d;
 scanf("%d%d%d",&d.year,&d.month,&d.day);
 printf("%d年%d月%d日 is the %d days of this year",d.year,d.month,d.day,days(d));
 return 0;
}



我的是一月一号为一年中的第1天,

求解我输入2000 2 29显示的是30天,正确答案!而我输入2000 3 1好显示的为32天,错误答案!

为什么会这样,求高手指教
搜索更多相关主题的帖子: include 年月日 
2014-05-19 13:11
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:3 
for (m = 1; m < d.month ; m++)   都改成
for (m = 1; m <= d.month ; m++)

总有那身价贱的人给作业贴回复完整的代码
2014-05-19 13:15
刘欣2
Rank: 1
等 级:新手上路
帖 子:32
专家分:6
注 册:2014-5-12
收藏
得分:0 
回复 2 楼 embed_xuel
但这明显不对呀~~  1月1号为元旦~  是一年中的第一天,如果改了就成了32天了
  
2014-05-19 13:18
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
回复 3 楼 刘欣 2
看错了, num = num + d.day; 这句要放在循环体外面

总有那身价贱的人给作业贴回复完整的代码
2014-05-19 13:23
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:2 
天数被循环累加了。

程序根据是否闰年分别计算全年天数,实无必要。,精简如下:
程序代码:
#include <stdio.h>
typedef struct {
    int year;
    int month;
    int day;
} date;
int days( date d )
{
    int num = 0;
    int m;
    for ( m = 1; m < d.month ; m++ ) {
        switch ( m ) {
        case 2:
            if ( ( d.year % 4 == 0 && d.year % 100 != 0 ) || ( d.year % 400 == 0 ) ) {
                num += 29;
            } else {
                num += 28;
            }
            break;
        case 4:
        case 6:
        case 8:
        case 11:
            num += 30;
            break;
        default:
            num += 31;
            break;
        }
    }
    num += d.day;
    return num;
}
int main( void )
{
    date d;
    scanf( "%d%d%d", &d.year, &d.month, &d.day );
    printf( "%d年%d月%d日 is the %d days of this year", d.year, d.month, d.day, days( d ) );
    return 0;
}
2014-05-19 13:41
刘欣2
Rank: 1
等 级:新手上路
帖 子:32
专家分:6
注 册:2014-5-12
收藏
得分:0 
回复 5 楼 top398
我也想到这个问题,非常感谢拉
2014-05-19 14:04
刘欣2
Rank: 1
等 级:新手上路
帖 子:32
专家分:6
注 册:2014-5-12
收藏
得分:0 
回复 4 楼 embed_xuel
  真的可以耶!  谢谢了
2014-05-19 14:05
夕阳的美
Rank: 1
来 自:安徽滁州
等 级:新手上路
帖 子:2
专家分:0
注 册:2014-5-22
收藏
得分:0 
回复 5 楼 top398
不对啊,当你输入1月36的时候,结果是36天,这是怎么回事呢??
2014-05-23 20:50
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:0 
以下是引用夕阳的美在2014-5-23 20:50:16的发言:

不对啊,当你输入1月36的时候,结果是36天,这是怎么回事呢??
以上程序仅为必要的实现功能,这种错误检查属于细化问题。如果一定要锱铢必较,那不免会写得非常啰嗦,喧宾夺主。
2014-05-23 22:47
快速回复:一道计算输入年月日就能显示这天在一年中的第几天!代码有点问题,求指 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017796 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved