#include <stdio.h>#include <math.h>#define eps 1e-1//判断三边是否能构成三角形 int triangle(double a, double b, double c){ if((a+b>c) && (a+c>b) && (b+c>a) && (a>0 && b>0 && c>0)) { return 1; } else { return 0; }}//判断三角形是否为等边三角形 int equilateral(double a, double b, double c){ if((a==b) && (b==c)) { return 1; } else { return 0; }}//判断三角形是否为等腰三角形 int isosceles(double a, double b, double c){ if((a==b) || (b==c) || (a==c)) { return 1; } else { return 0; }}//判断三角形是否为直角三角形 int right(double a, double b, double c){ if(fabs(a * a + b * b - c * c) <= eps || fabs(a * a + c * c - b * b) <= eps || fabs(b * b + c * c - a * a) <= eps) { return 1; } else { return 0; }}int main(){ double a, b, c; printf("Input the three edge length a, b, c:"); scanf("%lf,%lf,%lf", &a, &b, &c); if(triangle(a, b, c)) { if(equilateral(a, b, c)) { printf("等边三角形\n"); return 0; } if(isosceles(a, b, c) && right(a, b,c)) { printf("等腰直角三角形\n"); return 0; } if(isosceles(a, b, c)) { printf("等腰三角形\n"); return 0; } if(right(a, b, c)) { printf("直角三角形\n"); return 0; } printf("一般三角形\n"); return 0; } else { printf("不能构成三角形\n"); return 0; }}
1 回答
Cfans丶夏
TA贡献5条经验 获得超2个赞
在C/C++语言中,float与double类型的变量存在小数点精度的问题,小数点在二进制中的表示是不同的,double类型数据存储的数据是不精确的存储,如0.1可能是0.0999999,这是由于计算机表示浮点数的方法造成的精度缺陷。
所以判断小数点大小的正确做法是求差值与0比较。例如:
double a,b,c;
if(a+b-c>0 && a+c-b>0 && b+c-a>0)
这样
- 1 回答
- 0 关注
- 1460 浏览
添加回答
举报
0/150
提交
取消