有人可以帮我解释这个C代码吗?

时间:2015-05-05 06:10:31

标签: c arrays for-loop nested

这是我的计算机科学最终学习指南中的另一个问题(我另外发布了一个,去看看!)。我不知道如何在没有计算机的情况下获得x [2]或x [5]的值(考试期间没有使用计算机)。有人可以通过阅读代码解释如何找出这些值吗?谢谢!

 int x[SIZE] = {5, 3, 4, 5, 2, 4, 3, 5, 1, 2};

 int i;
 int j;

 for(i = 0; i < SIZE / 2; i++)
 {
    for(j = x[i]; j < SIZE; j++)
    {
     x[j]++;
    }
 }

 printf("x[2] = %d\n", x[2]);
 printf("x[5] = %d\n", x[5]);

1 个答案:

答案 0 :(得分:3)

首先,数组是

int x[SIZE] = {5, 3, 4, 5, 2, 4, 3, 5, 1, 2};

SIZE是10(或者我假设它是10)。

外部for循环是

for(i = 0; i < SIZE / 2; i++)

所以它从i=0迭代到i=4

现在,让我们看看内部for循环

for(j = x[i]; j < SIZE; j++)
{
  x[j]++;
}

j指定的值为x[i]

首先,在i=0j的值为x[0],即5。因此,内部for循环从j=5执行到j=9。在循环中,它为x[j]++,即x[5]++,即4++,它为5。现在,在内循环的下一次迭代中,j=6x[6]++3++,因此给出4。因此,从x[5]x[9]的数组的所有值都会递增一次。

因此,数组现在变为

5 3 4 5 2 5 4 6 2 3

如果您查看此模式,您会注意到要更改x[2]的值,j必须变为2,而x[i]必须为2 {1}},但查看循环的进展方式,您可以看到x[0]x[1]x[2]的值不会改变。因此,x[2]将保留为4

现在,继续进行外循环的下一次迭代i=1,所以j=x[1],从j=3j=9,增加{{1}的值因此,数组变为

x[j]

对于5 3 4 6 3 6 5 7 3 4 的下一次迭代,内部循环从i=2迭代到j=4,因此数组变为

j=9

对于5 3 4 6 4 7 6 8 4 5 的下一次迭代,内部循环从i=3迭代到j=6,因此数组变为

j=9

现在,对于外部循环的最后一次迭代,在5 3 4 6 4 7 7 9 5 6 ,内部循环从i=4迭代到j=4,数组变为

j=9

因此,程序的输出将是

5 3 4 6 5 8 8 10 6 7

这是如何在没有编译器的情况下解释这些程序。