C语言:三角形类型判断(循环)

输入三个数,判定是否构成三角形。如果构成三角形,判定三角形类型,并计算三角形面积。 三角形类型如下: 等腰三角形:isosceles triangle 直角三角形:right triangle 等腰直角三角形:isosceles right triangle 等边三角型:equilateral triangle 一般三角形:general triangle 不能构成三角形:no triangle 假设a,b,c为三角形三条边,三角形面积计算公式如下: p = (a+b+c)/2; s=√[p(p-a)(p-b)(p-c)] 提示:两个浮点数由于计算机内部表示的原因可能略有微小的误差,不能用==判定相等。浮点数判定相等用|a-b|<e , e为足够小的数,假设0.001。C语言中绝对值函数原型是:double fabs(double x),头文件math.h。
最新回答
思檀郎

2024-11-29 09:59:30

按照你的要求编写的判断三角形类型的C语言程序如下

#include<stdio.h>
#include<math.h>
float cal_area(float a,float b,float c){
 float p,s;
 p=(a+b+c)/2;
 s=sqrt(p*(p-a)*(p-b)*(p-c));
 return s;
}
int main(){
 int i,n;
 float a,b,c,e=0.001;
 scanf("%d",&n);
 for(i=0;i<n;i++){
  scanf("%f%f%f",&a,&b,&c);
  if(a+b<=c || a+c<=b || b+c<=a){
   printf("no triangle\n");
  }else if(fabs(a-b)<e && fabs(b-c)<e){
   printf("equilateral triangle,");
   printf("%.1f\n",cal_area(a,b,c));
  }else if((fabs(a-b)<e || fabs(b-c)<e || fabs(a-c)<e) && (fabs(a*a+b*b-c*c)<e || fabs(a*a+c*c-b*b)<e || fabs(b*b+c*c-a*a)<e)){
   printf("isosceles right triangle,");
   printf("%.1f\n",cal_area(a,b,c));
  }else if(fabs(a-b)<e || fabs(b-c)<e || fabs(a-c)<e){
   printf("isosceles triangle,");
   printf("%.1f\n",cal_area(a,b,c));
  }else if(fabs(a*a+b*b-c*c)<e || fabs(a*a+c*c-b*b)<e || fabs(b*b+c*c-a*a)<e){
   printf("right triangle,"); 
   printf("%.1f\n",cal_area(a,b,c));
  }else{
   printf("general triangle,"); 
   printf("%.1f\n",cal_area(a,b,c));
  }
 }
 return 0;
}


运行结果
3
3.0 2.0 6.0
no triangle 
3.0 4.0 5.0
right triangle,6.0
1.0 1.0 1.414
isosceles right triangle,0.5