提示:用C语言三角形判断(等边、等腰、普通)
前言
等边三角形的3条边长度都相等,但等腰三角形只有两条边的长度是相等的。如果三角形的3条边长度都不等,那就称为不等边三角形。请编写一个程序,提示用户输入个数,分别表示三角形3条边的长度,然后由程序判断它是什么类型的三角形。提示除了边的长度是否相等,程序是否还应考虑一些其他的东西?
一、三角形判断代码
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main() {
float a, b, c;
printf("请输入三个数:");
scanf("%f %f %f", &a, &b, &c);
while (a<=0 || b<=0 || c<=0)
{
printf("请输入三个正数:");
scanf("%f %f %f", &a, &b, &c);
}
if((a+b)>c && (a+c)>b && (b+c)>a)
{
if(a==b && b==c) {
printf("等边三角形\n");
}
else if(a==b || a==c || b==c) {
printf("等腰三角形\n");
}
else {
printf("普通三角形\n");
}
}
else {
printf("不能构成三角形\n");
}
return 0;
}
二、逻辑分析
- 代码首先确保输入的三个值为正数
- 再确保输入的三条边能构成一个有效的三角形。
- 然后,根据三条边的相等情况判断三角形的具体类型。
- 如果三条边无法构成三角形,程序会进行相应提示。
表达式 (a+b)>c && (a+c)>b && (b+c)>a
,优先级分析:
- 关系运算符优先级:
>
是关系运算符,用于比较两个值。它的优先级高于逻辑运算符。关系运算符的优先级在逻辑运算符之前。
- 逻辑运算符优先级:
&&
是逻辑与运算符,用于连接两个布尔表达式。逻辑运算符的优先级低于关系运算符。
-
&&
运算符的短路特性意味着如果(a+b)>c
为0,那么整个表达式的结果就会是0
,并且不会再计算(a+c)>b
和(b+c)>a
。同样,如果(a+b)>c
和(a+c)>b
都为1
,才会计算(b+c)>a
。
三、减少逻辑分析的代码
#include <stdio.h>
#include <stdlib.h>
int main() {
float a, b, c;
printf("请输入三角形的三条边长(用空格分隔):\n");
scanf("%f %f %f", &a, &b, &c);
// 对边长进行排序(从大到小),以减少逻辑判断
float temp;
if (a < b) {
temp = a;
a = b;
b = temp;
}
if (a < c) {
temp = a;
a = c;
c = temp;
}
if (b < c) {
temp = b;
b = c;
c = temp;
}
// 判断是否满足三角形条件
if (c <= 0 || a >= b + c) {
printf("不满足三角形的条件。\n");
} else if (a == b && b == c) {
printf("等边三角形。\n");
} else if (a == b || b == c) {
printf("等腰三角形。\n");
} else {
printf("不等边三角形。\n");
}
return 0;
}
通过排序,将三角形的边长从大到小排列后,可以减少判断逻辑。在排序后,a
是最大的边,b
和 c
是其余的两个边。这样只需检查 a
是否小于等于 b + c
即可判断是否能构成三角形,这样简化了判断逻辑。
总结
给出了两种方式