double area(double a,double b,double c,double d,double e,double f)
void main()
{
int n
double x[100],y[100]
while(scanf("%d",&n)==1 && n>=3 && n<=100)
{
int i
double sum=0
for(i=0i<ni++)
{ scanf("%lf%lf",x+i,y+i)
if(i>=2)
sum+=area(x[0],y[0],x[i-1],y[i-1],x[i],y[i])
}
printf("%.1lf\n",sum/2)
}
}
double area(double a,double b,double c,double d,double e,double f)
{
return a*d+b*e+c*f-d*e-b*c-a*f
}
输入边数 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(i=0i<ni++)
for(j=0j<2j++)
scanf("%lf",&a[i][j])
for(i=0i<ni++)
for(j=0j<2j++)
a[i][j]=a[i][j]-a[0][0]
for(i=1i<n-1i++)
{
s = s + 0.5*(a[i][0]*a[i+1][1]-a[i+1][0]*a[i][1])
}
printf("%.2lf",s)
return 0
}
追问
错误输出:
1.00
期望输出:
5.00
测试数据2输出错误
错误输出:
-10000.00
期望输出:
15000.00
测试数据3输出错误
错误输出:
-1067.50
期望输出:
984.50
测试数据4输出错误
测试数据5输出错误
错误输出:
-1000.00
期望输出:
1100.00
都错了啊
追答
// 改正:a[i][j]=a[i][j]-a[0][j]
// 不是 -a[0][0], 是 a[0][j]
#include <stdio.h>
#include <stdlib.h>
main( ){int i,j,n
double s=0double a[15][2]
scanf("%d",&n)
for(i=0i<ni++)
for(j=0j<2j++)
scanf("%lf",&a[i][j])
for(i=1i<ni++)
for(j=0j<2j++)
a[i][j]=a[i][j]-a[0][j]
for(i=1i<n-1i++){
s = s + 0.5* ( a[i][0] *a[i+1][1] - a[i+1] [0] * a[i][1] )
}
printf("%.2lf",s)
return 0
}