當前位置:編程學習大全網 - 源碼下載 - c語言程序,輸入三角形三邊的長度,判斷是不是三角形,若是,在判斷為何種三角形,並求其面積

c語言程序,輸入三角形三邊的長度,判斷是不是三角形,若是,在判斷為何種三角形,並求其面積

#include <stdio.h>

#include <math.h>

// 最小精度

double eps = 1e-5;

// 圓周率常量

double PI = acos(-1);

// 枚舉三角形類型,分別為:

// 非法三角形,銳角三角形,等邊三角形,等腰三角形,直角三角形,等腰直角三角形,鈍角三角形

enum TriangleType{NOT_ANGLE, ACUTE_TRIANGLE, REGULAR_TRIANGLE, ISOCELES_TRIANGLE,

RIGHT_TRIANGLE, ISOCELES_RIGHT_TRIANGLE, OBTUSE_TRIANGLE};

/*

功能:根據變長,判斷三角形的類型

參數:

a,b,c 三角形的三條邊長

返回:

三角形的類型。見: TriangleType。

說明:

應用了余弦定理:

cosA = (b^2 + c^2 - a^2)/2bc

*/

TriangleType getTypeOFTriangle(double a, double b, double c)

{

// 邊 a, b, c 對應的角的度數(弧度制)

double angle_A, angle_B, angle_C;

// 三邊長度必須必須是正數

if(a<= eps || b<= eps || c <= eps)

return NOT_ANGLE;

// 兩邊之和必須大於第三邊

if((a+b) -c <= eps || (a+c) - b <= eps || (b+c) - a <= eps )

return NOT_ANGLE;

// 兩邊之差必須小於第三邊

if(fabs(a-b) - c>= eps || fabs(a-c) - b >= eps || fabs(b-c) - a >= eps)

return NOT_ANGLE;

angle_A = acos((b*b + c*c - a*a) / (2.0 * b * c));

angle_B = acos((a*a + c*c - b*b) / (2.0 * a * c));

angle_C = acos((a*a + b*b - c*c) / (2.0 * a * b));

if(fabs(angle_A - angle_B) <= eps && fabs(angle_B - angle_C) <= eps)

return REGULAR_TRIANGLE;

else if(fabs(angle_A - angle_B) <= eps)

return angle_C - PI/2.0 <= eps ? ISOCELES_RIGHT_TRIANGLE : ISOCELES_TRIANGLE ;

else if(fabs(angle_A - angle_C) <= eps)

return angle_B - PI/2.0 <= eps ? ISOCELES_RIGHT_TRIANGLE : ISOCELES_TRIANGLE ;

else if(fabs(angle_B - angle_C) <= eps)

return angle_A - PI/2.0 <= eps ? ISOCELES_RIGHT_TRIANGLE : ISOCELES_TRIANGLE ;

else if(fabs(angle_A - PI/2.0) <= eps && fabs(angle_B - PI/2.0) <= eps && fabs(angle_C - PI/2.0) <= eps)

return ACUTE_TRIANGLE;

else if(fabs(angle_A - PI/2.0 ) <= eps || fabs(angle_B - PI/2.0) <= eps || (angle_C - PI/2.0) <= eps)

return RIGHT_TRIANGLE;

else

return OBTUSE_TRIANGLE;

}

/*

功能:根據變長,計算三角形面積

參數:

a,b,c 三角形的三條邊長

返回:

三角形的面積。如果 a,b,c 無法組成三角形,返回 -1。

說明:

函數運用了海倫公式:

S = √(p*(p-a)*(p-b)*(p-a))

其中 p = (a+b+c)/2。

*/

double getAreaOfTriangle(double a, double b, double c)

{

double p = (a + b + c) / 2.0;

if(NOT_ANGLE == getTypeOFTriangle(a, b, c))

return -1;

else

return sqrt(p* (p-a) * (p-b) * (p-c));

}

int main(int argc, char *argv[])

{

// 三角形的三邊長

double a,b,c;

while(scanf("%lf%lf%lf", &a, &b, &c) != EOF)

{

switch(getTypeOFTriangle(a, b, c))

{

case NOT_ANGLE:

printf("%lf %lf %lf 不能組成三角形!\n", a, b, c);

break;

case REGULAR_TRIANGLE:

printf("%lf %lf %lf 能組成等邊三角形,面積為:%lf!\n", a, b, c, getAreaOfTriangle(a, b, c));

break;

case ISOCELES_TRIANGLE:

printf("%lf %lf %lf 能組成等腰三角形,面積為:%lf!\n", a, b, c, getAreaOfTriangle(a, b, c));

break;

case ACUTE_TRIANGLE:

printf("%lf %lf %lf 能組成銳角三角形,面積為:%lf!\n", a, b, c, getAreaOfTriangle(a, b, c));

break;

case RIGHT_TRIANGLE:

printf("%lf %lf %lf 能組成直角三角形,面積為:%lf!\n", a, b, c, getAreaOfTriangle(a, b, c));

break;

case ISOCELES_RIGHT_TRIANGLE:

printf("%lf %lf %lf 能組成等腰直角三角形,面積為:%lf!\n", a, b, c, getAreaOfTriangle(a, b, c));

break;

case OBTUSE_TRIANGLE:

printf("%lf %lf %lf 能組成鈍角三角形,面積為:%lf!\n", a, b, c, getAreaOfTriangle(a, b, c));

break;

default:

;

}

}

return 0;

}

/*

測試數據:

1.0 2 3

3 3 3

4 4 7

4 4.5 5

3 4 5

1.4142135 1.4142135 2

5.5 5 10

*/

  • 上一篇:騰訊雲直播和網易雲直播哪個好?
  • 下一篇:雲q源代碼
  • copyright 2024編程學習大全網