c语言函数判断三角形类型,为什么输入任何数据显示的都是不能构成三角形

#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;
    }
}

枫中心雨
浏览 1474回答 1
1回答

Cfans丶夏

在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)这样
打开App,查看更多内容
随时随地看视频慕课网APP