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 generujehowManyNumbers
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 № 1Przesuń 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++)
{
// ...
}
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));
}