如何反转数组的元素?

时间:2017-03-04 06:41:36

标签: c arrays loops for-loop

我是c编程的初学者。我试着写一个代码来反转数组的元素。这是我写的

#include <stdio.h>
int main(void)
{
    int a[5], i, j, b[5], k=5;
    printf("enter 5 numbers");
    for (i=0;i<5;i++)
    {
        scanf("%d",&a[i]);
    }

    for(i=1;i<5;i++)
    {
        for(j=k; j>=1; j--)
        {
            b[j] = a[i];
            k--;
            break;
        }
    }

    for(j=1; j<5; j++)
    {
        printf("%d\n",b[j]);
    }
    return 0;
}

在输出中,我只得到3个倒数而不是全部5个。 有人可以帮帮我吗?

4 个答案:

答案 0 :(得分:2)

你真的不需要循环内的循环。它可以通过一个轻松完成:

for(i=0; i<5; i++)
{
    b[i] = a[4-i];
}

答案 1 :(得分:1)

首先,数组索引从0开始,而不是从1开始。因此,如果您声明大小为4的数组,则有效索引为0 - 3.为了更清楚地理解这一点,请参阅https://www.tutorialspoint.com/cprogramming/c_arrays.htm

现在你要做的只能用单循环完成!像这样:

#include <stdio.h>
int main(void) {
    int a[5],i,j,b[5],k=5;
    printf("enter 5 numbers");
    for(i=0;i<5;i++)
    {
        scanf("%d",&a[i]);
    }

    //see this :
    for(i=0;i<5;i++)// runs from 0 to 4
    {
        int bIndex = 4 - i;//get index of array b to store element of array a
        b[bIndex] = a[i];
    }

    for(j=0;j<5;j++)
    {
        printf("%d\n",b[j]);
    }
    return 0;
}

答案 2 :(得分:1)

#include <stdio.h>
int main(void)
{
    int a[5], i, j, b[5], k=5;
    printf("enter 5 numbers");
    for (i=0;i<5;i++)
    {
        scanf("%d",&a[i]);
    }
    `for(i=0;i<5;i++)`//see here begin
    {
       `for(j=5-k; j>=0; j++)` 
        {
            b[j] = a[i];
            k--;
            break;
        }
    }
    `for(j=0; j<5; j++)`
    {
        printf("%d\n",b[j]);
    }
    return 0;
}

答案 3 :(得分:0)

我相信,你的第一个问题是在循环条件中写为

  for(j=k; j>=1; j--)

您使用j进行索引编制。这使得b[j]一个接一个。你应该把它改成

  for(j=k-1; j >= 0; j--)

那就是说,

        k--;
        break;
循环内部的错误也是错误的。实际上你不需要两个循环。简化如下。

 for(i=k-1, j =0; j < k; j++, i--)  //j goes up, i goes down.
 {
     b[j] = a[i];
 }

 for(j=0; j<5; j++)               //j starts from 0.....
 {
    printf("%d\n",b[j]);
 }