码迷,mamicode.com
首页 > 其他好文 > 详细

判断三角形的类型并求其面积

时间:2017-05-05 19:21:50      阅读:254      评论:0      收藏:0      [点我收藏+]

标签:分享   提高   判断   clu   stdio.h   scanf   测试   程序   补充   

一、问题描述

根据输入的三角形的三条边判断三角形的类型,并输出其面积和类型。

二、算法思想

首先判断其两条边之和是否大于第三边,若大于则判断可以构成三角形,再进一步判断该三角形是什么三角形,并计算这个三角形的面积;否则不能构成三角形。

①从键盘输入三角形的三条边

②判断两边之和是否大于第三条边

③若条件成立,则可以构成一个三角形,计算其面积。已知三角形的三个边长,计算其面积计算方法:

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

四、运行结果

技术分享

技术分享

技术分享

技术分享

 技术分享

技术分享

 

判断三角形的类型并求其面积

标签:分享   提高   判断   clu   stdio.h   scanf   测试   程序   补充   

原文地址:http://www.cnblogs.com/IronLavender/p/6814472.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!