c言語rand()、srand()関数

1. rand()によって生成されたランダム番号:

  • rand():ランダムな数値を生成し、0からRAND_MAX(32767)までの疑似ランダム整数を返します。
  • rand()関数はランダムな数値を生成できますが、それは実際のランダムな数値ではなく、疑似ランダムな数値です。

いわゆる「疑似ランダム数」とは、偽のランダム数ではなく、特定のアルゴリズムによって得られた仮想状態のランダム数を指します。コンピューターは相対ランダム数しか生成できず、これらのランダム数はランダムで規則的です。 、その一部は特定の法律に従い、他の部分はいかなる法律にも従わない

  • rand()関数は、使用時にsrand(seed)関数を呼び出す必要があります。つまり、シードを提供する必要があります。srand()が使用されない場合、システムは自動的にシードに値、つまりsrand(1)を割り当てます。
  • rand()およびsrand()を呼び出すときに、<stdlib.h>ヘッダーファイルを導入する必要があります

2. rand()は、範囲内のランダムな数値を生成します

実際の開発では、一定の範囲内のランダムな数字が必要になることが多いので、残りの操作を行って加算操作を行うのが一般的な方法です。

  • 0から99までのランダムな数値を生成するための使用法は、次のとおりです。

int num = rand()%100;

  • 1〜100のランダムな数値を生成するための使用法は、次のとおりです。

int num = rand()%100 +1

  • ランダムな数80-120を生成したいかどうか考えてください

int num = rand()%41 +80

//用代码演示一下 
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<windows.h>

#include<stdlib.h>
int main(){
    
    
	for (int i = 0; i < 20; i++){
    
    
		int num = rand() % 41 + 80;
		printf("%d\t",num);
	}
	system("pause");
	return 0;
}
//运行结果为
80      97      100     94      102     101     119     82      105     108     86      99      114     97      119
        120     82      91      110     104     请按任意键继续. . .

3 srand()関数

  • srand()関数に必要なヘッダーファイルはまだ次のとおりです:<stdlib.h>
  • srand()関数のプロトタイプ:void srand(使用されたintシード);
  • srand()関数は、ランダム数ジェネレーターを初期化するためのものです。疑似乱数ジェネレータは、シードとして渡されたパラメータで初期化されます。

同じシードを使用すると、rand()関数の後に同じランダム番号が表示されます。上記のデフォルトのsrand(1)について説明しましたが、シードを初期化するために1を直接使用しても、取得されるランダム番号は疑似ランダムのままです。

  • 実際の開発では、時間をパラメータとして使用できます。播種の時間が毎回異なる限り、生成されるシードは異なり、最終的なランダム数も異なります。通常
    、<time.h>ヘッダーファイルのtime関数を使用します。秒単位の正確な時間をシードとして使用できます。
//我们在代码中实现随机数结果
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<windows.h>
#include<time.h>
#include<stdlib.h>
int main(){
    
    
	srand(time(0));
	for (int i = 0; i < 20; i++){
    
    
		int num = rand() % 41 + 80;
		printf("%d\t",num);
	}
	system("pause");
	return 0;
}
  • 最初の実行の結果
103     95      113     118     89      91      83      92      99      92      117     97      91      82      97
        91      83      89      91      109     请按任意键继续. . .
  • 2回目の実行の結果
81      80      85      84      114     96      110     107     102     83      83      109     113     96      90
        82      105     102     81      114     请按任意键继续. . .


おすすめ

転載: blog.csdn.net/supermanman_/article/details/109201869