rand(3)
#include <stdlib.h>
int rand(void);
rand(3)함수는 0 ~ RAND_MAX 범위의 자연수 데이터를 return하는 함수입니다. 이 범위의 데이터는 어떤 데이터를 얻을 지 알 수 없으므로 난수 발생함수라고도 합니다. 주사위 던지 듯이 무슨 데이터를 얻을 지 알 수 없다는 뜻입니다. RAND_MAX는 시스템 마다 다르겠지만, 대체로 int type의 양수 최대값과 같습니다.
rand(3)함수를 사용할 때에는 대부분 srand(3)함수를 사용하여 random값을 초기화하여 사용합니다. rand(3)의 return값은 srand(3)의 설정값에 영향을 받는 데, 예를들면 srand(0);을 호출한 후에 rand()함수를 호출하여 얻은 값의 순서는 정해져 있습니다. srand()호출하지 않고 rand()함수를 호출한다든지 하면 프로그램이 종료하고 다시 실행될 때에 항상 값의 순서로 실행하게 됩니다. 이를 방지하기 위해서 대체로 srand((int)time(NULL)); 처럼 호출하여 현재시간으로 초기화를 합니다. 그러면 현재 시간은 항상 다르기 때문에 항상 다른 random값을 얻을 수 있게 됩니다. srand()함수는 최초에 1회만 호출하면 됩니다.
파라미터
없음
RETURN
0 ~ RAND_MAX 범위의 정수
예제). 50명의 수학 점수를 radom으로 부여하고 그 결과를 출력하기
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
int main(int argc, char **argv)
{
int math[50];
int idx;
srand(time(NULL));
for(idx = 0; idx < 50; idx++) {
math[idx] = rand() % 101;
}
for(idx = 0; idx < 50; idx++) {
printf("%d 번째 - %d\n", idx + 1, math[idx]);
}
return 0;
}
예제). 주사위 놀이 처럼 1 ~ 6까지의 데이터만 얻으로면
int value;
value = rand() % 6 + 1;
예제). 0.0 ~ 1.0 사이의 실수 값을 얻어려면
double value;
value = (double)rand() / RAND_MAX;
예제). -5 ~ 5 사이의 정수 값을 얻어려면
int value;
value = rand() / 11 - 5;
see also : srand(3) - rand(3)함수를 초기화하는 함수
'C언어 header > stdlib.h' 카테고리의 다른 글
qsort(3) - 배열 데이터의 sorting (0) | 2019.12.12 |
---|---|
srand(3) - rand(3)함수를 초기화하는 함수 (0) | 2019.11.25 |
system(3) - 명령어를 실행하기 : fork(2) + execl(3) (0) | 2019.10.04 |
realpath(3) - 절대 path로 변환하는 함수 (0) | 2019.09.25 |
realloc(3) - 메모리의 크기를 재할당하기 (3) | 2019.09.25 |