C程序设计中的数组元素反转

C程序设计中的数组元素反转,c,arrays,reverse,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

我是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 输入数字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;
}
#包括
无效反向(整数a[],整数i)
{
int j=7,b;

对于(i=0;i为避免误导,在反转后写入输出,而不是在反转期间:

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

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

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

您还可以在新阵列中复制阵列:

#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;
}
#包括
无效反向(整数a[],整数i)
{
int b[i];
int j;

对于(j=0;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;
}
#包括
无效反向(整数a[],整数i)
{
int b[i];
int j;

对于(j=0;j您想要做的事情,它只移动数组长度的一半,否则您将反转数组两次

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]);
    }   
}
void reverse(int a[],int len)
{
int i;
int j=len-1,b;

对于(i=0;i您想要做的事情,它只移动数组长度的一半,否则您将反转数组两次

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]);
    }   
}
void reverse(int a[],int len)
{
int i;
int j=len-1,b;

对于(i=0;i
i,如果你想象手动解决这个问题,那么这个问题最简单:交换第一个和最后一个、第二个和第二个最后一个,等等,直到你到达中间。在代码中,在数组中保留两个索引。第一个从0开始,第二个从7开始。交换,然后向内移动索引(先递增,后递减)。当索引满足时停止(但请考虑偶数和奇数列表的情况)。一般来说,多想。少编码。或者用两个指针遍历数组,直到它们相遇/通过。如果你想象用手解决这个问题,这个问题最简单:交换第一个和最后一个,第二个和第二个,等等,直到你到达中间。在代码中,在数组中保留两个索引。第一个从0开始,第二个从7开始。交换,然后向内移动索引(先递增,后递减)。当索引相遇时停止(但考虑偶数和奇数列表会发生什么)。一般来说,多想。少编码。或者用两个指针遍历数组,直到它们相遇/通过。思考一下b[]在这段代码中的作用。为什么不直接打印a[i-1-j]
每次通过?和
a[]
保持不变,这是最初问题的根源,但这并不能解决这一问题。我只是想展示一个选项,您可以按照相反的顺序访问元素,而无需实际反转数组,也可以构建一个反转数组而无需触及原始数组-其他选项请思考一下 b[]
在这个代码中。为什么不在每次通过时只打印
a[i-1-j]
a[]
保持不变,这是最初问题的根源,但这并不能解决这一问题。我只是想展示一个选项,您可以按照相反的顺序访问元素,而无需实际反转数组,也可以构建一个反转数组而无需触及原始数组-其他选项“长度”是什么因为它没有初始化,所以相等?它会等于8吗?还有,为什么要从“长度”中减去1?谢谢advance@Lethro:它不是未初始化的;它是一个参数。在调用函数时传递一个值,就像它被称为
reverse(a,8)一样
main
中;8是长度。您需要从中减去1,因为您希望它作为数组中的最后一个索引开始,它比长度(数组从0开始)小一个。(您之前用7初始化它,长度是8。)“长度”是什么因为它没有初始化,所以相等?它会等于8吗?还有,为什么要从“长度”中减去1?谢谢advance@Lethro:它不是未初始化的;它是一个参数。在调用函数时传递一个值,就像它被称为
reverse(a,8)一样
main
中;8是长度。您需要从中减去1,因为您希望它作为数组中的最后一个索引开始,它比长度(数组从0开始)小一个。(您之前用7初始化它,长度为8。)