三角形判定问题

问题描述:输入三个正整数,判断是否构成三角形,若构成,会是怎样的三角形?
输入:三个正整数

输出:是否构成三角形的判定结果

举例:输入3 4 5,输出:3,4,5构成普通直角三角形
解题思路:
根据三角形三边关系:斜边小于其余两边之和 判定是否构成三角形。
在三角形集合中分为三个小集合分别为钝角三角形、直角三角形和锐角三角形,判定方法为斜边平方与非斜边平方的数量关系。
在锐角三角形中有一个特殊子集——等腰三角形,等腰三角形又有一个儿子等边三角形;直角三角形和钝角三角形情况类似,都存在这种层层包含的关系。
因而,现阶段选用 if-else语句描述这种选择关系。代码如下:

/*问题:输入三个正整数,判断是否构成三角形,若构成会是怎样的三角形
        Written by: Jimmy Tung
        Date : 2020.02.27
*/
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int a, b, c, temp; //定义三个int类型的内存空间存放输入的正整数
    printf("请输入三个正整数:");
    scanf("%d%d%d", &a, &b, &c);

 //找到最大值C
    if(a > b)
    {
        temp = a;
        a = b;
        b = temp;
    }
    if(b > c)
    {
        temp = b;
        b = c;
        c = temp;
    }

//三角形判定
    if( a+b > c )
    {
        if(a*a + b*b > c*c)//锐角三角形
        {
            if(a == b)
            {
                if(b == c)
                {
                    printf("%d,%d,%d构成等边三角形\n", a, b, c);
                }
                else
                    printf("%d,%d,%d构成等腰三角形\n", a, b, c);
            }
            else
                printf("%d,%d,%d构成普通锐角三角形\n", a, b, c);
        }

        else if(a*a + b*b == c*c) //直角三角形
        {
            if(a == b)
            {
                printf("%d,%d,%d构成等腰直角三角形\n", a, b, c);
            }
            else
                printf("%d,%d,%d构成普通三角形\n", a, b, c);
        }

        else //钝角三角形
        {
            if(a == b)
            {
                printf("%d,%d,%d构成等腰钝角三角形\n", a, b, c);
            }
            else
                printf("%d,%d,%d构成普通钝角三角形\n", a, b, c);
        }
    }
    else
        printf("%d,%d,%d无法构成三角形\n", a, b, c);

    system("PAUSE");
    return 0;
}

总结一下:
值得注意的是,由于两个相等整数的平方和不可能等于另一个整数的平方,所以无法找到等腰直角三角形的测试用例。此外,本问题中给出的三个数的数据类型是int型数据,如果输入改成实数,会出现一些无法满足直角条件的三个数也能够得到直角三角形的输出,这是数据类型造成的。
对于数据而言,数据的类型、结构怕是最重要的性质了吧。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容