当前位置:网站首页>Analyse du principe de génération de nombres aléatoires

Analyse du principe de génération de nombres aléatoires

2021-10-14 06:29:56 Ersansui

Les nombres aléatoires sont largement utilisés,Le tirage au sort dans la vie、La loterie,Et la réalisation de certains jeux dans la programmation,Il faut utiliser des nombres aléatoires.

Alors, dansCDans la langue,Comment générer des nombres aléatoires?

Fonction principale

En faitCDans la langue,On nous a donné une fonction de bibliothèque pour générer des nombres aléatoires.

rand

Comment cette fonction est - elle utilisée?

Nous pouvons consulter cette URL:

http://cplusplus.com/

Rechercher sur ce site:rand

Vous pouvez obtenir les instructions d'utilisation suivantes.

Insérer la description de l'image ici

Les élèves n'ont pas besoin de voir l'anglais pour se sentir mal de tête,En fait, il suffit de regarder les points clés.

De①On peut savoir que,Cette fonction est incluse dans <cstdlib> Dans ce fichier d'en - tête,Et ce fichier d'en - tête est en fait notre <stdlib.h>.

Donc,, Nous n'avons besoin que de références avant d'utiliser cette fonction <stdlib.h>* Ce fichier d'en - tête est suffisant .

De② On peut le savoir. , La valeur de retour de cette fonction est un 0ÀRAND_MAXUn entier de.

Je ne comprends pasRAND_MAXEt ça n'a pas d'importance, On peut le trouver à baidu. , Ou copier à VSDans le compilateur de,

Puis sélectionnez le bloc ,Clic droit de la souris,Aller à la définition,Pour voir.

(Attention!: Voir la définition ,Fichier d'en - tête de référence requis<stdlib.h>!!)

Ensuite, nous pouvons voir le code suivant :

#define RAND_MAX 0x7fff

0x7fff Est une représentation hexadécimale , Nous le convertissons en forme décimale et obtenons :32767

C'est - à - dire, Cette fonction renvoie un 0À32767 Entier de la plage .

Mais si vous pensez naïvement que chaque fois que vous générez des nombres aléatoires , Il suffit d'utiliser cette fonction , Alors tu es naïf. .Ha ha ha

En fait..., Ce qui donne un nombre pseudo - aléatoire , C'est le système qui l'a réglé en premier. . Tant que vous fermez le programme , Reconstruire la solution ,Essayez encore.,Tu l'as découvert., Chaque chiffre généré est le même .

srand

Alors, Nous voulons utiliser cette fonction pour générer des nombres aléatoires , Il faut d'abord l'utiliser. srand Cette fonction définit rand Point de départ de la génération de nombres aléatoires .

Via le site Web que vous venez de consulter ,Recherchesrand Vous pouvez voir les informations suivantes .
Insérer la description de l'image ici
De①②C'est bon., Il s'agit d'un fichier d'en - tête inclus <stdlib.h>Fonctions dans, Le paramètre formel de cette fonction est un entier ,Aucun type de retour.

De la boîte rouge ,Nous pouvons savoir, En passant les paramètres à cette fonction, vous pouvez définir rand Point de départ de la génération de nombres aléatoires pour la fonction .

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
    
	int n = 10;
	srand(10);
	//srand(20);
	while (n)
	{
    
		int tmp = rand();
		printf("%d\n", tmp);
		n--;
	}
	return 0;
}

Les élèves peuvent l'utiliser par eux - mêmes VSCompilateur, Copier le code ci - dessus , Et essayez par vous - même .

Quand vous mettezsrand(10)Etsrand(20) Après tout ce commentaire , Peu importe combien de fois votre programme est exécuté , Les résultats imprimés sont les mêmes ,

Mais quand vous mettezsrand(10)Ousrand(20) L'un d'eux n'est pas commenté , Conserver l'un d'eux ,

Exécuter à nouveau le Code ,Et vous verrez, Les résultats des deux impressions sont différents .

C'est - à - dire,Oui.rand Les nombres aléatoires sont utilisés srand Passe un paramètre aléatoire ,Pour définirrandPoint de départ.

Alors,Voilà le problème., J'ai besoin de nombres aléatoires. , J'ai dû passer un nombre aléatoire. , C'est un peu comme ça. “Poulet ou oeuf d'abord”C'est le problème..
Insérer la description de l'image ici

Alors, Qu'est - ce qui change tout le temps? ?

La réponse est l'heure. !

time

Voici un concept à introduire ——Horodatage.

Horodatage: Différence entre l'heure actuelle et l'heure de début de l'ordinateur ,En secondes.

L'heure de début de l'ordinateur est :1970-01-01 08:00:00

Avec le temps, L'horodatage est différent à chaque instant , Donc, tant qu'on passe l'horodatage comme paramètre à srandC'est bon.

Vous pouvez le savoir en recherchant :
Insérer la description de l'image ici
time Fonctions incluses dans le fichier d'en - tête <time.h>Moyenne,Le type de retour esttime_t,

Vous pouvez le savoir en interrogeant ,Retour àtime_tEn fait, c'estunsigned int,

Le paramètre passé est intVariable pointeur de type, En fait, nous avons juste besoin de passer NULLC'est tout.

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
    
	srand((unsigned int)time(NULL));
		int tmp = rand();
	return 0;
}

Testez le code ci - dessus pour voir , Chaque nombre généré est vraiment aléatoire !!

Ici, Le principe de la génération de nombres aléatoires est terminé. !!


Ajouter une phrase

Quand vous avez besoin de nombres aléatoires dans une plage , Est de modéliser le nombre aléatoire généré .

Par exemple, le code ci - dessus, Si vous voulez 1À10Nombre aléatoire de,C'est tout.

ret = (ret % 10+ 1;

La création n'est pas facile,J'espère que tout le monde peut faire quelque chose de bien、Commentaires、Avant、Attention à un dragon!

Votre soutien est ma plus grande motivation pour créer!!
Insérer la description de l'image ici

版权声明
本文为[Ersansui]所创,转载请带上原文链接,感谢
https://chowdera.com/2021/10/20211013211538550g.html

随机推荐