c语言编写程序:输入三角形的三条边,判断它们能否构成三角形,若能则指出何种三角形。

我的程序错在哪里了?为什么不管输入什么结果都是等边三角形。。。#include<stdio.h>intmain(){floata,b,c;printf("请输入边长:\n... 我的程序错在哪里了?
为什么 不管输入什么 结果都是 等边三角形。。。
#include <stdio.h>
int main()
{
float a,b,c;
printf("请输入边长:\n");
scanf("%f,%f,%f",&a,&b,&c);
if(a+b>=c || a+c>=b || b+c>=a)
{
if (a==b||a==c||b==c)
printf("等边三角形\n");
else if ((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a))
printf("直角三角形\n");
else if (a==b&&a==c&&b==c )
printf("等腰三角形\n");
}
else
printf("不构成三角形\n");
return 0;
}
展开
 我来答
iiiiiiiipl
2019-05-23 · TA获得超过9921个赞
知道答主
回答量:68
采纳率:66%
帮助的人:3.7万
展开全部

&&、||运算符使用错误,代码为:

#include <stdio.h>

int main()

float a,b,c; 

printf("请输入边长:\n"); 

scanf("%f,%f,%f",&a,&b,&c);

if(a+b>=c || a+c>=b || b+c>=a)    

{ if (a==b&&a==c&&b==c) 

printf("等边三角形\n");  

else if ((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a)) 

printf("直角三角形\n"); 

else if (a==b||a==c||b==c ) 

printf("等腰三角形\n"); }    

else   

printf("普通三角形\n"); 

return 0;

}

扩展资料:

&&、|| 和 !的优先级为:

! > && > ||

! 运算符比许多 C++ 运算符具有更高的优先级。因此,为了避免错误,应始终将其操作数括在括号中,除非打算将其应用于没有其他操作符的变量或简单表达式。例如,来看以下表达式:

! (x > 2)
! x > 2

第一个表达式将 !运算符应用于表达式 x>2,它是在问“x 是否不大于 2”,然而,第二个表达式是将 !运算符应用于到 x。它是在问“x 的逻辑是否大于 2”。

假设 x 被设置为 5,由于 5 是非零值,所以被认为是 true,而 !运算符会将其反转为 false,即为 0,然后,> 运算符将确定 0 是否大于 2。为了避免这种错误,始终使用括号是明智的。

参考资料:

百度百科-逻辑运算符

古尔格
推荐于2017-09-18 · TA获得超过627个赞
知道小有建树答主
回答量:300
采纳率:50%
帮助的人:257万
展开全部
#include <stdio.h>

int main()

{

 float a,b,c;

 printf("请输入边长:\n");

 scanf("%f,%f,%f",&a,&b,&c);

 if(a+b>=c || a+c>=b || b+c>=a)   

 {

 if (a==b&&a==c&&b==c)//这里||改为&&

 printf("等边三角形\n"); 

 else if ((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a))

 printf("直角三角形\n");

 else if (a==b||a==c||b==c )//这里&&改为||

 printf("等腰三角形\n");

 } 

   else 

        printf("不构成三角形\n");

 return 0;

}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友b452582
推荐于2017-10-14 · TA获得超过2581个赞
知道小有建树答主
回答量:953
采纳率:100%
帮助的人:323万
展开全部
#include <stdio.h>
int main()
{
float a,b,c;
printf("请输入边长:\n");
scanf("%f %f %f",&a,&b,&c);
printf("a=%f b=%f c=%f\n",a,b,c);
if(a+b>=c && a+c>=b && b+c>=a )
{ if (a==b && a==c && b==c) //必须先用&& ,否则等腰会把等边包括在内啦
printf("等边三角形\n");
else
if ((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a))
printf("直角三角形\n");
else
if (a==b||a==c||b==c )
printf("等腰三角形\n");
else //一般三角形的判定漏掉啦
printf("一般三角形\n");
}
else
printf("不构成三角形\n\n");
system("pause");
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
西湖观柳
2014-03-05 · TA获得超过148个赞
知道答主
回答量:195
采纳率:0%
帮助的人:143万
展开全部
First, float number shouldn't be compared with this equal operater == , you should sub them, and then compare the result with 1e-7 or so.
Second, you missed use "OR" and "AND" operater.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式