#include <stdio.h>#include <math.h>#define eps 1e-1//判斷三邊是否能構(gòu)成三角形 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("不能構(gòu)成三角形\n");?? ??? ?return 0;?? ?}}
1 回答

Cfans丶夏
TA貢獻(xiàn)5條經(jīng)驗(yàn) 獲得超2個贊
在C/C++語言中,float與double類型的變量存在小數(shù)點(diǎn)精度的問題,小數(shù)點(diǎn)在二進(jìn)制中的表示是不同的,double類型數(shù)據(jù)存儲的數(shù)據(jù)是不精確的存儲,如0.1可能是0.0999999,這是由于計算機(jī)表示浮點(diǎn)數(shù)的方法造成的精度缺陷。
所以判斷小數(shù)點(diǎn)大小的正確做法是求差值與0比較。例如:
double a,b,c;
if(a+b-c>0 && a+c-b>0 && b+c-a>0)
這樣
- 1 回答
- 0 關(guān)注
- 1525 瀏覽
添加回答
舉報
0/150
提交
取消