본문 바로가기
C언어/기타(etc)

[C언어] 난수 생성 rand 함수 (구간 설정 방법)

by bigpicture 2022. 7. 28.
반응형

아래는 이번 글에서 다루는 내용입니다. 

 

랜덤함수 (rand)
난수 바뀌게 하기 (seed)
난수 자동으로 바뀌게 하기 (time)
난수 구간 설정


랜덤함수 (rand)

rand 함수는 난수를 생성하는 함수입니다. 0부터 RAND_MAX 사이의 난수를 생성합니다. RAND_MAX 는 컴퓨터 상황에 따라 다릅니다. 

rand 함수를 사용하려면 stdlib 헤더를 가져와야 합니다. 헤더를 정의하고 rand 함수를 사용해 봅시다. 

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

int main()
{

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

}


실행결과는 아래와 같습니다. 

 

 

코드를 다시 실행해봅시다. 

 

 

결과가 같습니다. 난수라면 매번 결과가 달라져야 하는데 결과가 매번 같습니다. 컴퓨터에서 생성하는 난수가 진짜 난수가 아니기 때문입니다. 난수표에 저장된 일련의 값들을 순서대로 출력합니다. 난수표는 프로그램을 켤 때 생성됩니다. 이 난수표 또한 프로그램을 켤 때의 시각을 이용하여 생성됩니다. 


난수 바뀌게 하기 (seed)

난수생성이 시작되는 특정 위치를 seed 라고 합니다. 위 결과는 seed 가 1인경우입니다. seed 를 바꿀 경우 다른 값이 출려됩니다. seed 는 srand 함수로 바꿉니다. seed 를 2로 바꿔봅시다. seed 가 시작되는 난수의 순서를 의미하지는 않습니다. seed를 2로 설정했다고 해서 난수표에 두번째 값을 의미하지는 않습니다. 

 

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

int main()
{

    srand(2);

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

}

 

 

 

seed 를 매번 임의로 바뀌게 할 수 있다면 난수를 구현할 수 있습니다. 어떻게 해야 할까요? 


난수 자동으로 바뀌게 하기 (time)

가장 대표적으로 사용하는 방법이 현재 시간을 seed로 사용하는 것입니다. 먼저 현재 시간을 가져와봅시다. time 함수를 사용하며, time 헤더를 가져와야 합니다. 

 

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

int main()
{

    printf("%ld \n",time(NULL));

}

 

 

이 값을 seed로 사용하면 됩니다. 아래와 같이 사용합니다. 매번 실행 때마다 숫자가 바뀝니다. 

 

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

int main()
{

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

}

난수 구간 설정

실행된 난수의 숫자가 너무 큽니다. 난수를 1~100 사이에서 추출하고 싶다면 어떻게 해야할까요. % 연산자를 이용하면 됩니다. 난수 결과에 % 100 을 추가하면 100으로 나눈 나머지가 계산됩니다. 100으로 나눈 나머지는 0~99까지의 숫자입니다. 이 결과에 1을 더하면 1~100까지의 구간이 설정됩니다. 아래와 같이 코딩합니다. 

 

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

int main()
{

    srand(time(NULL));
    
    printf("%d",rand()%100+1);

}
반응형

댓글