问题描述:输入三个正整数,判断是否构成三角形,若构成,会是怎样的三角形?
输入:三个正整数
输出:是否构成三角形的判定结果
举例:输入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型数据,如果输入改成实数,会出现一些无法满足直角条件的三个数也能够得到直角三角形的输出,这是数据类型造成的。
对于数据而言,数据的类型、结构怕是最重要的性质了吧。