問題描述:輸入三個(gè)正整數(shù)侯谁,判斷是否構(gòu)成三角形,若構(gòu)成探遵,會(huì)是怎樣的三角形支鸡?
輸入:三個(gè)正整數(shù)
輸出:是否構(gòu)成三角形的判定結(jié)果
舉例:輸入3 4 5雅采,輸出:3,4,5構(gòu)成普通直角三角形
解題思路:
根據(jù)三角形三邊關(guān)系:斜邊小于其余兩邊之和 判定是否構(gòu)成三角形。
在三角形集合中分為三個(gè)小集合分別為鈍角三角形、直角三角形和銳角三角形,判定方法為斜邊平方與非斜邊平方的數(shù)量關(guān)系锄贼。
在銳角三角形中有一個(gè)特殊子集——等腰三角形,等腰三角形又有一個(gè)兒子等邊三角形女阀;直角三角形和鈍角三角形情況類似宅荤,都存在這種層層包含的關(guān)系。
因而浸策,現(xiàn)階段選用 if-else語句描述這種選擇關(guān)系冯键。代碼如下:
/*問題:輸入三個(gè)正整數(shù),判斷是否構(gòu)成三角形庸汗,若構(gòu)成會(huì)是怎樣的三角形
Written by: Jimmy Tung
Date : 2020.02.27
*/
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int a, b, c, temp; //定義三個(gè)int類型的內(nèi)存空間存放輸入的正整數(shù)
printf("請(qǐng)輸入三個(gè)正整數(shù):");
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構(gòu)成等邊三角形\n", a, b, c);
}
else
printf("%d,%d,%d構(gòu)成等腰三角形\n", a, b, c);
}
else
printf("%d,%d,%d構(gòu)成普通銳角三角形\n", a, b, c);
}
else if(a*a + b*b == c*c) //直角三角形
{
if(a == b)
{
printf("%d,%d,%d構(gòu)成等腰直角三角形\n", a, b, c);
}
else
printf("%d,%d,%d構(gòu)成普通三角形\n", a, b, c);
}
else //鈍角三角形
{
if(a == b)
{
printf("%d,%d,%d構(gòu)成等腰鈍角三角形\n", a, b, c);
}
else
printf("%d,%d,%d構(gòu)成普通鈍角三角形\n", a, b, c);
}
}
else
printf("%d,%d,%d無法構(gòu)成三角形\n", a, b, c);
system("PAUSE");
return 0;
}
總結(jié)一下:
值得注意的是惫确,由于兩個(gè)相等整數(shù)的平方和不可能等于另一個(gè)整數(shù)的平方,所以無法找到等腰直角三角形的測(cè)試用例蚯舱。此外改化,本問題中給出的三個(gè)數(shù)的數(shù)據(jù)類型是int型數(shù)據(jù),如果輸入改成實(shí)數(shù)晓淀,會(huì)出現(xiàn)一些無法滿足直角條件的三個(gè)數(shù)也能夠得到直角三角形的輸出所袁,這是數(shù)據(jù)類型造成的盏档。
對(duì)于數(shù)據(jù)而言凶掰,數(shù)據(jù)的類型、結(jié)構(gòu)怕是最重要的性質(zhì)了吧蜈亩。