解释该程序的输出

时间:2013-09-14 10:47:54

标签: c

当我运行此代码时,我得到一个输出:21 20 18 15 11 6,请告诉我如何获得此输出。

#define N 6
int main(void)
{
  int i,j,a[N]={1,2,3,4,5,6};

  for(i=0;i<N;i++)
    for(j=i+1;j<N;j++)
      a[i]+=a[j];

  for(i=0;i<N;i++)
    printf("%d",a[i]);

return 0;
}

4 个答案:

答案 0 :(得分:2)

当你看到第二个for循环中的每个结果时,也许更容易理解:

[1,2,3,4,5,6]

[3,2,3,4,5,6]

[6,2,3,4,5,6]

[10,2,3,4,5,6]

[15,2,3,4,5,6]

[21,2,3,4,5,6]现在我增加了

[21,5,3,4,5,6]

[21,9,3,4,5,6]

[21,14,3,4,5,6]

[21,20,3,4,5,6]现在我增加了

[21,20,7,4,5,6]

[21,20,12,4,5,6]

[21,20,18,4,5,6]现在我增加了

[21,20,18,9,5,6]

[21,20,18,15,5,6]现在我增加了

[21,20,18,15,11,6]

答案 1 :(得分:1)

你的程序对数组'a'的元素求和。第一个循环确定起始索引,内循环总结数组的元素(考虑起始索引i)。最后,[0]包含所有数组元素的总和,[1]包含从索引1开始的所有数组元素的总和等。

答案 2 :(得分:1)

for(i=0;i<N;i++)
    for(j=i+1;j<N;j++)
        a[i]+=a[j];
    for(i=0;i<N;i++)
        printf("%d",a[i]);

一个[N] = {1,2,3,4,5,6};

做跟踪是最简单的方法。来自#DEFINE的N = 6 所以第一个for循环将完成6次

第一次通过

当i = 0 j = 1

a [0] + = a [1]

所以现在[0]等于3

j ++所以j现在等于2

i = 0 j = 2

a [0] + = a [2]

等于a [0](即3)加上a [2],即3等于6。

j ++所以j现在等于2

如果继续跟踪,您将看到它正在累加数组的剩余部分,即1 + 2 + 3 + 4 + 5 + 6 = 21

然后下一次迭代是2 + 3 + 4 + 5 + 6

答案 3 :(得分:0)

之后

for(i=0;i<N;i++)
for(j=i+1;j<N;j++)
  a[i]+=a[j];

的价值
a[0] = 1+2+3+4+5+6 = 21
a[1] = 2+3+4+5+6 = 20
a[2] = 3+4+5+6 = 18
a[3] = 4+5+6 = 15
a[4] = 5+6 = 11
a[5] = 6 = 6

并且

 printf("%d",a[i]);

应该是

 printf("%d\n",a[i]);