작은숲:위키노트/초보자를 위한 C 언어 강의/임의의 수 만들기
컴퓨터가 정말로 랜덤한 수를 만든다는 것은 그렇게 쉬운 일은 아니다. 그래서 의사 랜덤(pseudo-random)을 만들어낸다. 의사 랜덤이란 정말 랜덤은 아니지만, 그래도 랜덤한 수를 말한다.
C 언어에서는 랜덤한 수를 만들기 위해 rand() 함수를 사용한다. 이 rand() 함수는 stdlib.h에 선언되어 있다. rand() 함수는 0에서부터 stdlib.h에 정의되어 있는 RAND_MAX 사이의 수를 되돌려준다.
그리고 rand() 함수를 사용하기 위해서 먼저 해줘야 할 일이 있다. 그건 랜덤 시드(random seed) 값을 주는 것이다. 랜덤 시드는 랜덤한 수를 만들기 위한 씨앗(근본)이 된다. 이 랜덤 시드를 이용해서 의사 랜덤한 수를 그래도 최대한 랜덤한 수가 될 수 있도록 해준다. C 언어에서는 이 랜덤 시드 값을 설정하기 위해 srand() 함수를 제공한다. srand() 함수도 stdlib.h에 선언되어 있다. rand() 함수와 srand() 함수의 원형은 아래와 같다.
int rand( void );
void srand( unsigned int seed );일반적으로 랜덤 시드 값을 설정하기 위해 우리는 '현재 시각'을 사용한다. 현재 시각은 언제나 유일한 값이다. 따라서 rand() 함수로 만드는 랜덤한 값이 정말 랜덤할 수 있도록 해준다.
#include
#include
#include
void main( void )
{ int i;
srand((unsigned) time(NULL));
...
i = rand();
...
}위와 같이 srand() 함수의 매개 변수로 현재 시각을 넘겨서 rand() 함수가 반환하는 값이 가능한 랜덤한 값이 되도록 한다. srand() 함수는 프로그램 내에서 한번만 호출하면 된다. 처음 rand() 함수가 호출되면, srand() 함수에 의해 설정된 시드 값을 이용해 랜덤한 수를 만들어내고, 다음부터는 이전에 만든 랜덤 값을 시드로 사용한다.
그렇다면 1에서 10 사이의 랜덤한 수를 만들기 위해서는 어떻게 하면 될까? 나머지 연산자를 이용하면 된다. 아래의 예를 보도록 하자.
#include
#include
#include
void main( void )
{ int i, num;
srand((unsigned) time(NULL));
for (i = 0; i < 10; i++) {
num = (rand() % 10) + 1;
printf("%d", num);
}
}위 예에서 변수 num은 1에서 10 사이의 임의의 수를 가지게 된다. 왜 그럴까? 여기에서 time() 함수는 1970년 1월 1일 0시에서부터 몇 초가 지났는지 알려주는 함수이다. 이건 항상 유일한 값이다.
이처럼 C 언어에서 임의의 수를 만드는 것은 쉽다. 처음에 srand() 함수를 한번 호출해주고, 다음에는 rand() 함수를 사용하면 된다. 만약 1에서 100 사이의 수가 필요하다면 아래와 같이 해주면 된다.
int num;
srand((unsigned) time(NULL));
num = (rand() % 100) + 1;임의의 수를 만드는 방법은 다른 프로그래밍 언어에서도 대부분 비슷하다. 더 편한 방법을 제공하는 프로그래밍 언어들도 있다. PHP처럼 rand() 함수의 매개 변수로 만들 임의의 수의 최소값과 최대값을 넘겨줘서 나머지 연산을 하지 않아도 되도록 해주는 언어도 있다.