三个正数a、b、c能构成三角形当且仅当a>0、b>0、c>0且a+b>c、a+c>b、b+c>a同时成立;需先判断正数,再用三个不等式联合判断,缺一不可。

怎么用 C++ 判断三边能否构成三角形
直接判断:三个正数 a、b、c 能构成三角形,当且仅当同时满足:a + b > c、a + c > b、b + c > a。注意——这三条必须全为真,缺一不可。
常见错误是只写一个不等式(比如只判 a + b > c),或者用 && 连接时漏掉括号导致优先级出错。
实操建议:
- 先确保输入的三边都是正数,负数或零直接拒绝(可加
if (a 检查) - 把三个不等式用括号包好再用
&&连接:(a + b > c) && (a + c > b) && (b + c > a) - 如果要区分等腰、等边、直角等类型,必须在确认是三角形之后再判断,否则逻辑错乱
C++ 输入三边后输出“是”或“否”的完整代码片段
作业常用结构:读入三个 double 或 int,判断后输出结果。别忘了包含头文件和使用 std::cin / std::cout。
立即学习“C++免费学习笔记(深入)”;
示例(简洁可用):
#includeusing namespace std; int main() { double a, b, c; cin >> a >> b >> c; if (a <= 0 || b <= 0 || c <= 0) { cout << "否" << endl; return 0; } if ((a + b > c) && (a + c > b) && (b + c > a)) { cout << "是" << endl; } else { cout << "否" << endl; } return 0; }
注意:用 double 更稳妥,避免整数除法干扰;若题目明确要求整数输入,用 int 也可以,但比较时仍按整数运算处理(没问题)。
为什么不能只用两边之和大于第三边中的一个条件
因为三角形不等式是**对称且必要**的。比如 a=1, b=2, c=5,虽然 a + c > b(1+5>2)和 b + c > a(2+5>1)成立,但 a + b > c(1+2>5)不成立 → 实际无法围成三角形。
典型翻车场景:
- 用户输入顺序随意(如把最长边输在第一个),只判
a + b > c就会误判 - 用
max({a,b,c})提前找最大边,再判其余两边和是否大于它——可行,但多一步计算,不如直接三连判清晰 - 有人试图用
abs(a - b) 等变形,容易引入浮点误差或符号问题,不推荐作业中用
边界情况和易忽略的坑
作业里容易被扣分的地方往往不在主逻辑,而在细节:
-
float类型慎用:精度低,1e-6级别的误差可能导致a + b == c时误判为“大于”,应尽量用double - 输入非数字(如字母)会导致
cin失败,a、b、c保持未初始化值——加cin.fail()检查更健壮,但基础作业通常不强制 - 等号不能取:三角形定义要求**严格大于**,
a + b == c是退化三角形(三点共线),题目没特别说明就应判“否” - 如果后续要算面积(如海伦公式),必须先确保是有效三角形,否则
sqrt参数可能为负
最常被忽略的是:没检查输入是否为正数,直接进不等式判断,导致负边长“意外”通过检验。









