注册 登录
编程论坛 C语言论坛

判断闰年代码

持剑的战士 发布于 2019-12-09 14:19, 2756 次点击
这行代码应该怎么解释?我知道它是判断是否为闰年,但我不懂它如何运行的?  
leapyear=year%4==0&&year%100!=0||year%400==0;
6 回复
#2
纯蓝之刃2019-12-09 16:15
leapyear=(((year%4==0)&&(year%100!=0))||(year%400==0));
如果年份是4的整数倍且不是四百的整数倍 或者 年份是400的整数倍 则leapyear的值为1,否则为0.
#3
bcbbcclbbc2019-12-09 16:48
year%4==0  &&  year%100!=0 ||   year%400==0        结果:1闰年,0平年
  0        不计算       不计算             0    (不是闰年)
  1         0          0              0    (year是4的倍数,是100的倍数但不是400的倍数)
  1         0          1              1    (year是4的倍数,是100的倍数也是400的倍数)
  1         1          0              1    (year是4的倍数,不是100的倍数)

[此贴子已经被作者于2019-12-9 16:56编辑过]

#4
Jason_2019-12-09 18:50
翻译到人话就是:
闰年是 年份能被4整除而且年份不是100的倍数  或者  年份能被400整除(成立leapyear为1,否则leapyear为0)

[此贴子已经被作者于2019-12-9 18:53编辑过]

#5
自学的数学2019-12-09 21:40
由于“=”赋值运算符优先级低且由右向左。
所以先看右边,也就是右边的式子的值赋值与leap。
右边有3个式子。式子的值为真则1,假则0。
式子1:如果year被4整除则真,式子2:year不被100整除则真,式子3:year被400整除则真。
三者关系:(式子1&&式子2)||式子3 式子关系顺序自左向右。
所以,被4整除而不被100整除,或者被400整除。
这是判断闰年的真假(真则1,假则0)。
#6
宁缺T2019-12-11 10:49
//当year为闰年时返回true(1),否则返回false(0)
bool isLeap(int year){
  return (year%4==0&&year%100!=0)||(year%400==0);
}
leapyear=isLeap(y1);
------------------------
因为这是C99新加入的关键字,要加入#include<stdbool.h>这个头文件,更详细的内容你可以自己找找。
#7
持剑的战士2019-12-11 16:02
回复 6楼 宁缺T
谢谢大佬
1