C语言判断直角三角形
#include<stdio.h>#include<stdlib.h>main(){printf("\n请输入三角形三条边\n");floatx,y,z;scanf("%...
#include <stdio.h>
#include <stdlib.h>
main()
{
printf("\n请输入三角形三条边\n") ;
float x,y,z;
scanf("%f,%f,%f",&x,&y,&z);
if(x*x+y*y==z*z||x*x+z*z==y*y||y*y+z*z==x*x)
printf("\nyes");
else
printf("\nno");
system("pause");
}
我的问题是,如果我输入的是小数,0.6,0.8,1.那么程序告诉我不成立。这是为什么。整数的都是成立的。 展开
#include <stdlib.h>
main()
{
printf("\n请输入三角形三条边\n") ;
float x,y,z;
scanf("%f,%f,%f",&x,&y,&z);
if(x*x+y*y==z*z||x*x+z*z==y*y||y*y+z*z==x*x)
printf("\nyes");
else
printf("\nno");
system("pause");
}
我的问题是,如果我输入的是小数,0.6,0.8,1.那么程序告诉我不成立。这是为什么。整数的都是成立的。 展开
9个回答
展开全部
浮点数判断相不相等
不能用“==”
是要用两个数相减,当小于一定的值就是相等的。
因为浮点数在计算机中不是精确表示的,,
判断比如:
if
(abs(x*x+y*y-z*z)<1e-x)
(abs函数代表绝对值的意思,
1e-x
代表
10的负x次方,x可以为6,7,8等)
不能用“==”
是要用两个数相减,当小于一定的值就是相等的。
因为浮点数在计算机中不是精确表示的,,
判断比如:
if
(abs(x*x+y*y-z*z)<1e-x)
(abs函数代表绝对值的意思,
1e-x
代表
10的负x次方,x可以为6,7,8等)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先你判断时应该是
a>=b+c,后面也要加等号,然后就是逻辑问题,就算不是三角形,数值上刚好满足你后3个判断中的一个,也会有yes,所以改改吧
a>=b+c,后面也要加等号,然后就是逻辑问题,就算不是三角形,数值上刚好满足你后3个判断中的一个,也会有yes,所以改改吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
程序没问题啊,我复制测试,不论输入的是 0.6 0.8 1.0 还是 0.6 0.8 1 结果都是yes
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
小数在相乘时会有误差,可以改成(x*x+y*y<=z*z+0.0001&&x*x+y*y>=z*z-0,0001)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询