具有 3 个条件的 if 语句(三角形存在)
If statement with 3 conditions (triangleExists)
检查三角形是否存在:当它的边的每一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;
}
我尝试过的选项(也尝试过&&标记):
if ((a < (b + c)) || (b < (a + b)) || (c < (a + b)))
if ( a < (b + c) || b < (a + b) || c < (a + b))
if ((a < (b + c))==true || (b < (a + b))==true || (c < (a + b))==true)
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
的边,4
和500
不能形成三角形。
要获得正确的行为,您可以从使用||
更改为&&
(即从or
更改为and
)。或者,您可以反转测试并反转结果 - 也就是说,如果> (b + c) ||b> (a + c) ||c> (a + b),然后返回 false。否则,返回 true。
相关文章:
- C++模板来检查友元函数的存在
- 既然存在危险,为什么项目要使用-I include开关
- 我们可以访问一个不存在的联盟的成员吗
- C++:对不存在的命名空间使用命名空间指令
- C++quit()函数中可能存在作用域问题
- 绘制旋转的三角形
- C++擦除(如果存在)
- g++ 说函数不存在,即使包含正确的标头
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 有了gcc,是否可以链接库,但前提是它存在
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- gcc和clang在表达式是否为常量求值的问题上存在分歧
- 如何用for循环在c++中生成单词三角形
- C++Builder中的OnClick事件签名存在问题
- 如何正确地将分支添加到已存在的树中
- 我知道函数调用中存在歧义.有没有办法调用foo()函数
- 如何检查QList中是否存在值
- 如何使用递归打印修改后的星号三角形图案
- 根据某个函数是否存在启用模板
- 具有 3 个条件的 if 语句(三角形存在)