在 C 编程中反转数组元素

莱瑟罗

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

这是我得到的输出:

输入数字0:0
输入数字1:1
输入数字2:2
输入数字3:3
输入数字4:4
输入数字5:5
输入数字6:6
输入数字7:7
元素0 是:7
元素1 是:6
元素 2 是:5
元素 3 是:4
元素 4 是:4
元素 5 是:5
元素 6 是:6
元素 7 是: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--;
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章