这是我的计算机科学最终学习指南中的另一个问题(我另外发布了一个,去看看!)。我不知道如何在没有计算机的情况下获得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]);
答案 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=0
,j
的值为x[0]
,即5
。因此,内部for循环从j=5
执行到j=9
。在循环中,它为x[j]++
,即x[5]++
,即4++
,它为5
。现在,在内循环的下一次迭代中,j=6
和x[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=3
到j=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
这是如何在没有编译器的情况下解释这些程序。