【问题标题】:Array's in function confusion C++ [closed]函数混淆C ++中的数组[关闭]
【发布时间】:2013-11-14 23:10:37
【问题描述】:

我需要编写一个程序,传递一个 int 数组及其大小,然后打印出高于平均水平的数字。谁能帮我解决这个问题?我坐在这里想知道它到底在问什么,而且我对编程还是很陌生,所以我不知道该怎么做。对不起,我听起来很无能为力,但我只是感到困惑。感谢任何可以提供帮助的人。到目前为止,这就是我所拥有的:

这是更新后的代码,但我仍然无法弄清楚为什么没有显示多个平均值,或者如何使输出值正确。
编辑:将 average() 函数中的几个 int 值更改为浮点数,但最后的总值仍然存在问题

#include <iostream>
using namespace std;

int average(int values[],int size);

int main(){
int size;
int values[] = {1,2,3,4,5,6};
cout << "Please input the size of the array" << endl;
cin >> size;
int output = average(values, size);
if(values[size]>output){
    cout << "The values above average are: " << output << endl;
}

return 0;
}

int average(int values[],int size){
float temp=0.0;
for(int i=0;i<size;i++){
    temp += values[i];
}
float end=temp/size;

return end;
}

【问题讨论】:

  • 去图书馆,花几个小时读几本书,然后回到你的电脑前。您可能需要读取(或初始化)您的数组,并且您可能会考虑使用一些 std::vector<int>
  • 编程的第一步是了解你需要做什么。你能用语言(对自己)描述任务想要什么吗?如果你做得好,你就会知道你需要查看多少次数组,以及如何做的大致思路。然后剩下的就是学习代码了。这实际上是最简单的部分。
  • 这是您的average 方法的可能签名。 template&lt;size_t N&gt; int average(const int (&amp;arr)[N]) 从那里拿走。
  • 您将平均值计算为float 值,这是正确的做法。但是,您的 average 函数返回一个 int,将结果截断为负无穷大。直到您将输出谓词从 &gt; 更改为 &gt;=,最终打印出一些 低于 平均值的值(在您的示例中为 3),这一点才会变得明显。

标签: c++ arrays function numbers average


【解决方案1】:

您应该创建一个整数数组并将其传递给平均函数,并且需要传递大小(以便您知道循环多少次)。在 Average 函数的循环中,将所有值添加到临时值,然后除以输入到函数的计数。

//returns the average
int average(int Values[],int Size){
    //perhaps declare a temporary value here
    for(int i=0;i<Size;i++){
        //add all the values up and store in a temporary value
    }
    //here divide by Size and return that as the average
}

这个

if(values[size]>output){
    cout << "The values above average are: " << output << endl;
}

应该替换为:

for(int i=0;i<size;i++){
    if(values[i]>output){
        cout << "The values above average are: " << values[i] << endl;
    }
}

【讨论】:

  • 对我来说一切都非常清晰和简单。谢谢
  • 所以我研究了它,我想出了这个,但它不是多个整数或任何平均值......它在上面更新,如果你得到一个,你能看看机会?
【解决方案2】:

这是一个比发布的解决方案更简单的解决方案。主要特点:它确实做了它应该做的事情:

#include <iostream>

template<size_t N>
float average( const int (&value)[N] ) {
    float total( 0.0f );
    // Sum all values
    for ( size_t index = 0; index < N; ++index )
        total += value[index];
    // And divide by the number of items
    return ( total / N );
}

int main() {
    int value[]  = { 1, 2, 3, 4, 5, 6 };
    // Calculate average value
    float avg = average( value );
    const size_t count = ( sizeof( value ) / sizeof( value[0] ) );
    // Iterate over all values...
    for ( size_t index = 0; index < count; ++index )
        // ... and print those above average
        if ( value[index] > avg )
            std::cout << value[index] << std::endl;

    return 0;
}

Ideone 上的实时示例。输出:

4
5
6

【讨论】:

  • 感谢您的回复,但对于我目前的工作而言,它太复杂了。不过我很感激。 XenoZergNid 的措辞和代码都很简单。
  • @user 一旦你发现你的平均值有时是错误的,你就会改变主意。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-01
  • 1970-01-01
  • 2021-06-20
  • 2018-08-01
相关资源
最近更新 更多