gpt4 book ai didi

c++ - 逻辑运算符 ||和 && 的区别——我一直在犯错

转载 作者:搜寻专家 更新时间:2023-10-31 01:26:08 28 4
gpt4 key购买 nike

我是 C++ 的初级程序员,我很难理解逻辑运算符 && 和 ||。

例如,我有一个小任务要编写一个函数,如果 double vector 振荡(例如 1, 3, 2)返回 true , 4, 3, 5, 4).

我尝试了一个非常基本的解决方案。我做了一个for循环

for(int i=1; i<vec.size()-1; i++)

和一个 if 语句,它检查第 i 个位置的元素是否大于或等于它的前任并且大于或等于它的后继 或者如果第 i 个位置的元素低于或等于其前任且低于或等于其后任

if ((vec.at(i) >= vec.at(i-1) && vec.at(i) >= vec.at(i+1))
|| (vec.at(i) <= vec.at(i-1) && vec.at(i) <= vec.at(i+1)))
return false;

但这行不通!但是,如果我把 && 而不是 ||和||而不是 && 它有效!为什么?这是我的逻辑:

如果满足任一子条件(由 || 分隔),则结果应为真,因为如果例如第二个元素大于第一个元素,则数字 vector 不能振荡大于第三个,OR 如果第二个元素低于第一个并且低于第二个

这是我的推理,只是用 && 代替 and,然后用 ||而不是 or ,你得到我的代码,遗憾的是它不起作用。

有人能告诉我为什么我的逻辑有问题吗?

最佳答案

您对&&的理解和 ||很好,但你的推理不正确。如果像你说的那样:

the second element is greater than the first and greater than the third, OR if the second element is lower than the first and lower than the second

...对于所有元素,那么您的 vector 是振荡。对于不振荡的 vector ,您至少需要一个 i其中任何一个为真:a[i - 1] <= a[i] <= a[i + 1]a[i - 1] >= a[i] >= a[i + 1] .用 C++ 术语来说:

if (a[i - 1] <= a[i] && a[i] <= a[i + 1] 
|| a[i - 1] >= a[i] && a[i] >= a[i + 1]) { /* ... */ }

您正在检查与您想要的相反的东西,这就是反转运算符起作用的原因。

关于c++ - 逻辑运算符 ||和 && 的区别——我一直在犯错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55852435/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com