-2

最初の「for」ループでは、n の値をどれだけ大きくしても、正確に 1 回だけ実行されます。なんで?

#include<stdio.h>

int main()
{
    int n, a[6], i, j, n1, n2;
    float area=0.00, ma=0, mia=0;

    scanf("%d", &n);
    for(i=1; i<=n; i++)
    {
        for(j=1; j<=6; j++)
            scanf("%d", &a[j]);

        area = (a[1]*(a[4]-a[6])+a[3]*(a[6]-a[2])+a[5]*(a[2]-a[4]))/2;

        if(area<0)
            area = -area;

        if(i == 0)
            mia = area;

        if(area >= ma)
        {
            ma = area;
            n1 = i;
        }

        if(area <= mia)
        {
            mia = area;
            n2 = i;
        }

    }
    printf("\n%d %d", n1, n2);
    return 0;
}
4

2 に答える 2

4

あなたはaここでオーバーランしています:

for(j=1;j<=6;j++)
  scanf("%d",&a[j]);

(最後にループを通過したとき、スルーa[6]のみが存在する場合に に書き込みます)a[0]a[5]

C では、配列は0ではなくでインデックス付けされることに注意してください1

i変数がメモリ内のどこにあるかによって、最後の割り当てが上書きされる可能性が高くなります。次回のループでiは、最後に入力した値に を加えた値に等しくなります1

または、n上書きされる可能性があります。ありとあらゆることが起こっているかもしれません。インデックスを調整するか、(簡単なテストとして) 宣言を次のように変更します。

int n,a[7],i,j,n1,n2;

動作が改善するかどうかを確認します。

于 2013-10-08T17:27:29.787 に答える
0

printf最初のループにa を入れると、一度だけではなく、何回もfor実行されることがわかります。n+1を使用してローカル マシンでコードを実行するだけn=3です。

于 2013-10-08T17:24:23.563 に答える