首页 > 解决方案 > 编写程序,导入三个浮点数a、b和c。按升序排序

问题描述

#include <iostream>
using namespace std;

int main()
{
    float a,b,c,maxx,minn;
    cin>>a>>b>>c;
    maxx=a;
    if (b>maxx) (maxx=b);
    if (c>maxx) (maxx=c);
    minn=b;
    if (a<minn) (minn=a);
    if (c<minn) (minn=c);
    cout<<minn<<" "<<maxx ;
}

我不知道如何打印 和 之间的max数字min

标签: c++if-statement

解决方案


您应该尽可能使用 stl 容器和算法。这可以为您节省大量工作和问题。您的问题已经存在一个功能。在您的描述中,您要求对值进行排序。在提供的代码中,您只要求最小值和最大值。最小/最大解决方案是:

#include <algorithm>
#include <iostream>

int main() {
    std::array<float, 3> a;
    std::cin >> a[0] >> a[1] >> a[2];
    auto [a_min, a_max] = std::minmax({a[0], a[1], a[2]});
    std::cout << "Min: " << a_min << "\nMax: " << a_max << '\n';
    return 0;
}

std::minmax需要一个值列表并返回一个std::pair带有最小值和最大值的值。它不会改变容器。auto [a_min, a_max]是一个结构化绑定,它将对的第一个值存储在 中a_min,第二个值存储在a_max.

这是排序问题的解决方案

#include <algorithm>
#include <iostream>

int main() {
    std::array<float, 3> a;
    std::cin >> a[0] >> a[1] >> a[2];
    std::sort(std::begin(a), std::end(a));
    for (const auto &el : a) {
        std::cout << el << ' ';
    }
    return 0;
}

std::sort期望在容器的开头有一个迭代器,在容器的末尾有一个迭代器。它将对您的实际容器进行排序,并且不提供已排序的副本。基于范围的 for 循环

for (const auto &el : a) {

是一种迭代容器的简单方法。

另外要修复您当前的代码,您可以添加一个新变量:

#include <iostream>

int main() {
    float a, b, c;
    std::cin >> a >> b >> c;
    float maxx = a;
    if (b > maxx) { maxx = b; }
    if (c > maxx) { maxx = c; }
    float minn = b;
    if (a < minn) { minn = a; }
    if (c < minn) { minn = c; }
    float midd = c;
    if (a > minn && a < maxx) { midd = a; }
    if (b > minn && b < maxx) { midd = b; }
    std::cout << minn << ' ' << midd << ' ' << maxx;
}

推荐阅读