본문 바로가기

C & C++/C언어

[C] rand()함수/ srand()함수

반응형

 

  • rand() 함수

stdlib.h 헤더파일에 저장

#define RAND_MAX 0x7fff (=32767) 로 정의

즉 함수 rand()는 0 에서 32767 사이의 값을 가짐

#include <stdio.h>
#include <stdlib.h>

int main(){

	printf("%d", rand());

}

 

결과: 31176

여러번 실행하여도 또다시 31176이 출력됩니다.

첫번째 실행에서 나오는 값이 변경되지 않는 이유

rand()함수가 우리가 생각하는 무작위 개념이 아닌 컴퓨터가 인지할 수 있는 방식으로 값을 설정하기 때문입니다.

그래서 보통 같은 환경에서 rand()함수만을 사용하면 같은 값의 결과가 나옵니다.

 

 

  • srand() 함수

stdlib.h 헤더파일에 저장

변하지 않는 rand()함수의 값을 초기화하는 목적으로 사용

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(){
	int i; 

	srand(time(NULL));
	printf("%d\n", rand());
}

 

결과: 32230

srand()함수의 매개변수에 time()함수를 사용함으로 인해서 시간이 지남에 따라 값이 증가하는 것을 볼 수있습니다.

엄밀히 따지면 초기화라기보다 시간대비 값증가라는 개념이 옳습니다.

Max값에 도달하면 Min값으로 부터 다시 시작하여 증가합니다.

 

 

  • rand()/srand() 함수 사용방법                                                                       

0~99값 중에 무작위값을 산출: rand()%100          //32767에서 100으로 나눠 나눈 나머지값을 저장

1~100값 중에 무작위값을 산출: rand()%100+1   //32767에서 100으로 나눠 나눈 나머지값들에 1을 더하여 저장

0~100값 중에 무작위값을 산출: rand()%101        //32767에서 101으로 나눠 나눈 나머지값을 저장

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(){
	int i; 

	srand(time(NULL)); //초기화

	for(i=0;i<10;i++){ //10개의 값을 출력하기 위해 for문 사용
		printf("%d\n", rand()%100);  //0~99사이의 숫자 출력
	}
}

 

결과:

73

79

98

35

83

2

23

41

85

48

 

for문을 사용하여 값을 여러개 출력할 수 있습니다.

이렇게 사용할 경우 시간에 따라 값이 증가하는 것으로 보이던 rand()값이

연산하는 동안 시간차이 때문인지 srand()함수의 예시와는 달리 무작위처럼 크기범위에 차이가 발생합니다.

 

따라서 rand()함수를 사용할 경우 srand()함수와 for문 등을 이용하여 코딩하는것을 권장합니다.

 

반응형