メインコンテンツまでスキップ

3本の線分の長さから、成立する三角形の面積と内接円/外接円の半径を求める

3本の線分の長さを入力させ、その3本の線分から三角形を作れる場合に、その三角形の面積、内接円の半径、外接円の半径を求める。三角形が成立しない場合には、エラーを表示する。

#include <stdio.h>
#include <math.h>
#include <stdbool.h>

bool isValidTriangle(float a, float b, float c);
float getHalfCircumference(float a, float b, float c);
float getTriangleArea(float a, float b, float c);
float getIncircleRadius(float a, float b, float c);
float getCircumcircleRadius(float a, float b, float c);

int main(void) {
float a, b, c;
printf("線分の長さを入力(入力例:3 4 5):");
scanf("%f %f %f", &a, &b, &c);
printf("%f %f %f\n", a, b, c);

if(!isValidTriangle(a, b, c)) {
return 0;
}

printf("面積: %f\n内接円の半径: %f\n外接円の半径: %f\n",
getTriangleArea(a, b, c),
getCircumcircleRadius(a, b, c),
getCircumcircleRadius(a, b, c));
return 0;
}

bool isValidTriangle(float a, float b, float c) {
if(a <= 0 || b <= 0 || c <= 0) {
printf("ERROR: 値が不正です。\n");
return false;
} else if(fabsf(a-b) >= c || c >= a+b) {
printf("ERROR: 三角形が成立しません。\n");
return false;
} else {
return true;
}
}

float getHalfCircumference(float a, float b, float c) {
return (a+b+c) / (float)2;
}

float getTriangleArea(float a, float b, float c) {
float s = getHalfCircumference(a, b, c);
return sqrt(s * (s-a) * (s-b) * (s-c));
}

float getIncircleRadius(float a, float b, float c) {
return (float)2 * getTriangleArea(a, b, c) / (a+b+c);
}

float getCircumcircleRadius(float a, float b, float c) {
return (a*b*c) / ((float)4 * getIncircleRadius(a, b, c) * getHalfCircumference(a, b, c));
}

isValidTriangle は、三辺の長さa, b, cの三角形が成立するかを返す関数です。

getHalfCircumference は、三辺の長さa, b, cから半周長を求める関数です。

getTriangleArea は、三辺の長さa, b, cから三角形の面積を求める関数です。

getIncircleRadius は、三辺の長さa, b, cから内接円の半径を求める関数です。

getCircumcircleRadius は、三辺の長さa, b, cから外接円の半径を求める関数です。