n组数的最小值和最大值 我应该编写一个C++程序,它将以下面的方式找到n个数的最大值和最小值:

n组数的最小值和最大值 我应该编写一个C++程序,它将以下面的方式找到n个数的最大值和最小值:,c++,C++,第一个输入是一个正整数n=5个元素的数字集的数量。也就是说,我们希望有n行数字,每行5个(实数) 每组数字由5个数字组成,用空格键分隔 因此,我们希望找到n个集合中每个集合的最大值、最小值和算术平均值 以下是我的尝试: #include<iostream> using namespace std; int n; float maxx, minn, a; int main() { cin >> n; for (int j = 0; j < n;

第一个输入是一个正整数n=5个元素的数字集的数量。也就是说,我们希望有n行数字,每行5个(实数)

  • 每组数字由5个数字组成,用空格键分隔

  • 因此,我们希望找到n个集合中每个集合的最大值、最小值和算术平均值

  • 以下是我的尝试:

    #include<iostream>
    using namespace std;
    
    int n;
    float maxx, minn, a;
    
    int main()
    {
        cin >> n;
    
        for (int j = 0; j < n; j++)
    
        {
    
            float T[5];
    
            for (int i = 0; i < 5; i++)
            {
                cin >> T[i];
            }
    
            if (T[0] > T[1]) {
                maxx = T[0];
                minn = T[1];
            }
            else {
                maxx = T[1];
                minn = T[0];
            }
    
            for (int i = 0; i < 5; i += 2) {
    
                if (T[i + 2] > T[i + 3]) {
                    if (T[i + 2] > maxx) {
                        maxx = T[i + 2];
                        if (T[i + 3] < minn) {
                            minn = T[i + 3];
                        }
                    }
                }
                else {
    
                    if (T[i + 3] > maxx) {
                        maxx = T[i + 3];
                        if (T[i + 2] < minn) minn = T[i + 2];
                    }
                }
            }
            a = (T[0] + T[1] + T[2] + T[3] + T[4]) / 5.0;
    
            cout << maxx << endl;
            cout << minn << endl;
            cout << a << endl;
        }
    
        return 0;
    }
    
    #包括
    使用名称空间std;
    int n;
    浮动最大值,明尼苏达州,a;
    int main()
    {
    cin>>n;
    对于(int j=0;j>T[i];
    }
    if(T[0]>T[1]){
    maxx=T[0];
    minn=T[1];
    }
    否则{
    maxx=T[1];
    minn=T[0];
    }
    对于(int i=0;i<5;i+=2){
    if(T[i+2]>T[i+3]){
    if(T[i+2]>maxx){
    maxx=T[i+2];
    if(T[i+3]maxx){
    maxx=T[i+3];
    如果(T[i+2]
    
    for(j=1;j编写时,您的代码会导致未定义的行为,因为它会损坏堆栈内存

    float T[5];
    
    for(i = 1; i <= 5; i++)
    {
        cin >> T[i];
    }
    
    float T[5];
    对于(i=1;i>T[i];
    }
    

    这显然会导致未定义的行为。这可能是您的实际错误,也可能不是,但在修复此错误之前(此错误在下面的代码中重复多次),您无法从程序中预期任何已定义的行为。

    如果您为
    n
    输入
    2,则外部循环(
    for)(int j=0;j
    float T T T[5];
    对于(i=1;i>T[i];
    }   
    
    每个数组都以索引0开头。 例如,如果您声明一个整数数组,请说
    inta[10]
    ; 它的起始地址是1000。 然后内存位置如下所示:

    对于第一个元素
    int的[0]1000+0*大小

    对于第二个元素
    a[1]1000+1*整数大小

    对于第三个元素
    a[2]1000+2*int的大小
    ……等等


    在本例中,您从
    T[1]
    开始,这是从
    address+1*float大小开始的,这在逻辑上是第二个元素

    根据您的代码,您必须在获得max、min和average之后输入另一组数字。

    您当前有越界访问(
    T[i+2]>T[i+3]
    其中
    i==3

    拆分子功能可能有助于:

    void max_min_mean_5()
    {
        float values[5];
    
        for (auto& value : values) {
            std::cin >> value;
        }
    
        const auto p = std::minmax_element(std::begin(values), std::end(values));
        const auto mean = std::accumulate(std::begin(values), std::end(values), 0.f) / 5.f;
        std::cout << *p.second << std::endl;
        std::cout << *p.first << std::endl;
        std::cout << mean << std::endl;
    }
    
    int main()
    {
        int n;
        std::cin >> n;
        for (int i = 0; i != n; ++i) {
            max_min_mean_5();
        }
    }
    
    void max\u min\u mean\u 5()
    {
    浮动值[5];
    用于(自动和值:值){
    标准:cin>>值;
    }
    const auto p=std::minmax_元素(std::begin(值),std::end(值));
    常量自动平均值=标准::累加(标准::开始(值),标准::结束(值),0.f)/5.f;
    
    std::cout为什么n和i是全局变量?在哪里定义了
    j
    ?您使用的是什么
    swap
    函数?您包括哪些头文件?请尝试创建一个,并向我们展示。数组从索引0开始,而不是1。例如:
    for(i=1;i还有,“仍然输入更多数字”是什么意思?你能给我们看一个示例会话吗?包括实际输入和输出,以及预期输出?@JoachimPileborg我刚刚添加了一个编译后的屏幕截图。无论如何,在这个例子中,这没有什么区别。回答错误。
    for
    循环中的三个表达式是在不同的时间完成的,你几乎可以看到em作为三个不同且独立的子语句。@SIlverstripeNewbie这是未定义行为的问题,行为未定义且无法预测。这很可能就是问题所在。是否有方法依次输入两行数字,然后得到两行结果?是的。使用二维数组输入数据。在如果是nx5,我明白了。如果不允许我在代码中使用这些[]括号怎么办?有没有办法一行接一行地写两行?(如果你不想使用[],那么我必须将T[0],…,T[4]更改为a,…,e)然后你必须声明这么多变量。这很乏味。例如,如果你想要一个5行5列的二维数组,而不使用[]i,即数组,那么你需要声明5x5=25个不同的变量。也就是说,数组出现在图中。
    float T[5];
    
    for(i = 1; i <= 5; i++)
    {
        cin >> T[i];
    }
    
    float T[5];
    
    for(i = 1; i <= 5; i++)
    {
        cin >> T[i];
    }   
    
    void max_min_mean_5()
    {
        float values[5];
    
        for (auto& value : values) {
            std::cin >> value;
        }
    
        const auto p = std::minmax_element(std::begin(values), std::end(values));
        const auto mean = std::accumulate(std::begin(values), std::end(values), 0.f) / 5.f;
        std::cout << *p.second << std::endl;
        std::cout << *p.first << std::endl;
        std::cout << mean << std::endl;
    }
    
    int main()
    {
        int n;
        std::cin >> n;
        for (int i = 0; i != n; ++i) {
            max_min_mean_5();
        }
    }