要求:键盘输入三条边的长度(包括整数和小数),利用程序判断能否构成三角形,能则计算面积,否则结束。
1.整体思路
分析可知:必须先写一段程序用于接收键盘输入的三边边长,然后判断能否构成三角形,最后计算面积等事宜。
难点在于判断能否构成三角形和三角形面积计算。
都知道构成三角形的条件是:任意两边之和大于第三边,任意两边之差小于第三边。难点又在 “任意” 。直接对三边都进行穷举分析显然是不现实的,我提供的思路是:先对三边长度进行排大小,然后构成三角形的条件就可以改写为:较小两条边之和大于最大边长度,最大边与最小边的差值小于另一边长度。
面积计算则直接用面积的长度计算公式:s = sqrt(p * (p - a) * (p - b) * (p - c)) (其中 p = (a + b + c) / 2)。
2.程序设计
2.1框架及输入
首先是程序框架和接收键盘输入段的程序设计,要求能够接受小数,暂直接使用 scanf() 函数,具体程序设计如下:
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#pragma warning (disable:4996)
int main()
{
float a, b, c, s;
scanf("%f %f %f", &a, &b, &c);
return 0;
}
2.2判断能否构成三角形
首先需要对三边长度进行排序,可以采用冒泡排序(可参考我的另一文章:冒泡排序法),这里直接使用简易的冒泡排序 (如果看不懂请参考:冒泡排序法),这里采用 s 作为临时变量,可以节省一定的空间。具体程序段设计如下:
if (a < b)
s = a, a = b, b = s;
if (a < c)
s = a, a = c, c = s;
if (b < c)
s = b, b = c, c = s;
然后是判断能否构成三角形,具体是判断能否满足:较小两条边之和大于最大边长度,最大边与最小边的差值小于另一边长度。具体程序段设计如下:
if (b + c > a && a - c < b)
{
printf("是三角形\n");
//…………
}
else
printf("不能构成三角形\n");
2.3三角行面积计算
最后一步是三角形面积计算,具体做法是:s = sqrt(p * (p - a) * (p - b) * (p - c)) (其中 p = (a + b + c) / 2)。具体程序段设计如下:
float p = (a + b + c) / 2;
s = sqrt(p * (p - a) * (p - b) * (p - c));
printf("三角形面积s = %f\n", s);
3.最终程序设计
整合第2点中的内容,可得具体程序设计:
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#pragma warning (disable:4996)
int main()
{
float a, b, c, s;
scanf("%f %f %f", &a, &b, &c);
if (a <= 0 || b <= 0 || c <= 0)
{
printf("输入错误\n");
return 0;
}
if (a < b)
s = a, a = b, b = s;
if (a < c)
s = a, a = c, c = s;
if (b < c)
s = b, b = c, c = s;
if (b + c > a && a - c < b)
{
printf("是三角形\n");
float p = (a + b + c) / 2;
s = sqrt(p * (p - a) * (p - b) * (p - c));
printf("三角形面积s = %f\n", s);
}
else
printf("不能构成三角形\n");
return 0;
}
此程序采用的数据类型是 float,可以输入小数计算三角形面积。以下是程序输出示例(输入的三条边长分别是:6.6、6.66、6.666):
程序可能任然有可以改进的地方,欢迎各位读者品鉴!
最后,如果有任何疑问,评论区和私信都欢迎你!