求凸多边形面积的C语言程序改错

原题如此
【输入形式】从标准输入读取顶点坐标。格式为:第一行是点的个数N(3≤N≤15),后面紧接着N行,每行两个数字 (由空格隔开),分别表示该点的X、Y坐标(0≤X,Y≤32767)。所有点的坐标互不相同,且按顺时针次序给出。
输入数据确保该多边形是一个凸多边形。
【输出形式】向标准输出打印一个浮点数,是该多边形的面积。该浮点数保留两位小数。
这是我写的代码,C语言的
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
double len(double x1,double y1,double x2,double y2)
{
double dx,dy,l;
if(x1>x2)
dx=x1-x2;
else
dx=x2-x1;
if(y1>y2)
dy=y1-y2;
else
dy=y2-y1;
l=sqrt(dx*dx+dy*dy);
return l;
}
double s(double x1,double y1,double x2,double y2,double x3,double y3)
{
double len1,len2,len3,p,s;
len1=len(x1,y1,x2,y2);
len2=len(x1,y1,x3,y3);
len3=len(x2,y2,x3,y3);
p=0.5*(len1+len2+len3);
s=sqrt(p*(p-len1)*(p-len2)*(p-len3));
return(s);
}
int main()
{
double *x,*y,square=0;
int n,i;
scanf("%d",&n);
x=(double *)malloc(n);
y=(double *)malloc(n);
for(i=0;i<n;i++)
scanf("%lf %lf",x+i,y+i);
for(i=2;i<n;i++)
square+=s(*(x),*(y),*(x-1+i),*(y-1+i),*(x+i),*(y+i));
printf("%.2f",square);
}
五个测试点就过了2个
如下是一个没过的
2.000000 70.000000
60.000000 20.000000
99.000000 15.000000
99.000000 8.000000
70.000000 2.000000谁帮我看看错在哪里了,感觉算法应该没问题啊,在线等

没错啊。我运行正常,是不是你一开始没输入几个点?只输了第一个点的x坐标2,就只能输入2个点
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-12-19
有可能是输出的问题,double 应该用 lf 你试试
printf("%.2lf",square);

c语言求凸多边形面积
输入边数 n, 输入 多边形各顶点 x,y 坐标,逆时针顺序 (保证 叉乘积 为 正)。各顶点 x,y 坐标 减去 a[0][0]。以 a[0][0] 为主 计算各三角形面积并累加。include <stdio.h> include <stdlib.h> main( ){ int i,j,n;double s=0;double a[15][2];scanf("%d",&n);for(...

用c语言写计算多边形面积怎麽写啊,在线等待
对于凸多边形,可以通过将其分割成n-2个三角形来计算其面积,每个三角形的面积可以使用以下公式求得:求三角形面积:给定三角形的三边长a、b、c,求其面积。根据海伦公式计算三角形的面积:S = (a + b + c) \/ 2 Area = √(s * (s - a) * (s - b) * (s - c))注意:1. 输入的...

c语言编写一个函数,函数计算三角形面积,并用这个函数计算出凸多边
{return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));} float area(float x1,float y1,float x2,float y2,float x3,float y3){float a,b,c,p;a=dis(x1,y1,x2,y2);b=dis(x1,y1,x3,y3);c=dis(x2,y2,x3,y3);p=(a+b+c)\/2.0;return sqrt(p*(p-a)*(p-b)*(p...

用c语言写计算多边形面积怎麽写啊,在线等待
1.输入的三角形三边长a,b,c要满足“任意两边长的和大于第三边长”。2.按海伦公式计算:s=(a+b+c)\/2;x=s*(s-a)*(s-b)*(s-c) 这时若x>=0,则求面积:area= ,并输出area的值。C++代码如下:include <cmath> include <iostream> using namespace std;double point[1000000...

C语言程序,输入N个点的坐标,判断能否构成凸多边形
最后,X和Y的最长公共子序列的长度记录于c[m,n]中。 程序如下: #include<stdio.h> #include<string.h> int lcs_length(char x[], char y[]); int main() { char x[100],y[100]; int len; while(1) { scanf("%s%s",x,y); if(x[0]=='0') \/\/约定第一个字符串以‘0’开始表示结束 ...

在线等,急求一道C语言的编程题!!!正确答案直接发20元微信红包
include<stdio.h>#include<string.h>struct node{ long long x,y;}a[100005],b[100005];long long mul(node p1,node p2,node p3){ return (p2.x-p1.x)*(p3.y-p1.y)-(p3.x-p1.x)*(p2.y-p1.y);}int main(){ int n,m,i,low,high,mid,flag; while(scanf...

C语言编程题,新手求指教这题代码该怎么写啊 老师没讲过晕
1)先找出X坐标最小的点为起始点 2)从起始点开始构造最小的外包凸多边形(顺时针构造则选择最左方的边,逆时针构造则选最右方的边)3)在凸多边形中每个点和其不相邻的边构造的三角形中,找出周长最大的那一个 4)求出最大周长三角形的几何中心 5)该中心到最大三角的任意一顶点的长度就是所求...

C语言 输入N个点坐标判断这N个点是否可以构成凸多边形的源程序
N个点是排序的吗?用转角法,记录转角是否等于2pi

C语言 求解
详情请查看视频回答

帮我编一个判断点在三角形内的C语言程序
如果不用向量的方法,可以用凸多边形理论求解。设三角形的三顶点为A、B、C,现有点P(点P不是点A、B、C),过A、P两点作直线交BC所在直线于点D,若点D位于线段BC上,则点P一定位于该三角形内。代码如下:include<stdio.h> include "math.h"define DBL_MIN 2.2250738585072014e-308 struct Point...

相似回答