C 언어의 rand() 함수

Rand Function C Language



C 언어에서는 열() 함수는 다음을 위해 사용됩니다. 의사 번호 생성기(PRNG) . rand() 함수에 의해 생성된 난수는 진정한 난수가 아닙니다. 주기적으로 반복되는 시퀀스지만 주기가 너무 커서 무시할 수 있습니다. NS 열() 함수는 다음 난수와 다음 새 시드를 계산하는 데 사용되는 시드 값을 기억하여 작동합니다. 이 글에서 우리는 어떻게 난수가 생성될 수 있는지에 대해 논의할 것입니다. 열() 기능. 시작하겠습니다!

헤더 파일:

stdlib.h







통사론:

int rand (무효)



반환 값:

이 함수는 계열의 다음 의사 난수를 반환합니다. 숫자 계열의 범위 값은 0에서 RAND_MAX 사이입니다. RAND_MAX는 다음에 정의된 매크로입니다. stdlib.h 값이 최대값인 헤더 파일로, rand() 함수로 반환할 수 있습니다. RAND_MAX의 값은 C 라이브러리에 따라 32767보다 크지만 32767보다 작지 않습니다.



//예제1.c

#포함하다
#포함하다

정수기본()
{

정수NS;

인쇄 ('10 난수 =>N');

~을위한(NS=0;NS<10;NS++)
{
인쇄 ('%NS ', ());
}

인쇄 ('N');
반품 0;
}


Example1.c에서 for 루프의 각 반복에서 rand() 함수를 호출하고 함수의 반환 값을 인쇄합니다. rand() 함수의 값 시퀀스는 프로그램을 실행할 때마다 동일합니다. 기본적으로 rand 함수의 시드는 1로 설정됩니다.

다음을 사용하여 rand 함수의 시드를 설정할 수 있습니다. srand() 기능. 시드는 한 번만 설정할 수 있으며 처음 설정하기 전에 열() 함수 호출.

srand() 함수:

헤더 파일:

stdlib.h

통사론:

int srand (부호 없는 int 시드)

인수:

이 함수는 1개의 인수를 취합니다

씨앗: 새로운 일련의 의사 난수에 대한 시드로 사용되는 정수 값입니다.

반환 값:

없음

//예제2.c

#포함하다
#포함하다
#포함하다

정수기본()
{

정수NS;

샌드 ( 시각 (0));

인쇄 ('10 난수 =>N');

~을위한(NS=0;NS<10;NS++)
{
인쇄 ('%NS ', ());
}

인쇄 ('N');
반품 0;
}


Example2.c에서 srand() 함수를 사용하여 rand() 함수에 의해 생성된 난수 시퀀스의 초기 시드를 설정했습니다. 프로그램이 실행될 때마다 다른 시퀀스가 ​​생성됩니다. srand()에서 time(0) 함수( 시간.h 헤더 파일)이 시드로 사용됩니다. 이 time(0) 함수는 epoch(00:00:00, 1970년 1월 1일) 이후 경과된 시간(초)을 반환합니다. 동일한 초에 프로그램을 실행하면 여전히 동일한 시퀀스가 ​​생성될 수 있습니다.

//예제3.c

#포함하다
#포함하다
#포함하다

정수기본()
{

정수NS;

샌드 ( 시각 (0));

인쇄 ('1에서 10 사이의 난수 10개=>N');

~을위한(NS=0;NS<10;NS++)
{
인쇄 ('%NS ',( () %10) + 1);
}

인쇄 ('N');
반품 0;
}


Example3.c에서 1과 10 사이에서 난수가 생성되는 방법을 보았습니다.

//예제4.c

#포함하다
#포함하다
#포함하다

정수기본()
{

정수NS,최대,;

인쇄 ('최소값 입력 => ');
스캔 ('%NS', &);
인쇄 ('최대값 입력 => ');
스캔 ('%NS', &최대);

만약(>최대)
{
인쇄 ('최소값이 최대값보다 큽니다.N');
반품 0;
}

샌드 ( 시각 (0));


인쇄 ('%d와 %d 사이의 난수=> 10개N',,최대);

~을위한(NS=0;NS<10;NS++)
{
인쇄 ('%NS ',( () % (최대-+1)) +);
}

인쇄 ('N');
반품 0;
}


Example4.c에서는 사용자의 범위를 가져와 이 범위 내에서 임의의 숫자를 생성했습니다. 공식은 다음과 같습니다. 랜드()%(최대 - 최소 +1)) + 최소

//예제5.c

#포함하다
#포함하다
#포함하다

정수기본()
{

정수NS;

샌드 ( 시각 (0));

인쇄 ('0.0과 1.0 사이의 난수 10개=>N');

~을위한(NS=0;NS<10;NS++)
{
인쇄 ('%NS ',((뜨다) () /RAND_MAX));
}

인쇄 ('N');
반품 0;
}


Example5.c에서 float 0.0과 1.0 사이의 난수를 생성하는 방법을 확인했습니다. 공식은 다음과 같습니다. (float)랜드() /RAND_MAX)

//예제6.c

#포함하다
#포함하다
#포함하다

정수기본()
{

정수NS;
뜨다최대,;

인쇄 ('최소값 입력 => ');
스캔 ('%NS', &);
인쇄 ('최대값 입력 => ');
스캔 ('%NS', &최대);

만약(>최대)
{
인쇄 ('최소값이 최대값보다 큽니다.N');
반품 0;
}

샌드 ( 시각 (0));

인쇄 ('%f와 %f 사이의 난수 10개 =>N',,최대);

~을위한(NS=0;NS<10;NS++)
{
인쇄 ('%NS ',+ ((뜨다) () /(RAND_MAX/(최대-))));
}

인쇄 ('N');
반품 0;
}


Example6.c에서는 사용자의 범위를 가져와 이 범위(둘 다 포함) 내에서 임의의 숫자를 생성했습니다. 공식은 다음과 같습니다. min + ((float)rand() /(RAND_MAX/(최대 – 최소)))

결론:

이 기사에서는 다음을 사용하여 난수를 생성하는 방법을 배웠습니다. 열() 그리고 srand() 기능. rand 함수에 의해 생성된 난수의 품질에 대한 보장은 없지만 일상적인 사용에는 충분합니다.