最小和最多n组数字

时间:2015-10-23 10:55:22

标签: c++

我应该用C ++编写一个程序,它将以下列方式找到最多和最少n组数字:

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

  2. 每组数字由5个数字组成,用空格键分隔。

  3. 因此,我们希望为n组中的每一组找到其最大值,最小值和算术平均值。

  4. 这是我的尝试:

    <a class="accordion__title no-underline collapsed" data-toggle="collapse" data-parent="#accordion" href="uw-invloed/#collapse6" aria-expanded="false" aria-controls="collapse6">
        Informerende / opiniërende bijeenkomsten
        <svg class="shape shape--plus">
            <use xlink:href="#shape--plus"></use>
        </svg>
    </a>
    

    以下是将i,j = 1,i,j ++校正为i,j = 0并更改min和max的算法后发生的情况:

    enter image description here

    如您所见,此次计算正确完成,但循环仍存在问题。

    你能告诉我我的解决方案有什么问题吗?我该如何解决?

    确定!它的工作现在很精细!非常感谢你的帮助和耐心!

6 个答案:

答案 0 :(得分:4)

如上所述,您的代码会导致未定义的行为,因为它会破坏堆栈内存。

float T[5];

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

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

答案 1 :(得分:1)

如果您为<a class="button" href="#openModal">SEND &#9656;</a> 输入2,那么外部循环(n)将运行两次,让您输入五个数字进行两次计算。那是你如何编码的。如果不应该那样,那么你需要重新思考一下你试图解决的问题的解决方案。

答案 2 :(得分:1)

float T[5];

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

每个数组都以索引0开头。 例如,如果声明一个整数数组,则说int a[10]; 它的起始地址是1000。 然后内存位置如下:

对于第一个元素a[0] 1000+0*size of int

对于第二个元素a[1] 1000+1*size of int

对于第三个元素a[2] 1000+2*size of int .......依此类推。

在这个示例中,您已经开始使用T[1],它正在启动address+1*size of float,这在逻辑上是第二个元素

答案 3 :(得分:1)

根据您的代码,您必须在获得最大值,最小值和平均值后输入另一组数字。

答案 4 :(得分:1)

您目前有超出限制的访问权限(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();
    }
}

Live demo

答案 5 :(得分:-6)

变化

for(j=1; j<=n; j++)

for(j=1; j<=n; ++j)

由于j++评估为之前的j值,++j会计算为刚增加的值。