반응형

 

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)함수를 초기화하는 함수

 

반응형
블로그 이미지

자연&사람

행복한 개발자 programmer since 1995.

,