使用aux变量反转C语言中的数组

时间:2018-11-02 08:50:33

标签: c

我只需要使用aux变量来反转数组。不仅可以反向打印,而且实际上可以反转其内容。

这是我的代码:

#include <conio.h>
#include <stdio.h>
#define dim 4

int main() {
    int v[dim], aux = 0;
    for (int i = 0; i < dim; i++) {
        scanf("%d", & v[i]);
    }

    for (int i = 0; i < dim / 2; i++) {
        aux = v[i];
        v[i] = v[dim - i];
        v[dim - i] = aux;
    }

    for (int i = 0; i < dim; i++) {
        printf("%d", v[i]);
    }
    return 0;

}

但是运行代码后,我得到了1 4 3 2,我在做什么错了?

示例:

Input: `1 2 3 4` 

Output:  `4 3 2 1` 

4 个答案:

答案 0 :(得分:0)

#include <stdio.h>
#define dim 4

int main()
{
    int v[dim],aux=0;
    for (int i=0; i<dim; i++)
    {
        scanf("%d", &v[i]);
    }

    for (int i=0; i<dim/2; i++)
    {
        aux=v[i];
        v[i]=v[dim-i-1];
        v[dim-i-1]=aux;
    }

    for (int i=0; i<dim; i++)
    {
        printf("%d ", v[i]);
    }

    printf("\n");
    return 0;
}

运行和结果:

$ gcc b.c && ./a.out
1 2 3 4
4 3 2 1

问题是:使用v[dim-i-1]代替v[dim-i],应更改两个位置。

答案 1 :(得分:0)

@CoderDisorder只是一个很小的逻辑错误。您给数组的索引错误。

  1. 由于数组索引从0开始并以length-1结尾,因此在交换值时,您需要将上限索引设为dim-i-1而不是dim-i。只是为了使它更易于理解,for循环的范围从0dim/2,即2。因此,如果您希望最后一个元素的索引为3,或者比最后一个元素的索引为2,则第二个索引应该为dim-i-1 (4-i-1)

只需在使用它们的两个地方进行更改,输出就在那里!

代码:

for (int i=0; i<dim/2; i++)
{
    aux=v[i];
    v[i]=v[dim-i-1]; //observe the change here index is made dim-i-1
    v[dim-i-1]=aux; //same change here
}
  1. 另一种可能的方式。几乎相同,只是稍有不同,只需将第二个for循环更改为以下循环,其余的保持不变。 => i < dim/2 - 1

    for(int i = 0; i < dim/2 - 1; i++)

答案 2 :(得分:0)

i为零时,dim+i等于dim,并且v[dim-i]与超出范围的v[dim]相同。考虑使用dim - i - 1

#include <conio.h>
#include <stdio.h>

int main()
{
const size_t dim = 4; // size_t is more suitable
int v[dim],aux=0;
for (int i=0; i<dim; i++)
{
    scanf("%d", &v[i]);
}

for (int i=0; i<dim/2; i++)
{
    aux=v[i];
    v[i]=v[dim - i - 1];
    v[dim - i - 1]=aux;
}

for (int i=0; i<dim; i++)
{
    printf("%d", v[i]);
}
return 0;
}

输入:1 2 3 4
输出:4321

答案 3 :(得分:0)

作为其他答案的补充,我将发布此版本的aux变量免费版本,该版本仅适用于整数。 为了交换两个整数,不需要任何其他辅助变量。

for (int i=0; i<dim/2; i++)
{
    v[i]           = v[i] ^ v[dim - i - 1];
    v[dim - i - 1] = v[i] ^ v[dim - i - 1];
    v[i]           = v[i] ^ v[dim - i - 1];

}

Live demo here