-1

area 関数に引数を任意に渡すと、コードは完全に実行されます。しかし、ループを実行しようとすると、セグメンテーション違反が発生します。n<100 の場合

これが私のコードです。

#include<stdio.h>
#include<math.h>
double area(int x,int y,int x1,int y1,int x2,int y2)
{       //Heron's formula
    double a,b,c,s;
    double abc;
    a=sqrt(((x-x1)*(x-x1))+((y-y1)*(y-y1)));
    b=sqrt(((x-x2)*(x-x2))+((y-y2)*(y-y2)));
    c=sqrt(((x2-x1)*(x2-x1))+((y2-y1)*(y2-y1)));
    s=(a+b+c)/2;
    abc=sqrt(s*(s-a)*(s-b)*(s-c));
    return(abc);
}
int main(void)
{   

    int n,i,j,k;
    double max=0,z=0;
    scanf("%d",&n);
    int x[100]={},y[100]={};
    for(i=0;i<n;i++)
    {
        scanf("%d %d",&x[i],&y[i]);
    }
    for(i=0;i<n;i++)
    {
        for(j=i+1;j<n;j++)
        {
            for(k=j+1;k<n;j++)
            {
                z=area(x[i],y[i],x[j],y[j],x[k],y[k]);
                printf("%lf\n",z);
                if(z>max)
                {
                    max=z;
                }
            }
        }
    }
    //printf("\n%lfoi\n",area(0,0,1,0,1,2));
    printf("%lf",max*2);

}
4

4 に答える 4

8

内側のループはインクリメントjしています。おそらくインクリメントする必要がありますk:

for(k=j+1;k<n;j++)
              ^
             oops!
于 2012-01-16T20:26:35.750 に答える
3

内側のループにエラー インデックスがあります: あるべきです

for(k=j+1;k<n;k++)

それ以外の

for(k=j+1;k<n;j++)
于 2012-01-16T20:26:46.073 に答える
0

「j」ではなく「k」を増やす必要があります

 for(k=j+1;k<n;k++)
        { }
于 2015-03-02T05:44:11.207 に答える
0
for(k=j+1;k<n;j++)

jではなく、このループでkをインクリメントするつもりだったと思います。

于 2012-01-16T20:28:16.980 に答える