본문 바로가기
컴퓨터 프로그래밍/c 언어 (c programming language)

C 언어 - random

by JaeBaek 2020. 9. 27.

Random (Pixabay)

난수를 발생시키는 함수인 random 함수에 대해서 알아보도록 하겠습니다. 랜덤 함수는 <stdlib.h>의 헤더 파일에 속해 있습니다. 

 

■ rand

rand 함수 자료형 rand (void)

rand 함수는 0~32767 사이의 값의 난수를 출력합니다. ( 난수 범위를 지정하지 않았을 때 ) 

난수 범위를 지정하고 싶다면 rand()%난수범위 n 를 설정하면 0부터 n-1까지의 난수를 설정합니다.

난수 범위 설정 코드
0~n-1 rand() %n
1~n (rand() %n)+1
a의 배수 ((rand() % n)+1)*a

 

ex) rand 함수

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

int main(void){
	int i;
	for (i=0;i<10;i++){
		printf("%d\n",rand());
	}
	printf("\n\n");
	for (i=0;i<10;i++){
		printf("%d\n",rand()%100);
	}
}

※ result
41
18467
6334
26500
19169
15724
11478
29358
26962
24464


5
45
81
27
61
91
95
42
27
36

 

■ srand & time

 앞서 ex) rand 예제의 rand함수는 여러 번 재실행을 하다보면 난수가 일정한 값을 가지는 것을 확인할 수 있습니다. 계속해서 불규칙한 난수를 사용하기 위해서 srand와 time 함수를 이용합니다. time 함수는 인자값으로 NULL을 넘기면 1970년 1월 1일 00시 이후부터의 인자값을 현재까지 흐른 초의 수로 리턴해줍니다. 즉 다시말해서 시간은 계속해서 흐르기 때문에 time 함수를 이용해서 구한 초의 시간을 srand 함수에 이용해 rand함수로 호출하면 완전한 불규칙 난수가 생성이 되는 것입니다. 그리고 time 함수에 대한 헤더파일은 <time.h>입니다. 

 

srand void srand(unsigned int seed);
time  time_t time(time_t *timeptr)

time은 말 그대로 시간에 대한 정보로서 현재까지 흐른 시간을 초 단위로 반환합니다. 만약 현재까지 흐른 시간을 구하려면 timeptr에 NULL을 전달하고 값을 반환받을 수 있거나 아니면 현재까지 흐른 초 단위로 받을 수 있습니다. 

 

ex) 계속해서 난수 만들기

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

int main(void){
		int i;
		srand(time(NULL));
		for (i=1;i<4;i++){
			printf("srand : %d\n",rand()%10);
		}
}

※ result
srand : 6
srand : 8
srand : 4

 

댓글