已知线段的两个端点的坐标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] 恒等式 证明:若 ,则 证明,如图:
根据恒等式,得: 将上面代入,得:④ 如图可知: 代入④,得: 两边同乘以 ,得: 两边开方得出海伦公式,证毕。