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


一、問題描述

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

二、算法思想

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

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

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

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

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

四、運行結果

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM