当我运行此代码时,我得到一个输出: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;
}
答案 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]);