h一直等于零,s也得与零
我感觉这条代码计算不会执行 n == sqrt(pow(z,2)-pow(h,2))+sqrt(pow(c,2)-pow(h,2));
int main() //三角形面积 || 求高法
{
float z,c,n,h,s;
float x1,y1; //坐标1
float x2,y2; //坐标2
float x3,y3; //坐标3
scanf("%f %f %f %f %f %f",&x2,&y2,&x1,&y1,&x3,&y3);
z = sqrt(pow((x2-x1),2)+pow((y2-y1),2)); //第一边
c = sqrt(pow((x3-x2),2)+pow((y3-y2),2)); //第二边
n = sqrt(pow((x1-x3),2)+pow((y1-y3),2)); //第三边
if(z+c>n) //判断条件为两边之和大于第三边
{
n == sqrt(pow(z,2)-pow(h,2))+sqrt(pow(c,2)-pow(h,2)); /*勾股定理:最短两条边减去高相加的和,
等于第三边 h:高*/
printf("高为:%g",h); // 求高
printf("面积为:%.2f",h*n/2); //底为最长边
}
else if(z+n>c)
{
c == sqrt(pow(z,2)-pow(h,2))+sqrt(pow(n,2)-pow(h,2));
printf("%g",h);
printf("面积为:%.2f",h*c/2);
}
else if(c+n>z)
{
z == sqrt(pow(c,2)-pow(h,2))+sqrt(pow(n,2)-pow(h,2));
printf("%g",h);
printf("面积为:%.2f",h*z/2);
}
return 0;
}
h没有赋值;
然后,n == sqrt(pow(z,2)-pow(h,2))+sqrt(pow(c,2)-pow(h,2)); 这个是判断是否相等,赋值要改为=;
如果已知三角形三个顶点的坐标,要求三角形的面积,及某条边上的高,通过搜索的链接,可以先使用海伦公式求出三角形的面积,然后可以再利用面积和某条边长, 来计算这条边上的高。
测试代码如下:
参考链接:
#include <stdio.h>
#include <math.h>
int main() //三角形面积 || 求高法
{
double z,c,n,h,s;
double x1,y1; //坐标1
double x2,y2; //坐标2
double x3,y3; //坐标3
scanf("%lf %lf %lf %lf %lf %lf",&x2,&y2,&x1,&y1,&x3,&y3);
z = sqrt(pow((x2-x1),2)+pow((y2-y1),2)); //第一边
c = sqrt(pow((x3-x2),2)+pow((y3-y2),2)); //第二边
n = sqrt(pow((x1-x3),2)+pow((y1-y3),2)); //第三边
// printf("z=%f, c=%f,n=%f\n",z,c,n);
// https://zhidao.baidu.com/question/156107874.html
if(((z+c)>n)&&((z+n)>c)&&((c+n)>z)) //判断条件为两边之和大于第三边
{
// https://baike.baidu.com/item/%E6%B5%B7%E4%BC%A6%E5%85%AC%E5%BC%8F/106956
// 利用海伦公式求三角形的面积
double p = (z+n+c)/2;
s=sqrt(p*(p-z)*(p-c)*(p-n));
// https://zhidao.baidu.com/question/1510295666080942460.html
// 计算边n上的高
h = 2*s/n;
// n = sqrt(pow(z,2)-pow(h,2))+sqrt(pow(c,2)-pow(h,2)); /*勾股定理:最短两条边减去高相加的和,
// 等于第三边 h:高*/
// https://www.osgeo.cn/app/sca44
printf("高为:%g,",h); // 求高
printf("面积为:%.2lf",s); //底为最长边
}
// else if((z+n)>c)
// {
// //n == sqrt(pow(z,2)-pow(h,2))+sqrt(pow(n,2)-pow(h,2));
// double p = (z+n+c)/2;
// s=sqrt(p*(p-z)*(p-c)*(p-n));
// h = 2*s/c; // 计算边c上的高
//
// printf("高为:%g,",h);
// printf("面积为:%.2lf",h*c/2);
// }
// else if((c+n)>z)
// {
//// n == sqrt(pow(c,2)-pow(h,2))+sqrt(pow(n,2)-pow(h,2));
// double p = (z+n+c)/2;
// s=sqrt(p*(p-z)*(p-c)*(p-n));
// h = 2*s/z; // 计算边z上的高
//
// printf("高为:%g,",h);
// printf("面积为:%.2lf",h*z/2);
// }
return 0;
}