-2

在第一个“for”循环中,无论我给出的 n 值有多大,它都会运行一次。为什么?

#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

将 aprintf放在第一个for循环中,您会知道它会运行n+1多次,而不仅仅是一次。我只是在我的本地机器上运行你的代码n=3

于 2013-10-08T17:24:23.563 回答