【问题标题】:avg, biggest and sum in unknown sized array c++未知大小的数组c ++中的平均,最大和总和
【发布时间】:2015-01-25 11:42:46
【问题描述】:

我正在尝试用 c++ 编写一个控制台应用程序,让用户输入一系列数字,程序应该得到所有数字的总和、平均数字、最大数字和第二大数字。 例如:

输入几个数字:10 12 -5 20 -2 15 0

总和 = 50

平均值 = 8.3

最大数 = 20

第二大 = 15

#include<iostream>
#include<conio.h>
using namespace std; 
int main( )
{


int a[5];

cout << "We are going to find the max value"<< endl;
int x;

    for (x=0; x<5; x++)
    {
        cout<<"insert values"<<x+1<<endl;
            cin>>a[x];
    }
    int max;
    int min;
    max = a[0];
    min = a[0];
    int e=0;
        while (e<5)
        {
            if (a[e]>max)
            {
                max = a[e];
            }

            e++;
        }
        cout<<"Max value in the array is.."<<max<<endl;

    getch();
    return 0;
 }

这是我迄今为止的进步。 虽然,我有些担心。 如何让用户输入示例中的数字并将它们存储在未知大小的数组中?

在等待这个答案时,我会尝试找出一种方法来计算平均数、总和和第二大数:)

谢谢!

【问题讨论】:

  • 您可能想了解std::vector,并了解一点standard C++ algorithms
  • 从技术上讲,不需要向量,因为所有值都可以即时计算。
  • @Jasper 好点。我不确定这是否比std::vector 更容易,但它肯定比任何其他解决方案都更容易(这或多或少需要重新实现std::vector)。

标签: c++ arrays


【解决方案1】:

要输入未知数量的元素,请使用std::vector,输入 直到用户告诉您停止,通常是通过输入文件结尾:

std::vector<int> values;
int i;
while ( std::cin >> i ) {
    values.push_back( i ) ;
}

如果您正在寻找其他类型的结束信号,您将 可能必须逐行阅读,检查该行是否包含 您的最终标准,然后使用 std::istringstream 解析 整数。

对于其余部分:它可能不符合练习的目标,但 标准库有几个功能可以使事情 明显更简单:std::max_element,例如,或 std::accumulate。而&lt;conio.h&gt; 不是很便携,而且是 在支持它的系统上已弃用。

【讨论】:

  • 谢谢!将阅读更多关于它的信息。输入的数字应以 0 结尾。
  • @MarkBear34 0 值是结束的标记。在这种情况下,这很容易。循环就变成了while ( std::cin &gt;&gt; i &amp;&amp; i != 0 )...
【解决方案2】:

如果您不能使用std::vector,您可能需要了解dynamic memory allocation

int *a = new int[size];

【讨论】:

  • 在没有std::vector 的情况下处理未知数量的元素绝对不是微不足道的;一个简单的new 需要事先知道元素的数量。 (当然,如果他正在处理手动用户输入,他可以声明类似int a[1000000]; 的内容;没有用户会手动输入超过一百万个值,这在现代机器上并不是很多内存。)
猜你喜欢
  • 1970-01-01
  • 2023-03-31
  • 2011-01-26
  • 1970-01-01
  • 1970-01-01
  • 2012-04-13
  • 2014-06-11
  • 2014-01-13
  • 1970-01-01
相关资源
最近更新 更多