【问题标题】:I'm having a couple of errors on my bubble sorting program which displays the maximum, minimun and average (C++)我的冒泡排序程序有几个错误,它显示最大值、最小值和平均值(C++)
【发布时间】:2019-12-12 00:29:43
【问题描述】:

我正在为作业编写编程代码,您应该输入要排序的学生身高,打印最大、最小排序结果和平均值,但我有几个错误,我设法完成排序和最大值,但最小值是错误的,我必须获得数组的平均值,但我还没有弄清楚如何让程序读取用户键入的值。 如果有人设法帮助我,我将非常感激。

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

    float average (float ave1, float ave2, float ave3, float ave4, float ave5, float ave6, float ave7, float ave8, float ave9, float ave10)
    {
        float result = 0;
        result = ((ave1 + ave2+ ave3 + ave4 + ave5 + ave6 + ave7 + ave8 + ave9 + ave10) /10);
        result (result);
    }
//This is my failed attempt to code the average array
int main() {
    float height[10];
    float max = 0;
    float min = 0;

    int i, j;

    for (i = 0; i < 10; i++)
    {
        cout << "What's student " << i + 1 <<" height?" << endl;
        cin >> height [i];
    }

    max = min = height[0];

    for (i = 0; i < 10; i++) //Bubble Sort
    {
        for(j = 0; j < 9; j++)
        if (height[j] > height [j+1])
        {float temp;

                temp = height [j];
                height [j] = height [j+1];
                height [j+1] = temp;
            if (height [i] < min)
            {
                min = height [i];
            }
            if (height [i] > max)
            {
                max = height [i];
            }
    }
    }
    height [i] = ave1 = ave2 = ave3 = ave4 = ave5 = ave6 = ave7 = ave8 = ave9 = ave10 ;

    cout << "The tallest student's height is: " << max << " feet" << endl;
    cout << "The shortest student's height is: " << min << " feet" << endl;
    cout << "Sorted heights are: ";
    for (i = 0; i < 10; i++)
    {
        cout << height [i] << "; ";
    }
    cout << "Height average: " << endl;
    cout << average;

    return 0;
}

【问题讨论】:

  • 当您还没有弄清楚如何从用户那里获取输入时,您是如何完成排序和最大化的? (从 C++ 中的用户那里获取输入,顺便说一句,这里已经多次询问和回答,稍微搜索一下就会找到。)如果你能做到最大,你应该能够得到最小 - 它完全相反。
  • 是的,用户在第一个“for”循环中输入高度,它询问学生的身高是多少,问题是当它打印最小值时,它并不总是最小的数字,例如,如果你输入 1.40 和 1.41,得到 1.41 作为最小值,其中 1.40 应该是正确答案
  • 不,你不会得到1.41 作为最小值,因为&lt; 运算符在1.411.40 的比较中正常工作,并且correclty 将1.40 标识为更低。因此,再次检查您的代码以确保您的比较是正确的。至于用户输入,我在我还没有弄清楚如何让程序读取使用输入的值中从您的问题本身中获取了这一点。平均值只是将输入的值相加,然后除以输入的数量。
  • 我也不认为eight [i] = ave1 = ave2 = ave3 = ave4 = ave5 = ave6 = ave7 = ave8 = ave9 = ave10; 行做你认为它做的事。您可能需要仔细阅读您的代码。
  • 我想我还没有说清楚。当我输入 5 个不同的高度时,有时程序不会选择正确的答案,我已经知道 1.41 不是最小值,但程序还是选择了它(例如,而不是 1.40)

标签: c++ arrays bubble-sort


【解决方案1】:

由于按升序对数字列表进行排序,最小值是列表的第一项,而高值是列表的最后一项,因此 min=height[0] 和 max=height[9 ] 排序后。

  1. 在您的代码中删除以下行:

      if (height [i] < min)
        {
            min = height [i];
        }
        if (height [i] > max)
        {
            max = height [i];
        }
    
  2. 行后:

    float min=0;
    

    添加:

    float acum=0;
    
  3. 替换这一行:

    height [i] = ave1 = ave2 = ave3 = ave4 = ave5 = ave6 = ave7 = ave8 = ave9 = ave10 ;
    

    作者:

     for(i=0;i<10;i++)
         acum+=height[i];
    
     min=height[0];
     max=height[9];
    
  4. 最后替换;

     cout << average;
    

     cout<< acum/10;
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    • 2015-12-24
    • 2023-03-31
    • 2014-07-01
    相关资源
    最近更新 更多