为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C
枫中心雨 2018-11-14 22:11:22
#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)

这样

查看完整回答
反对 回复 2018-11-16
  • 1 回答
  • 0 关注
  • 1460 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信