这个基于布尔的 C 编程问题有什么问题吗?
Are there any problems with this Boolean based C programming question?
我目前正在学习布尔数据类型,我想知道 if-else 语句中的条件是否完整...
#include <stdio.h>
#include <stdbool.h>
int main() {
bool a = false, b = false, c = false , d = false;
if ((a&&b)||(!c&&d)) {
if(((a||!b)&&c)||(b&&!a)) {
printf("1");
} else if ((a||(d&&b))&& !b) {
printf("2");
} else {
printf("3");
}
} else {
if(!(d&&c)&&(!a)) {
printf("4");
} else {
printf("5");
}
}
return 0;
}
if-else语句中的条件不应该有比较吗?例如 (a&&b)==true || (!c&&d)==true。 运行 程序原样输出“4”,我对原因有点困惑。谢谢
为了理解代码是如何执行并给出最终结果的,关键是理解运算符的优先级。
三个逻辑运算符中,即逻辑非!
、逻辑与&&
、logic or ||
, logic not !
优先级最高, 然后logic and &&
然后是 逻辑或 ||
。
逻辑 not !
的优先级高于 logic and &&
and logic or ||
,所以 a&&b
和 !c&&d
的计算结果都是 false
.
因为 (a&&b)||(!c&&d)
的计算结果为 false,外部 if
主体不会执行。
现在,它进入了外部 else 部分。
d&&c
的计算结果为假,因为 d
和 c
都是假的。结果,!(d&&c)
的计算结果为真。当然 not a !a
也计算为 true。
最后,!(d&&c)&&(!a)
是真的。所以 printf("4");
执行并输出一个 4
我目前正在学习布尔数据类型,我想知道 if-else 语句中的条件是否完整...
#include <stdio.h>
#include <stdbool.h>
int main() {
bool a = false, b = false, c = false , d = false;
if ((a&&b)||(!c&&d)) {
if(((a||!b)&&c)||(b&&!a)) {
printf("1");
} else if ((a||(d&&b))&& !b) {
printf("2");
} else {
printf("3");
}
} else {
if(!(d&&c)&&(!a)) {
printf("4");
} else {
printf("5");
}
}
return 0;
}
if-else语句中的条件不应该有比较吗?例如 (a&&b)==true || (!c&&d)==true。 运行 程序原样输出“4”,我对原因有点困惑。谢谢
为了理解代码是如何执行并给出最终结果的,关键是理解运算符的优先级。
三个逻辑运算符中,即逻辑非!
、逻辑与&&
、logic or ||
, logic not !
优先级最高, 然后logic and &&
然后是 逻辑或 ||
。
逻辑 not !
的优先级高于 logic and &&
and logic or ||
,所以 a&&b
和 !c&&d
的计算结果都是 false
.
因为 (a&&b)||(!c&&d)
的计算结果为 false,外部 if
主体不会执行。
现在,它进入了外部 else 部分。
d&&c
的计算结果为假,因为 d
和 c
都是假的。结果,!(d&&c)
的计算结果为真。当然 not a !a
也计算为 true。
最后,!(d&&c)&&(!a)
是真的。所以 printf("4");
执行并输出一个 4