计算线段长度:
已知线段的两个端点的坐标A(Xa,Ya),B(Xb,Yb),求线段AB的长度。
输入
共两行。
第一行是两个实数Xa,Ya,即A的坐标。
第二行是两个实数Xb,Yb,即B的坐标。
输入中所有实数的绝对值均不超过10000。
输出
一个实数,即线段AB的长度,保留到小数点后3位。
#include
#include
int main ()
{
double l,l1,w,w1,x,x1,y,y1;
scanf("%lf%lf%lf%lf",&x,&x1,&y,&y1);
l=fabs(x-y);
l1=fabs(x1-y1);
w1=l * l+l1 * l1;
w=sqrt(w1);
printf("%.3lf",w);
return 0;
}
注:
绝对值函数:
不同类型的数据使用不同类型的绝对值函数:
整型:
int abs(int i)
//返回整型参数i的绝对值
复数:
double cabs(struct complex znum)
//返回复数znum的绝对值
双精度浮点型:
double fabs(double x)
//返回双精度参数x的绝对值
长整型:
long labs(long n)
//返回长整型参数n的绝对值
开平方函数:
起始文件:math.h
, 声明:double sqrt(double n)
,完了是功能:n开平方后,得到算数平方根返回。
计算三角形面积:
平面上有一个三角形,它的三个顶点坐标分别为(x1, y1), (x2, y2), (x3, y3),那么请问这个三角形的面积是多少。
输入
输入仅一行,包括6个单精度浮点数,分别对应x1, y1, x2, y2, x3, y3。
输出
输出也是一行,输出三角形的面积,精确到小数点后两位。
#include
#include
int main()
{ float x3,y3,x1,y1,x2,y2;
float p,s,a,b,c;
scanf("%f%f%f%f%f%f",&x3,&y3,&x1,&y1,&x2,&y2);
a=sqrt((x1-x2)(x1-x2)+(y1-y2)(y1-y2));
b=sqrt((x1-x3)(x1-x3)+(y1-y3)(y1-y3));
c=sqrt((x2-x3)(x2-x3)+(y2-y3)(y2-y3));
p=(a+b+c)/2;
s=sqrt(p*(p-a)(p-b)(p-c));
printf("%.2f",s);
return 0;
}
海伦公式:
海伦公式:
假设在平面内,有一个三角形,边长分别为a、b、c,三角形的面积S可由以下公式求得:
而公式里的p为半周长(周长的一半):
注1:“Metrica”《度量论》手抄本中用s作为半周长,所以
和 两种写法都是可以的,但多用p作为半周长。
验证推导:
勾股定理
证明:如右图,
,根据勾股定理,得:
此时化简得出海伦公式,证毕。 [2]
恒等式
证明:若
,则
证明,如图:
根据恒等式,得:
将上面代入,得:④
如图可知:
代入④,得:
两边同乘以 ,得:
两边开方得出海伦公式,证毕。