我必须编写一个程序,允许计算任意数值的算术平均值(由用户选择)
它将输出:
数量: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。最后,我不需要使用数组,它只是简单的
答案 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 )
{
// ...
}