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

year%100!=0与year%400==0在“||”之间互换位置以后 为什么答案不一样!!!

标题如是...year%100!=0与year%400==0在“||”之间互换位置以后 为什么答案不一样!!!

正在回答

5 回答

楼上的说法有误,我更正一下

首先我们的闰年规则是:每四年一闰,但是我们遇上整百年不闰,过四百年再闰。换算陈代码就是:

year%4==0(每四年一闰)&&year%100!=0(整百年不闰)||year%400==0(过四百年再闰)

这里难理解的其实是逻辑运算符的优先级问题,这里我告诉你逻辑【与】的运算优先级大于逻辑【或】的运算优先级,现在你只需要知道一下就行了。所以这里的代码非得这么写才对。(就好像2+5*3我们总是先算5*3,就是说【乘】的运算优先级大于【加】的运算优先级)

比如说判断2100年是否为闰年我们就发现:

2100能被4整除,同时也能被100整除。这时候【或】前面的条件就不成立了。这时候再判断【或】后面的条件成不成立,即能不能被400整除。我们发现2100不能被400整除,【或】后面的条件也不成立。所以为假,即2100年不是闰年。

再比如说判断2400年是否为闰年我们就发现:

2400能被4整除,同时也能被100整除。这时候【或】前面的条件就不成立了。这时候再判断【或】后面的条件成不成立,即能不能被400整除。我们发现2400能被400整除,【或】后面的条件成立。所以为真,即2400年是闰年。

再比如说判断2004年是否为闰年我们就发现:

2004能被4整除,同时又不能被100整除。这时候【或】前面的条件就成立了。这时候我们直接判断为真,即2004年是闰年。

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

qq_jjj 提问者

多谢了!打了这么多,非常感谢!
2016-07-27 回复 有任何疑惑可以回复我~

&&运算和||运算的顺序不一样的,&&优先于||。

你代码没贴全,我猜测你的问题出在了这里。

下面的是两两一组的,注意加括号与不加括号的区别。


 0 || 0  && 0 = 0

(0 || 0) && 0 = 0


 0 || 0  && 1 = 0

(0 || 0) && 1 = 0


 0 || 1  && 0 = 0

(0 || 1) && 0 = 0


 0 || 1  && 1 = 1

(0 || 1) && 1 = 1


 1 || 0  && 0 = 1

(1 || 0) && 0 = 0


 1 || 0  && 1 = 1

(1 || 0) && 1 = 1


 1 || 1  && 0 = 1

(1 || 1) && 0 = 0


 1 || 1  && 1 = 1

(1 || 1) && 1 = 1


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

qq_jjj 提问者

对 我后来才发现 多谢!
2016-07-27 回复 有任何疑惑可以回复我~

上面是我纯手打,怪累的。希望采纳一下!

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

幕布斯1309840

大逗比,哈哈哈哈
2016-08-30 回复 有任何疑惑可以回复我~

或是有1才有如0+1=1,1+1=1;0+0=0,与是都有才有;0+0=1;1+1=1;

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

判断闰年的依据是4年一润,百年一润,400年一润。则判断条件是if(year%4==0&&year%100!=0)||(year%400==0)!你说的交换位置是什么意思?

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

qq_jjj 提问者

#include <stdio.h> int main() { int year = 2014; //今年是2014年 //补全一下代码 if (year%4==0&&year%400==0) { printf("%s","今年 是 闰年 "); } else { printf("%s","今年是平年 "); } return 0; } 这样写出来的代码也是要求的答案。为什么非要写成这:year%100!=0||year%400==0
2016-07-26 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

year%100!=0与year%400==0在“||”之间互换位置以后 为什么答案不一样!!!

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