我无法在此c程序中找到错误

时间:2016-08-25 09:12:17

标签: c arrays

我在教程中找到了这个。它是一个向后打印给定数组的程序。但它没有向后打印数组,因为它有一个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;
}

3 个答案:

答案 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;
}