大学C语言初学者一枚,这是一个程序测试的作业(判断三角形的类型),错在哪里?

2025-05-18 08:25:10
推荐回答(4个)
回答(1):

本身逻辑没错,你输入1   2  3,就可以得到不是三角形


至于等腰直角三角形的情况?

#include 
#include 
main()
{
 float a, b, c;
 
 printf("Input the three edge length:");
 scanf("%f, %f, %f", &a, &b , &c);   
 if (a+b>c && b+c>a && a+c>b) /*三角形的基本条件*/
 {
  if (a==b || b==c || c==a)
  {
     if(a*a+b*b==c*c || a*a+c*c==b*b || b*b+c*c==a*a)
           printf("等腰直角三角形");
     else 
          printf("等腰三角形");
   }
  else if (a*a+b*b==c*c || a*a+c*c==b*b || b*b+c*c==a*a)
   printf("直角三角形");
  else
   printf("一般三角形");  
 }
 else
 {
  printf("不是三角形\n");
 }
}

回答(2):

无论如何都不是三角形?
也可能是你输入的问题,你是怎么输入的?
3,4,5,像这样?

回答(3):

#include 
#include 
int main()
{
 float a, b, c;
 int flag=0;
 
 printf("Input the three edge length:");
 scanf("%f, %f, %f", &a, &b , &c);   
 if (a+b>c && b+c>a && a+c>b) /*三角形的基本条件*/
 {
  if (a==b || b==c || c==a)
  {
flag=1;
printf("等腰三角形");
  }
  if (a*a+b*b==c*c || a*a+c*c==b*b || b*b+c*c==a*a)
  {
flag=1;
printf("直角三角形");
  }
  if(flag==0)
printf("一般三角形");  
 }
 else
 {
  printf("不是三角形\n");
 }
 return 0;
}

注意直角三角形也可能是等腰三角形,比如等腰直角三角形,所以判断不能用else if,而直接用if判断。另外判断是一般三角形,也不能用else if,因为如果用了else if 就是说在非直角三角形中判断,假如是等腰三角形,但不是直角三角形,就会输出一般三角形,是不符合逻辑的

回答(4):

a,b,c是float型,c语言中float型判断相等不能直接用==,用fabs(a-b)<0.00001判断相等】

另外,建议输入不要“,”scanf("%f%f%f", &a, &b , &c);以防输入时忘记导致输入错误