具有 3 个条件的 if 语句(三角形存在)

If statement with 3 conditions (triangleExists)

本文关键字:三角形 存在 语句 if 条件 具有      更新时间:2023-10-16

检查三角形是否存在:当它的边的每一1小于其他2边的总和时。

我尝试了很多选择:

float a=3, b=15, c=7; //its still taking 'y'
bool triangleExists(float a, float b, float c)
{
if ((a < (b + c)) || (b < (a + b)) || (c < (a + b)))
{
std::cout << "y" << std::endl;
return true;
}else 
std::cout << "n" << std::endl;;
return false;
}

我尝试过的选项(也尝试过&&标记):

  1. if ((a < (b + c)) || (b < (a + b)) || (c < (a + b)))

  2. if ( a < (b + c) || b < (a + b) || c < (a + b))

  3. if ((a < (b + c))==true || (b < (a + b))==true || (c < (a + b))==true)

  4. if (a < b + c || b < a + b || (c < a + b)

我可能错过了一些简单的东西。 如果你能帮忙,我会很高兴的。

在你的中间条件下,你有 b <(a + b),而它应该是 b <(a + c)

除了墨菲@Zackary已经指出的错别字外,你的逻辑还有一个更根本的问题。

特别是,仅当满足所有三个条件时,函数才应返回true。将中间项更正为b < (a + c)后,即使您指定的数字不能形成三角形,它仍然返回true(并打印y)。

例如:

#include <iostream>
bool triangleExists(float a, float b, float c)
{
if ((a < (b + c)) || (b < (a + c)) || (c < (a + b)))
{
std::cout << "y" << std::endl;
return true;
}
else
std::cout << "n" << std::endl;;
return false;
}
int main() {
float a = 3, b = 4, c = 500; //its still taking 'y'
triangleExists(a, b, c);
}

。打印y,即使3的边,4500不能形成三角形。

要获得正确的行为,您可以从使用||更改为&&(即从or更改为and)。或者,您可以反转测试并反转结果 - 也就是说,如果> (b + c) ||b> (a + c) ||c> (a + b),然后返回 false。否则,返回 true。