我正在做一个C ++问题,我需要生成一个随机数,然后这个随机数是程序将提示用户输入的整数。
然后我需要使用两个单独的函数:1计算并返回总和,另一个计算并返回平均值。
到目前为止,这是我的代码:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int calculateSum(int, int);
int calculateAvg(int, int, int);
int main()
{
int sum = 0;
int average = 0;
int x;
int y;
int n = 0;
srand(time(0));
y = rand() % 10;
for (x = 1; x <= y; x++) {
cout << "Enter integer " << x << ": ";
cin >> n;
}
cout << "Sum: " << calculateSum(n, sum) << endl;
cout << "Average: " << calculateAvg(average, sum, y) << endl;
system("pause");
return 0;
}
int calculateSum(int n, int sum)
{
sum = sum + n;
return sum;
}
int calculateAvg(int average, int sum, int y)
{
average = sum / y;
return average;
}
代码的问题是每当我运行它时,它只需要最后一个整数来计算总和(例如,如果输入的最后一个整数是5,所有整数的总和将是5,这是不正确的,因为它忽略用户之前的整数),平均值始终为0,任何帮助修复这些问题都将不胜感激。
答案 0 :(得分:0)
您每次在循环中覆盖n
,但最后只更新sum
。每次都更新sum
。
答案 1 :(得分:0)
您的int n
只有一个整数的空间,因此您的for循环只会覆盖您输入的每个整数n
。当然,您输入的最后一个整数将是您离开for循环时唯一保存的整数。
您需要在for循环中调用calculateSum()
,以便在循环的每次迭代中递增sum
。所以而不是:
for (x = 1; x <= y; x++) {
cout << "Enter integer " << x << ": ";
cin >> n;
}
cout << "Sum: " << calculateSum(n, sum) << endl;
您可以这样设置:
for (x = 1; x <= y; x++) {
cout << "Enter integer " << x << ": ";
cin >> n;
sum = calculateSum(n, sum); // increment sum every iteration
}
cout << "Sum: " << sum << endl;
与此特定问题有些无关,您的calculateSum()
和calculateAvg()
函数实际上并未更新您已定义的sum
和average
个变量在main()
;他们只返回这些功能的结果。
要通过引用传递sum
和average
(您在此处尝试完成的操作),您需要更改以下功能签名:
int calculateSum(int n, int sum);
int calculateAvg(int average, int sum, int y);
要:
void calculateSum(int n, int &sum);
void calculateAvg(int &average, int sum, int y);
(我还将回复类型从int
更改为void
,因为您不需要返回sum
或average
- 您&# 39; d已经在各自的职能中对其进行了修改)
答案 2 :(得分:0)
问题是你应该使用数组,而不是典型的整数
而不是您当前的n
int array[10];
for(int i=0; i <=y; i++)
{
cin >>n;
array[i] = n;
}
答案 3 :(得分:0)
将输入的值保存在向量中,然后使用std :: accumulate。
上的示例