我在教程中找到了这个。它是一个向后打印给定数组的程序。但它没有向后打印数组,因为它有一个bug。它说我应该找到错误,我不能。
#include <stdio.h>
int main()
{
int ara[] = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
int i, j, temp;
for(i = 0, j = 9; i < 10; i++, j--)
{
temp = ara[j];
ara[j] = ara[i];
ara[i] = temp;
}
for(i = 0; i < 10; i++)
{
printf("%d\n", ara[i]);
}
return 0;
}
答案 0 :(得分:3)
错误是算法通过交换数组中项目的位置来工作,但是迭代过多的元素。当i
迭代了5个第一个元素时,数组是向后的。但迭代在最后5次继续进行,这使得所有元素都回到原始位置。
你可以通过在循环中每圈打印整个阵列轻松找到它......
答案 1 :(得分:1)
当我从0-> 9移动并且j从9-> 0移动时,上面的代码交换ara [i]和ara [j]。 最终结果是所有数字都返回到原始位置。 如果要反转原始数组,请使第一个for循环看起来如下所示。
for(i = 0, j = 9; i < j; i++, j--)
OR
如果您只想向后打印,后者for循环就足够了,只需将其修改为
即可for(i = 9; i >= 0; i--)
答案 2 :(得分:0)
交换两次相同,无所事事。让它只交换一次。
for(i = 0, j = 9; i < 5; i++, j--)
{
temp = ara[j];
ara[j] = ara[i];
ara[i] = temp;
}