在 C 编程中反转数组元素

Reversing array elements in C programming

我是 C 的新手,遇到了问题。我需要在下面的程序中反转数组的元素。我能得到一个非常简单的解释,说明我做错了什么以及我该如何继续修复它吗?

这是我得到的输出:

Enter number 0: 0
Enter number 1: 1
Enter number 2: 2
Enter number 3: 3
Enter number 4: 4
Enter number 5: 5
Enter number 6: 6
Enter number 7: 7
Element 0 is: 7
Element 1 is: 6
Element 2 is: 5
Element 3 is: 4
Element 4 is: 4
Element 5 is: 5
Element 6 is: 6
Element 7 is: 7

我的代码:

#include <stdio.h>

void reverse(int a[], int i)
{
    int j=7,b;
    for (i=0; i<=7; i++)
    {
        b=a[i];
        a[i]=a[j];
        a[j]=b;
        printf("Element %d is: %d\n", i,a[i]);
        j--;
    }
}

int main(void)
{
    int a[8];
    int i;
    for(i=0;i<=7;i++)
    {
        printf("Enter number %d: ",i);
        scanf("%d", &a[i]);
    }
    reverse(a, 8);
    return 0;
}

为避免被误导,在反转之后写输出,而不是在反转期间:

#include <stdio.h>

void reverse(int a[], int i)
{
    int j = 7, b;
    for (i = 0; i <= 7; i++)
    {
        b = a[i];
        a[i] = a[j];
        a[j] = b;
        j--;
    }
}

int main(void)
{
    int a[8];
    int i;

    for (i = 0; i <= 7; i++)
    {
        printf("Enter number %d: ",i);
        scanf("%d", &a[i]);
    }

    reverse(a, 8);

    for (i = 0; i <= 7; i++)
    {
        printf("Element %d is: %d\n", i, a[i]);
    }

    return 0;
}

现在您会注意到数组根本没有变化。那是因为你将数组中的每个元素交换两次:一次到它相反的位置,然后回到它原来的位置。要解决这个问题,只循环遍历数组的前半部分,即 while i < 4.

可能还打算让 reverse 的第二个参数成为长度,因此您应该使用它而不是硬编码 7 或 4:

void reverse(int a[], int length)
{
    int i, j = length - 1, b;

    for (i = 0; i < length / 2; i++)
    {
        b = a[i];
        a[i] = a[j];
        a[j] = b;
        j--;
    }
}

您也可以将数组复制到一个新数组中:

#include <stdio.h>

void reverse(int a[], int i)
{
    int b[i];
    int j;

    for(j=0; j<i; j++){
        b[j] = a[i-1-j];
        printf("Element %d is: %d\n", j, b[j]);
    }
}

int main(void)
{
    int a[8];
    int i;
    for(i=0;i<=7;i++)
    {
        printf("Enter number %d: ",i);
        scanf("%d", &a[i]);
    }
    reverse(a, 8);
    return 0;
}

你想要做什么,它只移动数组长度的一半,否则你要反转数组两次。

void reverse(int a[], int len)
{
    int i;
    int j=len-1,b;
    for(i=0;i<len/2;i++)
    {
        b=a[i];
        a[i]=a[j];
        a[j]=b;
        j--;
    }

    for(i = 0; i < len; i++) {
        printf("Element %d is: %d\n", i,a[i]);
    }   
}
The Principe is simple. just stand at the middle of the table and reverse the elements as follow. so pose n is lent of the table. then the last element is n-1.

so you ave to reverse position t[0] and t[n-2]
reverse t[1] and t[n-3] and so on...

stop when you rich the middle of the table. try to code your self is better than for me giving you the code.
hope it helped.