题目说明:根据输入的三角形的边长判断三角形的类型并输出它的面积和类型。
解题说明:组成三角形的条件是:任意两边之和大于第三边。类型可根据各个三角形特征进行分辨。
面积求解:利用海伦公式 计算
假设在平面内,有一个三角形,边长分别为a、b、c,三角形的面积S可由以下公式求得:
而公式里的p为半周长(周长的一半):
C语言代码实现:
#include<stdio.h>
#include<math.h>
#define TYPE_CASE(x) case(x):return (#x);
void Calculate(int a, int b, int c);
void PutResult(enum TYPE type, double area);
static inline const char *typetostring(enum TYPE type);
enum TYPE
{
普通三角形,
等腰三角形,
等边三角形,
直角三角形,
等腰直角三角形,
不能构成三角形!
};
int main() {
int a, b, c;
printf("输入三角形三边\n");
scanf_s("%d%d%d", &a, &b, &c);
Calculate(a, b, c);
}
//计算过程
void Calculate(int a, int b, int c) {
int p = (a + b + c) / 2;
if (a + b > c && a + c > b&&b + c > a)
{
if (a == b || a == c || b == c)
{
if (a == b && a == b && b == c)
PutResult((TYPE)2, sqrt(p*(p - a)*(p - b)*(p - c)));
else
PutResult((TYPE)1, sqrt(p*(p - a)*(p - b)*(p - c)));
if (a*a + b * b == c * c || a * a + c * c == b * b || b * b + c * c == a * a)
PutResult((TYPE)4, sqrt(p*(p - a)*(p - b)*(p - c)));
}
else if (a*a + b * b == c * c || a * a + c * c == b * b || b * b + c * c == a * a)
PutResult((TYPE)3, sqrt(p*(p - a)*(p - b)*(p - c)));
else
PutResult((TYPE)0, sqrt(p*(p - a)*(p - b)*(p - c)));
}
else
PutResult((TYPE)5, 0);
}
//获取枚举类型名称
static inline const char *typetostring(enum TYPE type) {
switch (type)
{
TYPE_CASE(普通三角形)
TYPE_CASE(等腰三角形)
TYPE_CASE(等边三角形)
TYPE_CASE(直角三角形)
TYPE_CASE(等腰直角三角形)
TYPE_CASE(不能构成三角形!)
}
return NULL;
}
//输出结果
void PutResult(enum TYPE type, double area) {
printf("%s\n面积%f\n", typetostring(type), area);
}
代码解析:
- 函数声明:在C语言中定义函数后,在使用前,需要在main函数前进行声明,否则会报错。或者将需要调用的函数写在Main函数前,但是依旧建议编写C语言代码的时候能够养成书写函数声明的习惯。
void Calculate(int a, int b, int c);
void PutResult(enum TYPE type, double area);
static inline const char *typetostring(enum TYPE type);
- 枚举类型:枚举是C语言中的一种基本数据类型,并不是构造类型,它可以用于声明一组常数。当一个变量有几个固定的可能取值时,可以将这个变量定义为枚举类型。
enum TYPE
{
普通三角形,
等腰三角形,
等边三角形,
直角三角形,
等腰直角三角形,
不能构成三角形!
};
- 宏定义:定义宏函数,获取枚举类型的枚举子(默认情况下无法直接答应枚举子,只能打印枚举子的值[详情可参考枚举类型])。
#define TYPE_CASE(x) case(x):return (#x);
枚举类型:
- 枚举类型的定义:一般形式 enum 枚举名 {枚举元素1,枚举元素2,……};
enum Season {spring, summer, autumn, winter};
- 枚举变量的定义:
- 先定义枚举类型,再定义枚举变量
enum Season {spring, summer, autumn, winter}; enum Season s;
- 定义枚举类型的同时定义枚举变量
enum Season {spring, summer, autumn, winter} s;
- 省略枚举名称,直接定义枚举变量
enum {spring, summer, autumn, winter} s;
- 使用枚举的注意事项:
- C语言编译器会将枚举元素(spring、summer等)作为整型常量处理,称为枚举常量。
- 枚举元素的值取决于定义时各枚举元素排列的先后顺序。默认情况下,第一个枚举元素的值为0,第二个为1,依次顺序加1。
声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。