练习:用于循环和数组

时间:2016-11-11 00:52:08

标签: c++ arrays for-loop

我必须编写一个程序,允许计算任意数值的算术平均值(由用户选择)

它将输出:

数量:34

数量:36

数量:44

数字://我选择按

停止输入

//输出:

插入3个数字,平均值为:38

当然,我忘记发布我所做的事情:

for (int x = 0; x < 50; x++){
 cout << "Number: ";
 cin >> number[x];
 cout << "You have inserted the " << x << " element of the array;" << endl;

    sum += number[x];
    avarage = sum / number[x];
    nEelementi = number[x];}

所以我运行程序,输入一些数字,按ctrl + d之类的东西或尝试在代码中添加一些内容..但它只是从没有值的数组的第一个元素到最后一个元素,因为没有输入当然..然后打印荒谬的avarage和sum。

我知道我不需要一个数组来执行此操作,但这是练习所需要的..也是仅用于for或while循环和数组的练习请求。 我需要的是一种停止输入并计算我所写内容的总和和平均值的方法。

EDIT1。 我试图通过n写(x = 0; x&lt; n,x ++)来潜水,因为它对我有意义,但我认为它“认为”n,这样写,无限,因为结果是0(因为数字除以无穷大的极限是0)..所以我开始变得疯狂。 现在我开始认为循环使用会更容易!并写了

#include <iostream>
 using namespace std;

 int main() {

  int num[50];
  double sum = 0;
  double average = 0;
  int cont;
  int end = 0;

while (cont < 50) {
 cout << "num: ";
 cin >> num[cont];
 sum += num[cont];
 cont++;
 cout << "Want to continue 0 = sì, 1 = no";
 cin >> end;

    if (end == 1) {break;}
}

   average = sum / cont;

  cout << "You have insert " << cont << " elements" << endl;
  cout << "LThe sum is: " << sum << endl;
  cout << "The avarage is: " << average << endl;

  return 0;
  }

但仍然无效。我的教授说你应该能够通过按ctrl + d来停止输入数字,所以我做得不好。 对不起,迟到的答案,但我也要翻译代码..希望所有翻译都很好:))

EDIT2

#include <iostream>


int main() {
int sum = 0;
int num;

 while ( std::cin ) {

 std::cout << "Number: ";
 std::cin >> num;

 }

 if ( std::cin >> num ) {

 sum += num;
 num++;

 }

 else {

 std::cin.clear();
 std::cout << "Input interrupted" << std::endl;

 }

std::cout << "Sum is " << sum << std::endl;
std::cout << "You have entered " << num << " numbers" << std::endl;

return 0;
}

我喜欢这个新代码,对我来说非常简单易懂,但我无法添加总和操作,它只输出0! (省略平均值) 此外,我无法确定并显示我输入了多少个数字。代码的最后一行只是我想要做的一个例子..

EDIT3。

最后我做到了。

#include <iostream>
using namespace std;

int main(){

double numero;
int index = 0;
double somma = 0.;


cout << "Inserire un numero: ";

while( cin )        

{
    if ( cin >> numero )

    {
    somma = somma + numero;     
    index++;
    cout << "Inserire un numero: ";
    }

    else 

    {
    cout << "Input interrotto" << endl;
    }
}

cout << "Sono stati inseriti " << index << " numeri e la lora media è:
<< somma / index << endl;

return 0;
}

非常感谢!

P.S。最后,我不需要使用数组,它只是简单的

1 个答案:

答案 0 :(得分:1)

这里有一些问题。一个是如果流因关闭或输入错误而导致错误,您就无法恢复,只需通过循环充电即可。

首先,如有必要,请尽早使循环终止。我还要将其转换为while循环以准备下一部分。

int x = 0;
while( std::cin && x < 50 )
{
    std::cin >> number[x++];
}

现在,如果流错误,它会提前终止。但是如果用户输入&#34;你好&#34 ;?您可以忽略它并继续这样:

    if( std::cin >> number[x] )
    {
        x++;
    }
    else
    {
        std::cin.clear();
    }

请注意,我没有计算循环中的总和或任何内容。没有必要,因为你已经把它们放在一个数组中了。您可以在循环后执行此操作。在这里,我使用std::accumulate

double sum = std::accumulate( number, number + x, 0.0 );
double average = 0.0;
if( x > 0 ) average = sum / x;

现在,您还说过想要任意数量的值。您的原始代码最多允许50个,而不是存储它们,而是只需动态计算并丢弃值。

double sum = 0.0;
int count = 0;

while( std::cin )
{
    double value;
    if( std::cin >> value )
    {
        sum += value;
        count++;
    }
    else
    {
        std::cin.clear();
    }
}

double average = 0.0;
if( count > 0 ) average = sum / count;

如果想要沿途存储值,则可以使用向量。

std::vector<double> numbers;

//...

        numbers.push_back( value );

如果您希望用户选择值的数量:

std::cout << "Enter number of values: " << std::flush;
std::size_t max_count = 0;
std::cin >> max_count;

std::vector<double> numbers;
numbers.reserve( max_count );

while( std::cin && numbers.size() < max_count )
{
    // ...
}