我制作了一个实际上很好且工作的程序,它有一个用户定义的功能,但是只有一个问题,因为它在标题中显示,我得到整数输出而不是双,我不知道为什么和我尝试了所有我知道但最终失败的事情。
为什么函数的结果是整数而不是双精度?
编写一个函数
main()
,提示用户输入三个整数number,lower和upper然后调用函数average()
:double average( int howManyNumbers, int lower, int upper)
它生成howManyNumbers
个随机整数,包括低位和高位。然后函数找到并返回随机生成的整数的平均值。该函数应为每次运行生成不同的值集。
这是我程序的代码:
#include<iostream>
#include<cstdlib>
#include<ctime>
#include<iomanip>
using namespace std;
int main ()
{
int number,lower,upper;
double average (int , int , int);
cout<<"Enter number, lower, upper: ";
cin>>number>>lower>>upper;
cout<<showpoint<<fixed;
cout<<"The average of the "<<number<<" random integers is"<<average(number,lower,upper );
return 0;
}
double average (int howManyNumbers, int lower, int upper)
{
int i;
double avg,sum=0;
for (i=0;i<howManyNumbers;i++)
{
srand(time(0));
sum=sum+(lower+rand()%(upper-lower+1));
}
avg=(sum/howManyNumbers);
return avg;
}
答案 0 :(得分:3)
你必须只召唤一次srand(time(0));
,你将得到双倍的结果。
srand(time(0));
for (i=0;i<howManyNumbers;i++)
{
sum=sum+(lower+rand()%(upper-lower+1));
}
答案 1 :(得分:3)
将srand(time(0));
移至循环前。
使用srand(time(0));
重新初始化每个循环上的随机数生成器,这会导致在rand()
循环的每次迭代中调用for
的结果相同,从而添加与sum
howManyNumbers
次数相同的数字。
因此,当除以howManyNumbers
时,它会返回一个“整数”整数(或者足够接近使用精度时不会显示错误)。
只需;
srand(time(0)); // moved to before the loop.
for (i=0;i<howManyNumbers;i++)
{
// ...
}