所以我有这个代码,我试图找出如何阅读而不运行它但我似乎无法找到模式和方法这样做。我希望有人能给我解释如何阅读它。
#include <stdio.h>
void mystery(int z[], int size);
void main()
{
int i;
int z[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
for (i = 0; i < 10; i++)
printf("%d", z[i]);
printf("\n\n");
mystery(z, 10);
for (i = 0; i < 10; i++)
printf("%d", z[i]);
printf("\n\n");
mystery(z, 7);
for (i = 10; i < 7; i++)
printf("%d", z[i]);
printf("\n\n");
}
void mystery(int z[], int n)
{
int i, temp;
for (i = 1; i < n / 2; i = i + 2)
{
temp = z[i];
z[i] = z[n - 1 - i];
z[n - 1 - i] = temp;
}
return;
}
运行时,代码为
1 2 3 4 5 6 7 8 9 10
1 9 3 7 5 6 4 8 2 10
答案 0 :(得分:2)
关键是你理解这个循环:
for (i = 1; i < n / 2; i = i + 2)
{
temp = z[i];
z[i] = z[n - 1 - i];
z[n - 1 - i] = temp;
}
i + 2
表示步骤(增量)。在这种情况下,步骤为2而不是1,这意味着i
将增加,如1,3,5,7 ......直到n / 2.循环的内容只是切换边界的外部元素即第一次迭代,元素2和9将切换位置。
因为循环的开始是i=1
(而不是i=0
),所以第一个元素不受循环的影响。记住数组从0开始,所以第二个元素有索引1,这就是循环开始的地方:第二个元素。由于步长为2,因此只有每一个元素都会切换。我希望这回答了你的问题。