Génération de nombres aléatoires en C

Tout d'abord, vous devez ajouter quelques fichiers d'en-tête: #include, #include, puis ajouter une phrase "srand ((unsigned) time (NULL))" au début de la fonction principale. Cette instruction va générer une valeur de départ aléatoire et ensuite utiliser la fonction ranf () Numéro aléatoire. Voici des exemples:

#include<cstdio> 
#include<cstdlib>
#include<time.h>
int main(){
	srand((unsigned)time(NULL));
	for(int i=0;i<10;i++){
		printf("%d ",rand());
	}
	return 0;
}

En même temps, la fonction rand () ne peut générer que des entiers dans la plage de [0, RAND_MAX]. RAND_MAX est une constante de cstdlib, qui est différent dans différents environnements. Le livre que j'ai lu est 32767.
Si vous voulez sortir un nombre aléatoire dans une plage fixe [a, b], vous devez utiliser rand ()% (b-a + 1) + a, évidemment la plage de rand ()% (b-a + 1) est [0, ba ], Plus a est [a, b], génèrent des nombres dans la plage de [0,1] et [3,7] comme suit:

#include<cstdio> 
#include<cstdlib>
#include<time.h>
int main(){
	srand((unsigned)time(NULL));
	for(int i=0;i<10;i++){
		printf("%d ",rand()%2);
	}
	printf("\n");
	for(int i=0;i<10;i++){
		printf("%d ",rand()%5+3);	
	}
	return 0;
}

Mais ces méthodes ne peuvent générer qu'une limite inférieure à 32767, si vous voulez être plus grand, vous pouvez utiliser plusieurs fois pour générer des nombres aléatoires rand, puis utiliser l'opération de bits pour épisser ensemble (ou multiplier directement deux nombres aléatoires), une autre idée est de commencer par Utilisez rand () pour générer un nombre aléatoire de [0, RAND_MAX], puis divisez ce nombre par RAND_MAX, et vous obtiendrez un nombre à virgule flottante dans la plage de [0,1]. Il suffit de multiplier le nombre à virgule flottante par la longueur de la plage (b-a + 1) et d'ajouter a, c'est-à-dire (int) ((double) rand () / 32767 * (b-a + 1) + a) , Équivalent à ce nombre à virgule flottante est la position proportionnelle dans la plage de [a, b]. Par exemple, pour générer un nombre aléatoire dans la plage [10000,60000]:

int main(){
	srand((unsigned)time(NULL));
	for(int i=0;i<10;i++){
		printf("%d ",(int)(round(1.0*rand()/RAND_MAX*50000+10000)));
	}
	return 0;
}
A publié 19 articles originaux · Likes2 · Visites 743

Je suppose que tu aimes

Origine blog.csdn.net/zan1763921822/article/details/104330271
conseillé
Classement