函数 + 引用变量 - 编程作业 - C++

问题描述 投票:0回答:4

我一整天都在研究这个问题,但不知道我错过了什么。不想来这里寻求帮助,但我不得不这么做。

练习应该通过引用获取三个 int 参数,并将它们的值按升序排序,以便第一个参数具有最低值,第二个参数具有中间值,第三个参数具有最高值。

代码编译良好,但数字不按顺序排列。它会跳过我的函数,只显示直接来自 main 的变量。

#include <iostream>

using namespace std;

//Function prototype
void smallSort(int&, int&, int&);

//Main
int main()
{
    int a = 100, b = 25, c = 20;

    smallSort(a, b, c);

    cout << a << endl;
    cout << b << endl;
    cout << c << endl;

    return 0;
}

void smallSort(int &valu1, int &valu2, int &valu3)
{
    int tempVal1 = 0, tempVal2 = 0, tempVal3 = 0;

    if (valu1 > valu2 && valu1 > valu3)
    {
        tempVal1 = valu1;
        valu1 = tempVal1;
        if (valu2 > valu3)
        {
            tempVal2 = valu2;
            tempVal3 = valu3;
            valu2 = tempVal2;
            valu3 = tempVal3;
        }

        else if (valu3 > valu2)
        {
            tempVal2 = valu3;
            tempVal3 = valu2;
            valu2 = tempVal3;
            valu3 = tempVal2;
        }
    }

    else if (valu2 > valu1 && valu2 > valu3)
    {
        tempVal1 = valu2;
        valu2 = tempVal1;
        if (valu1 > valu3)
        {
            tempVal2 = valu1;
            tempVal3 = valu3;
            valu1 = tempVal2;
            valu3 = tempVal3;
        }

        else if (valu3 > valu1)
        {
            tempVal2 = valu3;
            tempVal3 = valu1;
            valu3 = tempVal2;
            valu1 = tempVal3;
        }

        else if (valu3 > valu1 && valu3 > valu2)
        {
            tempVal1 = valu3;
            valu3 = tempVal1;
            if (valu2 > valu1)
            {
                tempVal2 = valu2;
                tempVal3 = valu1;
                valu2 = tempVal2;
                valu1 = tempVal3;
            }

            else if (valu1 > valu2)
            {
                tempVal2 = valu1;
                tempVal3 = valu2;
                valu1 = tempVal2;
                valu2 = tempVal3;
            }

        }

    }
}
c++ function reference swap
4个回答
2
投票

你的功能太复杂了。 这也是错误的,因为至少它没有考虑到变量可以彼此相等。

它可以如下所示,如该演示程序所示。它使用冒泡排序方法

#include <iostream>

void smallSort( int &valu1, int &valu2, int &valu3 )
{
    if ( valu2 < valu1 )
    {
        int tmp = valu1;
        valu1 = valu2;
        valu2 = tmp;
    }

    if ( valu3 < valu2 )
    {
        int tmp = valu2;
        valu2 = valu3;
        valu3 = tmp;
    }

    if ( valu2 < valu1 )
    {
        int tmp = valu1;
        valu1 = valu2;
        valu2 = tmp;
    }
}

int main()
{
    int a = 2, b = 3, c = 1;

    std::cout << "a = " << a << ", b = " << b << ", c = " << c << std::endl;

    smallSort( a, b, c );

    std::cout << "a = " << a << ", b = " << b << ", c = " << c << std::endl;
}

程序输出为

a = 2, b = 3, c = 1
a = 1, b = 2, c = 3

也可以代替这样的代码块

    if ( valu2 < valu1 )
    {
        int tmp = valu1;
        valu1 = valu2;
        valu2 = tmp;
    }

您可以使用标准功能

std::swap
。例如

    if ( valu2 < valu1 ) std::swap( valu2, valu1 );

在这种情况下,该函数看起来像

#include <iostream>
#include <utility>

void smallSort( int &valu1, int &valu2, int &valu3 )
{
    if ( valu2 < valu1 ) std::swap( valu2, valu1 );

    if ( valu3 < valu2 ) std::swap( valu3, valu2 );

    if ( valu2 < valu1 ) std::swap( valu2, valu1 );
}

//...

0
投票

我认为公平地说你有点过于复杂,但没关系。

我认为如果您一次只比较两个整数,它可能会帮助您压缩代码,这样您就不必在尽可能多的逻辑中进行硬编码。 我在谷歌上快速搜索了源代码,发现了这个:https://codereview.stackexchange.com/questions/64758/sort- Three-input-values-by-order 请务必查看该帖子的评论,因为它们也应该对您有所帮助。

此外,通过 google 查找源代码非常容易,它会对您有很大帮助,尤其是当您仍在学习时!


0
投票

C++11 替代方案

#include <iostream>
#include <array>
#include <algorithm>
using namespace std;

int main() {
    array<int, 3> arr = { 100, 25, 20 };
    sort(arr.begin(), arr.end());
    for (int & i : arr) cout << i << endl;
}

输出

20
25
100

-2
投票

作为一名经常面临编程任务挑战的学生,我发现新作业帮助非常有用。他们的专家提供了全面而精确的作业,并根据我的要求进行了定制。将编程作业帮助集成到他们的工作流程中非常顺利,他们的支持使我能够掌握代码背后的逻辑。由于他们的帮助,我注意到我的技能得到了显着提高。如果您正在寻求可靠的帮助,这项服务当然值得考虑!

© www.soinside.com 2019 - 2024. All rights reserved.