c - 在 C 编程中反转数组元素

标签 c arrays reverse

我是 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

My code:

#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--;
    }
}

关于c - 在 C 编程中反转数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43083284/

相关文章:

arrays - 数组类型可以有方法吗?

racket - for/list 是否做了不必要的反向操作?

java - 按位运算的结果是否取决于 Java 中的字节顺序?在 C 或 C++ 中呢?

c++ - C\C++开源PCM到Mp3转换器?

arrays - 无法为使用 STUArray 的函数找到合适的签名(GHC 也不能)

C:从 char 数组打印会产生错误字符

python - Python列表和矩阵反转时的指针地址

在 C 中调用带有全局变量的静态函数

c - 使用带有星号字符的 c 在控制台应用程序中获取密码

javascript - 在没有旧的 'new Array(N)' 的情况下创建具有 N 个元素的数组的正确方法?