아직 C 언어와 친숙하지 않다면, 씹어먹는 C 언어 강좌를 보는 것이 어떻까요?

rand

#
#include <stdlib.h> // C++ 에서는 <cstdlib>

int rand ( void );

난수를 생성한다.
0 부터 RAND_MAX 범위의 정수들로 의사 난수(pseudo-random) 를 생성한다. 의사 난수란 실질적인 난수가 아니라 컴퓨터 상에서 일련의 복잡한 연산에 의해 만들어지는 난수 같아 보이는 수들을 말한다.

rand 함수를 실행할 때 마다 특정한 알고리즘에 의해 연관성이 없어 보이는 수들이 생성된다. 이 알고리즘은 난순열을 생성하기 위해 초기값이 필요한데, srand 함수를 통해 이 초기값을 설정할 수 있다.

   인자
 

없음

   리턴값 
 

0 과 RAND_MAX 사이의 정수

   실행 예제
 

/*

숫자 맞추기
이 예제는
http://www.cplusplus.com/reference/clibrary/cstdlib/rand/
에서 가져왔습니다

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

int main ()
{
    int iSecret, iGuess;

    /* initialize random seed: */
    srand ( time(NULL) );

    /* generate secret number: */
    iSecret = rand() % 10 + 1;

    do {
        printf ("Guess the number (1 to 10): ");
        scanf ("%d",&iGuess);
        if (iSecret<iGuess) puts ("The secret number is lower");
        else if (iSecret>iGuess) puts ("The secret number is higher");
    } while (iSecret!=iGuess);

    puts ("Congratulations!");
    return 0;
}

실행 결과



위 예제에서 난수의 초기값으로 time() 함수의 리턴값 (1970 년 부터 현재 까지 지난 초 수) 를 사용하였다. 대부분의 경우 이 방법을 사용한다.

   연관된 함수
 

  • srand  :  난순열의 초기값을 설정한다.



Posted by Psi

댓글을 달아 주세요

  1. 배우고갑니당

    0 부터 RAND_MAX-1 까지의 법위 아닌가욤? 늘 많이 배우고 갑니다.

    2011.11.13 01:42 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • http://www.delorie.com/gnu/docs/glibc/libc_396.html

      를 보시면

      The value of this macro is an integer constant representing the largest value the rand function can return.

      즉 rand 함수가 리턴할 수 있는 가장 큰 정수값이라 나와있네요. 그래서 0 에서 RAND_MAX 까지가 맞는 것 같습니다

      2011.12.31 13:58 신고 [ ADDR : EDIT/ DEL ]