/*实验名称:判断三个数能否构成三角形
项目拓展:如果三边能构成三角形,求其面积
并判断其是否为直角三角形、等腰三角形或等边三角形
完成时间:2021年3月11日
*/
#include <stdio.h> //printf函数和scanf函数等函数所在头文件
#include <math.h> //常用于数学计算,sqrt、pow等函数所在头文件
void main()
{
double a, b, c; //声明a,b,c三个变量以作为三角形三边
float p, s; //有些数学运算稍微复杂,声明中间值p以方便计算,s为面积
printf("请输入三角形三边:\n");
scanf_s("%lf%lf%lf", &a, &b, &c); //输入三角形三边
//开始运算
p = (a + b + c) / 2; //防止计算复杂,以免程序崩溃,故取中间值p
s = sqrt(p * (p - a) * (p - b) * (p - c)); //求得面积s,sqrt函数为开平方运算
if ((a + b) > c && (a + c) > b && (b + c) > a) //判断三角形构成条件
//任意两边之和大于第三边 &&:数学定义“且”,C语言称为'逻辑与'
{
printf("能构成三角形。\n"); //打印结果
printf("面积为:%f\n", s); //s为浮点型变量(float),则打印类型为%f
//判定三角形是否为直角三角形,两边的平方之和等于第三边
if (pow(a, 2) + pow(b, 2) == pow(c, 2) //pow函数为幂函数运算,这里使用
|| pow(a, 2) + pow(c, 2) == pow(b, 2) //a*a+b*b=c*c或a^2+b^2=c^2都有可能
|| pow(b, 2) + pow(c, 2) == pow(a, 2)) //让程序无法正常运行
printf("这是一个直角三角形。\n"); // ||:数学定义“或”,C语言中称为'逻辑或'
else printf("这不是直角三角形。\n");
// ==:“等于”的意思,和&&、||一样属于一种运算符,用于如上程序中的关系比较
//而 = 是赋值运算符,用于将一个值或一个变量赋给另一个变量
//判定等腰三角形,只有两边相等
if (a == b && b != c || b == c && c != a || c == a && a != b)
// != :数学定义“不等于”,C语言称为'逻辑非'
printf("这是一个等腰三角形。\n");
else printf("这不是等腰三角形。\n");
//判定等边三角形,三边都相等
if (a == b == c)
printf("这是一个等边三角形。\n");
else printf("这不是等边三角形。\n");
}
//if条件语句,只有在输入的三边能构成三角形的情况下,程序才能进行以上所有判断操作
else printf("不能构成三角形。\n");
}