C语言三角形类型判断函数实现求助(仅输入两个内角)
问题分析与修正代码
原代码的核心问题
- 判断顺序错误:直角等腰三角形的判断分支在普通直角、等腰分支之后,导致这类情况会被前面的分支优先捕获(比如输入45、45时,会先触发直角判断返回1,永远到不了返回3的分支)。
- 合法性检查滞后:
num1 + num2 >= 180的非三角形判断放在了类型判断之后,不符合逻辑——如果连三角形都不是,无需判断类型。 - 逻辑冗余:第三个分支的条件是前两个分支的交集,但由于顺序问题完全无法被执行。
修正后的代码
int TriangleType(unsigned num1, unsigned num2) { int result; // 先判断是否为有效三角形 if (num1 + num2 >= 180) { result = -1; } // 优先判断既是直角又是等腰的情况 else if ((num1 == 90 && num2 == 45) || (num2 == 90 && num1 == 45) || (num1 == num2 && num1 + num2 == 90)) { result = 3; } // 再判断普通直角三角形 else if (num1 == 90 || num2 == 90 || num1 + num2 == 90) { result = 1; } // 然后判断普通等腰三角形 else if (num1 == num2 || (180 - num1 - num2) == num1 || (180 - num1 - num2) == num2) { result = 2; } // 其他不符合上述类型的情况 else { result = 0; } return result; }
关键修正说明
- 调整判断优先级:把合法性检查放在最前端,再优先处理直角等腰的特殊组合,最后依次判断普通直角、普通等腰,确保每个场景都能被正确捕获。
- 简化特殊场景判断:直接枚举直角等腰三角形的所有可能角度组合,逻辑更直观,避免复杂的条件交集运算。
- 移除无效分支:原代码中永远无法触发的冗余分支被删除,减少逻辑混乱。
内容的提问来源于stack exchange,提问作者Gaash Shmilovich
相关产品推荐
相关产品推荐

