C语言 如何减少这个if语句?

djp7away  于 2022-12-17  发布在  其他
关注(0)|答案(2)|浏览(167)
if(year%400==0 || (year%100!=0 && year%4==0))

语句的格式为a or (b' and c)
这是否简化为a or (b or c')

if(year%400==0 || (year%100==0 || year%4!=0))

这个简化有错误吗?(我以为是正确的,但这两个没有给予相同的结果。)

qnyhuwrf

qnyhuwrf1#

这是否简化为a or ( b or c' )
不,你可以通过建立一个真值表来了解这一点。
我们 * 可以 * 将and更改为or

b' and c
= ( b' and c )''
= ( b or c' )'

所以

a or ( b' and c )

变成

a or ( b or c' )'

没有用,除了显示它不等价于a or ( b or c' )
我们可以使用相同的方法将and更改为or

a or ( b' and c )

变成

( a' and ( b or c' ) )'

再说一遍,没用。
它可以简化为year % 4 == 0,只要您只处理1901年到2099年。

6ojccjat

6ojccjat2#

year = 100为例,第一条语句返回false,第二条语句返回true。
括号中的第二个or语句不需要,因此可以将其视为对三个条件的单独简单检查。

相关问题