免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2660 | 回复: 9
打印 上一主题 下一主题

关于闰年的问题! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-04-02 21:18 |只看该作者 |倒序浏览
#include<stdio.h>;
#include<math.h>;
void main()
{int year,leap;                                 
scanf("%d",&year);                              
if(year%4==0)                                 
    {if(year%100==0)
       {if(year%400==0)
         leap=1;
         else leap=0;
   }
     else leap=1;
    }
else leap=0;

if(leap)
   printf("%d is ",year);
else
   printf("%d is not ",year);
   printf("a leap year.\n";
}
这是个起初编写的判断是不是闰年的源程序,但是我在通过编译后,发现它不能准确测试出0~399这些年份是不是闰年,于是我在源程序中的      scanf("%d",&year);下面 加上了                    {if(fabs(year)<=4e+002)
     if(year%4==0)                                
     {if(year%100==0)
       else leap=1;
     }
    else leap=0;
}
希望可以解决这个问题,但是在编译时出现了if不相匹配这个错误,我找不出错在哪里,请大虾指点一下!
先说明一下,我不会写"注释",所以看起来比较麻烦,顺便问一下,哪里有学习写"注释"这方面的资料,我去学学,以免日后出现这样的错误!

论坛徽章:
0
2 [报告]
发表于 2004-04-02 21:46 |只看该作者

关于闰年的问题!

if(year%4==0)
{if(year%100==0)
{if(year%400==0) 改成:
if ((year % 4==0 && year% 100!=0)||(year % 400==0))
你试一下

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2004-04-02 21:59 |只看该作者

关于闰年的问题!

代码写的要规范,要有一定的缩进,楼主写的,即使用code编辑了,还是格式太差了。要养成这样的好习惯。

论坛徽章:
0
4 [报告]
发表于 2004-04-02 22:01 |只看该作者

关于闰年的问题!

[quote="xhl"]if(year%4==0)
{if(year%100==0)
{if(year%400==0) 改成:
if ((year % 4==0 && year% 100!=0)||(year % 400==0))

你说的能够代表我源程序的IF语句,这个我知道,源程序没有问题,问题是出在源程序不能判断0~399这个年份的是不是闰年,所以我加了下面的程序,就是在加了之后,通不过编译了,主要是我加的那段判断0~399这些年份是不是闰年这段程序有问题,你帮我看看吧?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2004-04-02 22:22 |只看该作者

关于闰年的问题!

leap没赋初值,如果是<400的年份,进不到第三个if里面,就不能给leap赋值,这个时候leap就是一个未知的初值;或者进到第三个if里了,也只能执行leap=1。所以<400的年份,要么是不确定的值,要么是1。结果就不对。

加了后面的程序段也是上面的问题。记住,赋初值很重要。

做题时,不要上来就写if,想好了判断的条件,然后像xhl那样写比较好。嵌套的if或者其他的语句,要考虑走不进去的情况。

论坛徽章:
0
6 [报告]
发表于 2004-04-03 02:06 |只看该作者

关于闰年的问题!

每四年一个闰年,书中的例子是错的。
http://www.discovery.panasonic.co.jp/cn/library/lib03time/l03007.html

闰年指的是什么?
    大家都知道1年是365天。这是地球环绕太阳一周所需要的时间。不过准确地讲,需要365.2422天时间。也就是说,1年有0.2422天的余数,经过4年后余数为0.9688天。什么,有0.9688天?这差不多是1天了。因此每4年中只有1 次将1年定为366天,并把它叫做“闰年”。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
7 [报告]
发表于 2004-04-03 12:00 |只看该作者

关于闰年的问题!

晕了,楼上的大哥,书上说的没有错。你也知道:4年后的余数是:0.9688,不是一,那4年加一天,不就多加了0.0312天,时间常了,误差是了得的。所以还要在每100年的时候不加这样一天,而每400年的时候又加上,这样才不会错。这就是1900年不是闰年,而2000年是闰年的原因。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
8 [报告]
发表于 2004-04-03 12:29 |只看该作者

关于闰年的问题!

原帖由 "风中的枫叶" 发表:
#include<stdio.h>;
#include<math.h>;
void main()
{int year,leap;                                 
scanf("%d",&year);                              
if(year%4==0)                      ..........

你是从哪里学来的这样判定闰年的呀?
谭浩强的书就是这样写的嘛????

论坛徽章:
0
9 [报告]
发表于 2004-04-03 13:45 |只看该作者

关于闰年的问题!

原帖由 "lenovo" 发表:

你是从哪里学来的这样判定闰年的呀?
谭浩强的书就是这样写的嘛????


是的啊,我是从这本书上学的,里面介绍了两个办法,一个IF语句法,一个用逻辑表达式,逻辑表达式这个办法很简明方便,IF语句可以用
  1. if(year%4==0&&year%100!=0)‖(year%400==0)leap=1;
  2. else leap=0;
复制代码


来替换,你可以告诉我怎么加上程序来完成判断0~399这些年份是不是闰年吗?请指教!

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
10 [报告]
发表于 2004-04-03 13:58 |只看该作者

关于闰年的问题!

谭老师的书上的if也不是像你这样写的啊?

怎么加上程序?你是只在你写的程序上附加程序段吗?这样没有意义啊!学会正确的写法就好了啊!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP