3

这是我班级的一个练习,我不确定如何执行需要反转顺序的功能。

#include <iostream>
#include <iomanip>

void reverseorder(int[], int);
void printout(int[], int);

const int SIZE = 10;

int main()
{
int number[SIZE] = {10, 15, 20, 25, 30, 35, 40, 45, 50, 55};

reverseorder(number, SIZE);
printout(number, SIZE);
}

void reverseorder(int number[], int SIZE)
{
    for (int i = 0; i < SIZE; i++)
    {

        number[i] = number[SIZE - i];
        return;
    }
}

void printout(int number[], int SIZE)
{
    for (int i = 0; i < SIZE; i++)
    {
        std::cout << number[i] << std::setw(5);
    }
    std::cout << std::endl;
}

我知道 fnc void reverseorder(int number[], int SIZE) 不正确,因为这是唯一需要做的事情。如果您知道答案但不想直接给我,那么任何提示也将不胜感激!多谢你们

编辑:目前的输出是: SalvGis-MBP:c++ programming$ ./a.out 503709838 15 20 25 30 35 40 45 50 55

但我希望它是 55 50 45 40 35 30 25 20 15 10

不知道为什么要生产 503709838。有人提到第一次迭代被破坏,这可能解释了它。

4

4 回答 4

2

如果你被允许使用 STL,你可以这样做

void reverseorder(int number[], int SIZE)
{
    std::reverse(number, number + SIZE);
}
于 2020-04-08T20:12:07.233 回答
2

要反转数组,您需要使用标准函数std::swap或自己编写这样的函数。

这个功能

void reverseorder(int number[], int SIZE)
{
    for (int i = 0; i < SIZE; i++)
    {

        number[i] = number[SIZE - i];
        return;
    }
}

不交换数组的元素。因此,例如在第一次迭代中,由于这个语句

    number[i] = number[SIZE - i];

元素的值number[0]将简单地丢失。此外,当 i 等于 0 时,使用了数组 number[SIZE - i] 的不存在元素。

您需要交换阵列的两半。

此语句中还调用了 std::setw

std::cout << number[i] << std::setw(5);

没有意义。这个调用应该放在输出的表达式之前number[i]

请注意,这两个函数都应具有 size_t 类型的第二个参数,并且输出数组的函数的第一个参数应具有限定符const,因为在函数内使用的数组不会更改。

给你。

#include <iostream>
#include <utility>

void reverseorder( int a[], size_t n )
{
    for ( size_t i = 0; i < n / 2; i++ )
    {
        std::swap( a[i], a[n-i-1] );
    }
}

std::ostream & printout( const int a[], size_t n, std::ostream &os = std::cout )
{
    for ( size_t i = 0; i < n; i++ )
    {
        os << a[i] << ' ';
    }

    return os;
}


int main() 
{
    int number[] = {10, 15, 20, 25, 30, 35, 40, 45, 50, 55};
    const size_t N = sizeof( number ) / sizeof( *number );

    printout( number, N ) << '\n';

    reverseorder( number, N );

    printout( number, N ) << '\n';

    return 0;
}

程序输出为

10 15 20 25 30 35 40 45 50 55 
55 50 45 40 35 30 25 20 15 10 

如果您可能不使用 std::swap 然后在循环中写入例如

    for ( size_t i = 0; i < n / 2; i++ )
    {
        int tmp = a[i];
        a[i] = a[n-i-1];
        a[n-i-1] = tmp;
    }
于 2020-04-08T20:05:59.160 回答
1

在这一行:

number[i] = number[SIZE - i];

这并没有逆转它实际上是用它之前的数字增量替换。当索引i到达数组的中间时,它将再次开始重复数组的后半部分。

于 2020-04-08T20:05:34.803 回答
0
void reverse(int *num,int size){
    for(int i = 0;i<(size)/2;i++){
        const int temp = num[i];
        num[i] = num[size-i-1];
        num[size-i-1] = temp;
    }
}

num 是指向数组的指针,size 是数组的大小,temp 是一个变量,它保存一个值以将第一个元素与最后一个元素交换,将第二个元素与 last-1 交换......我们需要重复此(数组大小)/2 次

于 2020-04-08T21:21:09.343 回答