鱼C论坛

 找回密码
 立即注册
查看: 1542|回复: 4

[已解决]S1E10 课后作业问题求助

[复制链接]
发表于 2021-11-17 13:01:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目:
8. 请用一个逻辑表达式来判断某一年是否为闰年。

某一年份如果符合下边 A 或 B 其中一个,我们称之为闰年:
A. 能被 4 整除,但不能被 100 整除;
B. 能被 400 整除。

我的答案:
                ' y % 4 + y % 100 && y % 400 == 0 '

小甲鱼的答案:
                        ' (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0) '

请问我的答案对不对呀?
最佳答案
2021-11-17 13:24:58
本帖最后由 番杰 于 2021-11-17 13:37 编辑

不对,首先你需要清楚 “ && ”与 “ == ”的运算优先级,
我没记错的话应该是后者高于前者,
所以你这个表达式的逻辑就是:
(y % 4 + y % 100 )&&( y % 400 == 0)
就相当于先算(y % 4 + y % 100 ),在判断( y % 400 == 0),最后取&&

1.先说:(y % 4 + y % 100 )
只要这个Y不为4和100的公倍数,那么这个结果肯定是大于等于1的,即逻辑真。
换而言之,y为4和100的公倍数,那么结果就为0,即逻辑假。

2.再说:( y % 400 == 0)
只要y是400的倍数,那么该表达式就为逻辑真。

3.整体来看:(y % 4 + y % 100 )&&( y % 400 == 0)
结合1和2所述,y只有两种取值方法。

1)y为4和100的公倍数(同样可以看成是400的倍数)
那么,(y % 4 + y % 100 )的结果为0,根据&&短路判断法(好像是这个名字),不用进行( y % 400 == 0)的判断,
即可得出该表达式的结果为假、

2)y不为4和100的公倍数(同样可以看成不是400的倍数)
那么,(y % 4 + y % 100 )的结果为大于等于1的数值,即逻辑真。
( y % 400 == 0)的结果,为假。
真 && 假,为假。
即可得出该表达式的结果为假、

所以综上所述,无论y取什么值,你的表达式的结果都为假。


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-17 13:24:58 | 显示全部楼层    本楼为最佳答案   
本帖最后由 番杰 于 2021-11-17 13:37 编辑

不对,首先你需要清楚 “ && ”与 “ == ”的运算优先级,
我没记错的话应该是后者高于前者,
所以你这个表达式的逻辑就是:
(y % 4 + y % 100 )&&( y % 400 == 0)
就相当于先算(y % 4 + y % 100 ),在判断( y % 400 == 0),最后取&&

1.先说:(y % 4 + y % 100 )
只要这个Y不为4和100的公倍数,那么这个结果肯定是大于等于1的,即逻辑真。
换而言之,y为4和100的公倍数,那么结果就为0,即逻辑假。

2.再说:( y % 400 == 0)
只要y是400的倍数,那么该表达式就为逻辑真。

3.整体来看:(y % 4 + y % 100 )&&( y % 400 == 0)
结合1和2所述,y只有两种取值方法。

1)y为4和100的公倍数(同样可以看成是400的倍数)
那么,(y % 4 + y % 100 )的结果为0,根据&&短路判断法(好像是这个名字),不用进行( y % 400 == 0)的判断,
即可得出该表达式的结果为假、

2)y不为4和100的公倍数(同样可以看成不是400的倍数)
那么,(y % 4 + y % 100 )的结果为大于等于1的数值,即逻辑真。
( y % 400 == 0)的结果,为假。
真 && 假,为假。
即可得出该表达式的结果为假、

所以综上所述,无论y取什么值,你的表达式的结果都为假。


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-17 19:58:41 | 显示全部楼层
番杰 发表于 2021-11-17 13:24
不对,首先你需要清楚 “ && ”与 “ == ”的运算优先级,
我没记错的话应该是后者高于前者,
所以你这个 ...

噢噢
我题都没审清,题目说的或,我看成了与
我也没注意到 4,100 和 400 之间的关系

突然感觉我就应该直接翻译这两选项,不瞎想八想。。。看是不是闰年直接 ' y % 4 == 0 ' 是不是就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-18 09:04:39 | 显示全部楼层
孤不冷cing 发表于 2021-11-17 19:58
噢噢
我题都没审清,题目说的或,我看成了与
我也没注意到 4,100 和 400 之间的关系


可以,小甲鱼之所以写成:
(year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)
是因为他这里把闰年分成了“普通闰年”和“世纪闰年”,

“世纪闰年”的意思就是一个可以整除100的闰年,像2000年,1600年这种的,
除此之外的闰年都是“普通闰年”。

你直接写为y % 4 == 0,就相当于直接判断是不是闰年,不管它是普通的还是世纪的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-18 12:41:59 | 显示全部楼层
番杰 发表于 2021-11-18 09:04
可以,小甲鱼之所以写成:
(year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)
是因为他这里 ...

噢噢,原来如此,蟹蟹
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-23 01:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表