注册 登录
编程论坛 C语言论坛

知道三角形三个顶点坐标,求面积,我觉得我的没错,但未通过,麻烦大佬帮忙看下

ws19103330 发布于 2019-10-28 14:57, 3736 次点击
#include<stdio.h>
#include<math.h>
double dist(double x1,double y1,double x2,double y2);//求边长
int main()
{
    int x1,y1,x2,y2,x3,y3;
    scanf("%d %d %d %d %d %d",&x1,&y1,&x2,&y2,&x3,&y3);
   
    double a=dist(x1,y1,x2,y2);
    double b=dist(x2,y2,x3,y3);
    double c=dist(x1,y1,x3,y3);
    double s=(a+b+c)/2;
   
    double S=sqrt(s*(s-a)*(s-b)*(s-c));
    printf("%.2lf",S);
    return 0;
}
double dist(double x1,double y1,double x2,double y2)
{
    double dist = sqrt(pow(x1-x2,2)+pow(y1-y2,2));
    return dist;
}

6 回复
#2
rjsp2019-10-28 16:44
“但未通过” --- 过不过,要看题目要求,没有题目那都是瞎鸡巴乱猜。

说两个题外话
a. 已知三个顶点坐标求面积有公式, x1*y2 + x2*y3 + x3*y1 - x1*y3 - x2*y1 - x3*y2 绝对值的一半。
b. 已知两个端点坐标求度,有标准函数 hypot,而 sqrt(pow(x1-x2,2)+pow(y1-y2,2)) 即不能保证精度,也不能保证不溢出。

#3
ws191033302019-10-28 16:53
回复 2楼 rjsp
我重改了下,问题少了,但还有问题 ,麻烦看看?
#include<stdio.h>
#include<math.h>

float dist(float x1,float y1,float x2,float y2);
int main()
{
    float x1,y1,x2,y2,x3,y3;
    scanf("%f %f %f %f %f %f",&x1,&y1,&x2,&y2,&x3,&y3);
   
    float a=dist(x1,y1,x2,y2);
    float b=dist(x2,y2,x3,y3);
    float c=dist(x1,y1,x3,y3);
    float s=(a+b+c)/2;
   
    float S=sqrt(s*(s-a)*(s-b)*(s-c));
    printf("%.2f",S);
    return 0;
}
float dist(float x1,float y1,float x2,float y2)
{
    float dist = sqrt(pow(x1-x2,2)+pow(y1-y2,2));
    return dist;
}

测试点1    答案正确    312KB    1MS
测试点2    答案错误    308KB    3MS??
测试点3    答案错误    312KB    3MS??
测试点4    答案正确    316KB    3MS
测试点5    答案正确    304KB    3MS
测试点6    答案正确    308KB    3MS
测试点7    答案正确    308KB    3MS
测试点8    答案正确    312KB    4MS
测试点9    答案正确    316KB    3MS
测试点10    答案正确    320KB    3MS
#4
rjsp2019-10-28 17:15
回复 3楼 ws19103330
我在2楼说的三点,你一条都没改。
还是没给出题目要求,还是用pow,还是用海伦公式。

这也就算了,却还把好好的double改为了float
#5
ws191033302019-10-28 17:33
回复 4楼 rjsp
【题目描述】
平面上有一个三角形,它的三个顶点坐标分别为(x1,y1),(x2,y2),(x3,y3),那么请问这个三角形的面积是多少,精确到小数点后两位。

【输入】
输入仅一行,包括6个单精度浮点数,分别对应x1,y1,x2,y2,x3,y3。

【输出】
输出也是一行,输出三角形的面积,精确到小数点后两位。

【输入样例】
0 0 4 0 0 3
【输出样例】
6.00

#include <stdio.h>
#include <math.h>
int main()
{
    float x1,y1,x2,y2,x3,y3;
    scanf("%f %f %f %f %f %f",&x1,&y1,&x2,&y2,&x3,&y3);
    float s=fabs(x1*y2+x2*y3+x3*y1-x1*y3-x2*y1-x3*y2);
    printf("%.2f",s);
    return 0;
}
现在好像还是错的
#6
阿杰su2019-10-28 21:04
#7
温柔2019-10-28 21:07
回复 5楼 ws19103330
忘除2了
1