1. 程式人生 > >判斷三角形的類型並求其面積

判斷三角形的類型並求其面積

std 提高 alt 方法 png src 它的 補充 是否

一、問題描述

根據輸入的三角形的三條邊判斷三角形的類型,並輸出其面積和類型。

二、算法思想

首先判斷其兩條邊之和是否大於第三邊,若大於則判斷可以構成三角形,再進一步判斷該三角形是什麽三角形,並計算這個三角形的面積;否則不能構成三角形。

①從鍵盤輸入三角形的三條邊

②判斷兩邊之和是否大於第三條邊

③若條件成立,則可以構成一個三角形,計算其面積。已知三角形的三個邊長,計算其面積計算方法:

    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; }

四、運行結果

技術分享

技術分享

技術分享

技術分享

技術分享

技術分享

判斷三角形的類型並求其面積