判断三角形的类型并求其面积
一、问题描述
根据输入的三角形的三条边判断三角形的类型,并输出其面积和类型。
二、算法思想
首先判断其两条边之和是否大于第三边,若大于则判断可以构成三角形,再进一步判断该三角形是什么三角形,并计算这个三角形的面积;否则不能构成三角形。
①从键盘输入三角形的三条边
②判断两边之和是否大于第三条边
③若条件成立,则可以构成一个三角形,计算其面积。已知三角形的三个边长,计算其面积计算方法:
A、海伦公式。已知三角形三边长分别为a、b、c,则它的面积为:S= p(p−a)(p−b)(p−c) ,其中p为半周长,即:p= (a+b+c)/2
B、先根据余弦定理求出某个交的余弦值求正弦值,最后S=1/2*ab*sinC
④判断三角形类型。首先判断其是否三边相等,条件成立则为等边三角形;否则判断其是否有两边相等,条件成立则为等腰三角形;否则判断是否有两边的平方和等于第三条边的平方,条件成立则为直角三角形;否则判断其为普通三角形。
补充:其实输入三条边只要大于0且都相等,那么一定是等边三角形;如果有两条边相等,如a==b,那么只要测试a+b和c的关系即可(因为a+b>c,a=b,c>0,那么a+c>b和b+c>a是一定成立的)。显然这样程序效率可以提高,但是同时也损失了程序结构的明确性以及测试的简易性,所以不建议这样走捷径。
三、程序代码
#include <stdio.h> #include <math.h> int main(){ int a, b, c; float s, area; printf("分别输入三角形的三条边,以空格隔开:\n"); scanf("%d %d %d", &a, &b, &c); if(a+b>c && a+c>b && b+c>a){ s = (float)(a+b+c)/2;//去掉这个float,可能会有面积不对的情况 area = (float)sqrt(s * (s-a) * (s-b) * (s-c)); //面积保留小数点后三位 printf("三角形的面积为:%.3f\n", area); if(a==b && a==c){ printf("该三角形是等边三角形!\n"); } else 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{ printf("该三角形是普通三角形!\n"); } } else{ printf("这三条边无法构成三角形!\n"); } return 0; }
四、运行结果