【问题标题】:Are there any problems with this Boolean based C programming question?这个基于布尔的 C 编程问题有什么问题吗?
【发布时间】:2022-01-13 02:26:13
【问题描述】:

我目前正在学习布尔数据类型,我想知道 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”,我对为什么有点困惑。谢谢

【问题讨论】:

  • &amp;&amp;|| 运算符将其操作数视为布尔值并返回布尔值。无需与true 明确比较。
  • @Barmar 他们评估为int
  • @M.M 这是布尔值。

标签: c if-statement boolean


【解决方案1】:

要想了解代码如何执行并给出最终结果,关键是要了解运算符的优先级。

在三个逻辑运算符中,即逻辑非!逻辑和&amp;&amp;逻辑或||logic not ! 的优先级最高,然后是 logic and &amp;&amp;,然后是 logic or ||

logic not ! 的优先级高于 logic and &amp;&amp;logic or ||,所以 a&amp;&amp;b!c&amp;&amp;d 都评估为 false

因为(a&amp;&amp;b)||(!c&amp;&amp;d) 的计算结果为假,所以外部if 主体不会执行。

现在,它进入了外部的 else 部分。

d&amp;&amp;c 的计算结果为 false,因为 dc 都是 false。因此,!(d&amp;&amp;c) 的计算结果为真。当然 不是 !a 的计算结果也为 true。

最后,!(d&amp;&amp;c)&amp;&amp;(!a) 是真的。所以printf("4"); 执行并输出4

【讨论】:

  • 哦,谢谢!我认为如果它明确地 == "false" 或 "true" 那么它将执行。因此 if-else 语句仅在 boolean 值为 true 时执行。
  • @shafana123 是的,你是对的。仅当 if 之后的括号中的表达式计算结果为真 if(expression) 时才会执行 if 部分,否则将执行 else 部分。
猜你喜欢
  • 2014-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-08
  • 1970-01-01
相关资源
最近更新 更多