C语言实现三角形类型识别时运行结果与数学规则不符问题排查
C语言三角形类型识别代码错误修正方案
存在的核心问题
- 初始化顺序错误:平方值A、B、C的计算放在了a、b、c用户输入之前,此时a、b、c为未初始化的随机垃圾值,计算结果完全不符合预期
- 运算符误用:直角判断处的
if(A=B+C)为赋值操作,并非相等判断,应改为== - 类型判定逻辑颠倒:数学规则为「最长边平方 > 其余两边平方和为钝角,<为锐角」,代码中写反了对应逻辑
- 分支逻辑不互斥:三个判断分支没有关联,可能出现同时输出多个类型结果的问题
- 缺少合法性校验:未先校验输入的三边是否能构成合法三角形
修正后可运行代码
#include <stdio.h> int main() { int a, b, c; int A, B, C; printf("请输入最长边长度\n"); scanf("%d", &a); printf("请输入第二条边长度\n"); scanf("%d", &b); printf("请输入第三条边长度\n"); scanf("%d", &c); // 先校验是否为合法三角形 if (a >= b + c || b >= a + c || c >= a + b) { printf("输入的三边无法构成合法三角形"); return 0; } // 输入完成后再计算平方值 A = a * a; B = b * b; C = c * c; // 互斥分支判断类型 if (A == B + C) { printf("直角三角形"); } else if (A > B + C) { printf("钝角三角形"); } else { printf("锐角三角形"); } return 0; }
内容的提问来源于stack exchange,提问作者nirvan
相关产品推荐
相关产品推荐

