C语言 三角形

输入三角形三条边的长度,判断它们能否构成三角形,若能则指出是何种三角形:等边、等腰、直角、一般;若不能构成三角形,则输出相应的信息。
我改成liucongshan的以后试了一下,我输入1,2,4是一般三角形
而输入4,2,1是两边之合大与第三边,什么意思?
#include<stdio.h>
void main()
{
float a,b,c;
printf("输入三个数字:");
scanf("%f,%f,%f",&a,&b,&c);
if(a<b+c&&b<a+c&&c<a+c&&a>0&&b>0&&c>0)
{
if(a==b&&b==c)
printf("等边三角形\n");
else if(b==c||a==b||a==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
printf("一般三角形\n");
}
else
{
if(a<=0||b<=0||c<=0)
printf("输入数字不合法\n");
else if(a>=b+c||b>=a+c||c>=a+c)
printf("两边之合大于第三边\n");
}
}

第1个回答  2008-09-27
#include<stdio.h>
void main()
{
float a,b,c;
printf("输入三个数字:");
scanf("%f,%f,%f",&a,&b,&c);
if(a<b+c&&b<a+c&&c<a+c&&a>0&&b>0&&c>0)
{
if(a==b&&b==c) printf("等边三角形\n");
else if(b==c&&b!=a||a==b&&a!=c||a==c&&c!=b) printf("等腰三角形\n");
if((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a)) printf("直角三角形");
}
else
{
if(a<=0||b<=0||c<=0) printf("输入数字不合法\n");
if(a>=b+c||b>=a+c||c>=a+c) printf("两边之合大于第三边\n");
}
}
我试了一下,如果把float a,b,c改为int型的话,就不会出现对a^2等式子的错误提示。我想应该是 X^Y里X必须为整形吧。还有你的if(a==b==c) 这些式子,不能那样写啊。
第2个回答  2008-09-27
#include <stdio.h>
void main()
{ float a,b,c;
scanf("%f %f %f",&a,&b,&c);
int type=0; //三角形类型;
if(((a<=0)||(b<=0)||(c<=0)) //不合理边长
||((a>=b+c)||(b>=a+c)||(c>=a+b))) //两边之和小于第三边
type=1;
else
{
if((a==b)&&(a==c))//等边三角形
type=2;
else
{
if((a==b)||(b==c)||(a==c))
type+=10;//等腰三角形
if(((a*a)+(b*b)==c*c)||((a*a)+(c*c)==b*b)||((c*c)+(b*b)==a*a)))
type+=20;//直角三角形
}

}
switch(type)
{
case 1: printf("不是三角形 \n");
break;
case 2: printf("等边三角形 \n");
break;
case 10: printf("等腰三角形 \n");
break;
case 20: printf("直角三角形 \n");
break;
case 30: printf("等腰直角三角形 \n");
break;
default: printf("一般三角形 \n");
break;

}
}
第3个回答  2008-09-27
修改好了,a==b==c不能这样用a==b!=c也一样,这里的不等于可以省略.a^2改成a*a,a为float型
#include<stdio.h>
void main()
{
float a,b,c;
printf("输入三个数字:");
scanf("%f,%f,%f",&a,&b,&c);
if(a<b+c&&b<a+c&&c<a+c&&a>0&&b>0&&c>0)
{
if(a==b&&b==c)
printf("等边三角形\n");
else if(b==c||a==b||a==c)
printf("等腰三角形\n");
else if(a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a)
printf("直角三角形");
}
else
{
if(a<=0||b<=0||c<=0)
printf("输入数字不合法\n");
else if(a>=b+c||b>=a+c||c>=a+c)
printf("两边之合大于第三边\n");
}
}
第4个回答  2008-09-27
#include <iostream>

using namespace std;

void t(int a,int b,int c)
{
long l=a,s1=b,s2=c;
if(b>l)
{
l=b;s1=a;s2=c;
}
if(c>l)
{
l=c;s1=a;s2=b;
}

if(s1+s2<=l)cout<<"不是三角形"<<endl;
else
{
if(s1==s2&&s1!=l)cout<<"等腰三角形"<<endl;
else if(s1==s2&&s1==l)cout<<"等边三角形"<<endl;
else if(s1*s1+s2*s2==l*l)cout<<"直角三角形"<<endl;
else cout<<"一般三角形"<<endl;
}

}

void main()
{
int a,b,c;
cout<<"输入三边(a,b,c):"<<endl;
cin>>a>>b>>c;
t(a,b,c);
}
第5个回答  2008-09-30
if(a<b+c&&b<a+c&&c<a+c&&a>0&&b>0&&c>0)

这段错了,是C<a+b;
自己改;下边也是
if(a>=b+c||b>=a+c||c>=a+c)

是c>=a+b;

其余的没毛病,把这俩段改了就对了

搞程序要心细点啊本回答被提问者采纳
相似回答