不想秃头啊 发表于 2023-5-9 20:22:27

等价于的条件怎么看啊

while (!x&&!y)中循环条件表达式等价于
a    x=0&&y=0
b    !(x∥y)
c    !(x==0∥y==0)

这种题要怎么搞,感觉做一道错一道,有人能讲讲不,对我非常重要,感谢感谢

isdkz 发表于 2023-5-9 20:22:59

这道题考察的是逻辑运算符的优先级和结合性。

首先,逻辑运算符的优先级从高到低依次为 NOT(!)、AND(&&)、OR(||)。因此,表达式中的 NOT 运算符优先级最高,所以先进行取反操作。

然后,逻辑运算符的结合性指的是多个相同优先级的运算符在没有括号的情况下是从左往右计算还是从右往左计算。AND 和 OR 运算符的结合性都是从左往右计算。

根据以上规则,我们可以将表达式展开为:

while (!(x || y) ) // 将 !x && !y 用德摩根定律展开
while (!x && !y || 0) // 将 !x || !y 用分配律展开
while ((!x || 0) && (!y || 0)) // 将 !x && !y 用分配律展开
while (x == 0 && y == 0) // 将 !0 用布尔值代替

因此,循环条件表达式等价于选项 C:!(x==0∥y==0)。

sfqxx 发表于 2023-5-9 20:46:17

这道题看起来是要求while循环的条件表达式,该表达式最终应该返回一个布尔值(true或false)。在这个表达式中,有两个变量x和y需要考虑。

首先,!运算符表示逻辑非,即如果表达式是true,则返回false;如果表达式是false,则返回true。所以接下来我们讨论如何处理&&运算符。

&&运算符是逻辑与运算符,它只有在两个操作数都为true时才会返回true,否则返回false。所以我们需要回答的问题是当且仅当x和y都是0时表达式a、b和c都将返回true。因此,我们可以把每个表达式转换为以下形式:

a) x == 0 && y == 0
b) !(x || y)
c) !(x != 0 || y != 0)

注意:在上述表达式中,!= 是不等于运算符,|| 是逻辑或运算符。

这里要注意的是,在C语言中,0表示false,任何非零值表示true。所以当x和y都是0时,它们被视为false。因此,在这种情况下,所有三个表达式的结果都是true,否则都是false。

因此,我们可以得出答案选择【a. x == 0 && y == 0】来表示while循环的判断条件最准确且等价于给出的原始表达式。

希望这个回答对你有所帮助。

不想秃头啊 发表于 2023-5-9 21:00:13

isdkz 发表于 2023-5-9 20:22
这道题考察的是逻辑运算符的优先级和结合性。

首先,逻辑运算符的优先级从高到低依次为 NOT(!)、AND( ...

可是答案是B哭

不想秃头啊 发表于 2023-5-9 21:02:04

sfqxx 发表于 2023-5-9 20:46
这道题看起来是要求while循环的条件表达式,该表达式最终应该返回一个布尔值(true或false)。在这个表达式 ...

离谱的是 答案是B

sfqxx 发表于 2023-5-9 21:04:17

emmm,你咋知道

不想秃头啊 发表于 2023-5-9 21:12:56

sfqxx 发表于 2023-5-9 21:04
emmm,你咋知道

我这期末考题库,有答案啊

isdkz 发表于 2023-5-9 21:17:24

根据优先级 !x&&!y 相当于 (!x)&&(!y) ,在这里只要 (!x) 与 (!y) 中有一个为 false,则整个表达式为 false

也就是说 x 和 y 中只要有一个为 true,则整个表达式为 false

只有 b 满足了 (x 和 y 中只要有一个为 true,则整个表达式为 false)

因为 x || y 中 x 和 y 中只要有一个为 true,则整个表达式为 true,而 !(x∥y) 则为 false

sfqxx 发表于 2023-5-9 21:19:22

这是因为"!"运算符表示逻辑非,将一个表达式的真值取反,而 "&&" 运算符表示逻辑与,只有当它两边的表达式都为真时,整个表达式才为真。由于 "!" 运算符具有更高的优先级,因此先执行 "!x" 和 "!y" 的运算,得到表达式 "!x || !y" 的值(其中 || 表示逻辑或)。最后将表达式取反,更一般地说,可以用德摩根定理来转换该表达式,即:

!(!x || !y) = x && y

因此,答案是 b) !(x∥y)。
最佳答案给我!
页: [1]
查看完整版本: 等价于的条件怎么看啊