函数的输出应该是double,但它给出了整数

时间:2015-12-03 07:48:37

标签: c++ function double user-defined-functions

我制作了一个实际上很好且工作的程序,它有一个用户定义的功能,但是只有一个问题,因为它在标题中显示,我得到整数输出而不是双,我不知道为什么和我尝试了所有我知道但最终失败的事情。

为什么函数的结果是整数而不是双精度?

  

编写一个函数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;
}

2 个答案:

答案 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++)
{
  // ...
}

Demo