티스토리 뷰



 난수란 무엇일까요?  

난수(random number)
특정한 배열 순서나 규칙을 가지지 않는 연속적인 임의의 수를 말합니다.
 

[알아두기] 난수(random number)란? 
    특정한 배열 순서나 규칙을 가지지 않는 연속적인 임의의 수
 



C언어에서는 시스템 라이브러리에서 난수를 만드는 함수를 제공하고 있어요.
(그러고 보니 난수 만들기를 지원하지 않는 언어는 없는 것 같네요)


시스템 라이브러리에서 제공하는
함수 rand()를 이용하면 난수를 만들 수 있는데

이 함수를 사용하기 위해서는 stdlib.h 파일을 포함시켜야 해요.


[알아두기] 난수를 만들기 위해서 필요한 것!
     헤더파일인 stdlib.h를 포함시켜 함수 rand()를 이용
     (stdlib.h에 함수 rand()의 함수 원형이 정의되어 있기 때문에 포함) 





 함수 rand()의 난수 생성 범위  

함수 rand()에 의해 생성되는 정수의 범위는 0부터 n까지!

함수 rand()에 의해 생성되는 정수는 [0, n] 까지 즉 0부터 n사이의 임의의 정수입니다.
(여기서 n은 시스템에 따라 다르기 때문에 n으로 표시했습니다.)

n은 일반적으로 헤더 파일 stdlib.h 파일에 기호 상수 RAND_MAX에 의해 정의됩니다.

[알아두기] 함수 rand()에 의해 생성되는 정수의 범위
함수 rand()에 의해 생성되는 정수의 범위는 [0, n]까지 즉, 0부터 n까지! 

 

그래서 stdlib.h파일을 열어보니
아래 보이는 그림과 같이 RAND_MAX라는 값이 보이는 것을 확인할 수 있었습니다


0x7fff라고 되어 있네요. 0x7fff를 10진수로 변환하면 32767이에요.

즉, 여기서는 [0, 32767]의 범위 내에서 생성이 된다는 거죠.

   



 함수 rand()를 이용한 예제 소스  

// ex1 : 
// 다섯 개의 난수를 화면에 출력하는 예제

#include<stdio.h>
#include<stdlib.h> // rand()를 사용하기 위해

#define MAX 5

int main(void)
{
    int index = 0 ;
    printf("이 예제는 rand()함수를 이용하여 5개의 난수를 생성하는 예제입니다.\n") ;

    
for ( index = 0 ; index < MAX ; index++ )
        printf( "%d ", rand() ) ;    // rand()로 난수 발생
    printf( "\n" ) ;

    return 0 ;
}

소스 파일을 아래에 첨부합니다. 다운로드 하셔서 실행해 보세요

rand_ex1.c



위의 예제를 실행하면 아래와 같은 화면이 나옵니다.
 

몇 번 실행하다보니 이상한 점을 발견할 수 있었어요.
몇 번을 실행해도 위와 같은 결과가 나온다는 것이지요.

   

그래서 위의 문제를 해결하기 위해
즉, 매번 난수를 다르게 발생시키기 위하여 시드(seed)값을 주는 방법을 사용할 거에요.

시드값이 다르면 함수 rand()에서 발생시키는 난수가 다릅니다

   


   

 srand()의 사용법  함수 srand()를 이용하여 시드값 주기

이 시드값을 주기 위해서
함수 srand()를 이용할거에요.

함수 time()으로 반환되는 값을 함수 srand()의 인자로 주면 고민 끝!

   

함수 time(NULL)1970년 1월 1일 이후의 경과된 시간을 초 단위로 반환하는 함수에요.
함수 time()을 사용하기 위해서는 헤더 파일 time.h를 포함시켜야 된다는 것 잊지 마세요.

난수에 매번 다른 시드를 주기 위해서 srand( time ( NULL ) ) 을 호출하면 되요.

그러면 더 길어지기 전에 최종 소스를 보도록 하겠습니다.

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

#define MAX 5

int main(void)
{
    int index = 0 ;

    srand(time(NULL));   // seed값 사용
    printf("이 예제는 rand()함수를 이용하여 1부터 10까지의 난수를 생성하는 예제입니다.\n") ;

    for ( index = 0 ; index < MAX ; index++ )
       printf( "%4d ", rand() ) ;
    printf( "\n" ) ;

    return 0 ;
}

소스 파일을 아래에 첨부합니다. 다운로드 하셔서 실행해 보세요

random_number.c


실행하면 아래 화면처럼 나옵니다.
PC마다 값이 다르겠죠? 하지만 중요한 것은!
실행할 때마다 값이 달라진다는 것이죠!


위의 결과는
웹에서 여러 프로그래밍 언어를 컴파일 해볼 수 있는 사이트( 
http://codepad.org ) 에서
실행한 결과입니다

한번 가서 실행해 보세요^^




  rand() 함수 사용예  0부터 n까지의 난수 만드는 법을 알아봅시다

0부터 n까지의 난수를 만들어 볼까요?

앞서 이야기한 것과 같이
함수 rand()에 의해 생성되는 정수는 [0, n] 까지 즉 0부터 n사이의 임의의 정수입니다.

 
0부터 (n-1) 까지의 난수를 발생시키려면 아래와 같이 사용합니다.

rand() % n 

예를 들어 볼게요

rand() % 100 ~ 9 사이의 난수가 나옵니다
(rand() % 10)+ 11 ~ 10 사이의 난수가 나옵니다

그러면 조금만 응용해 볼까요?

10 + (rand() % 10)  10 ~ 19사이의 난수가 나옵니다.





댓글