/ / Wyjście funkcji powinno być podwójne, ale daje mi liczbę całkowitą - c ++, function, double, funkcje zdefiniowane przez użytkownika

Wyjście funkcji powinno być podwójne, ale daje mi liczbę całkowitą - c ++, funkcję, podwójne, funkcje zdefiniowane przez użytkownika

Zrobiłem program, który jest naprawdę dobry idziała i ma w sobie funkcję zdefiniowaną przez użytkownika, ale jest tylko jeden problem, jak pokazano w tytule, mam całkowitą wartość wyjściową zamiast podwójnej, nie wiem dlaczego i próbowałem wszystkiego, co wiem, ale zakończyło się to niepowodzeniem.

Dlaczego wynikiem funkcji jest liczba całkowita, a nie podwójna?

Napisz funkcję main() która zachęca użytkownika do wprowadzenia trzech liczb całkowitych, dolnej i górnej, a następnie wywołuje funkcję average(): double average( int howManyNumbers, int lower, int upper) który generuje howManyNumbers losowe liczby całkowite z zakresu dolnego i górnegowłącznie. Następnie funkcja wyszukuje i zwraca średnią losowo wygenerowanych liczb całkowitych. Funkcja powinna generować inny zestaw wartości dla każdego przebiegu.

A to jest kod mojego programu:

#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;
}

Odpowiedzi:

3 dla odpowiedzi № 1

Przesuń srand(time(0)); przed pętlą.

Z srand(time(0)); ponownie inicjujesz generator liczb losowych w każdej pętli, co daje taki sam wynik z połączenia do rand() w każdej iteracji for pętli, dodając w ten sposób ten sam numer do sum howManyNumbers kilka razy.

Dlatego podzielony przez howManyNumbers, zwraca „całkowitą” liczbę całkowitą z powrotem (lub wystarczająco blisko, aby błąd nie był wyświetlany, biorąc pod uwagę zastosowaną precyzję).

Po prostu;

srand(time(0)); // moved to before the loop.
for (i=0;i<howManyNumbers;i++)
{
// ...
}

Próbny


3 dla odpowiedzi № 2

musisz zadzwonić srand(time(0)); tylko jeden raz, a otrzymasz podwójny wynik.

 srand(time(0));
for (i=0;i<howManyNumbers;i++)
{
sum=sum+(lower+rand()%(upper-lower+1));
}