목차
1. 랜덤이란?
무작위를 뜻한다. 정해진 규칙이 없다. 그냥 운에 따라 아무거나 선택되는 것이다.
2. 표준 라이브러리 이용
#include <stdlib.h>
C언어 프로그래밍에서 랜덤 코드를 작성하기 위해서는
stdlib.h 라이브러리를 이용해야 한다.
라이브러리란 자주 사용하는 함수들을 미리 작성하여 저장해둔 파일로,
맨 머리맡에 #include 코드를 추가해 헤더파일로 적어준다.
3. stadlib.h 라이브러리
stdlib.h에 속해있는 함수 중 rand(), srand() 함수를 이용하자.
srand : 전달받는 인자 기반으로, 난수 초기화
rand : 0~32767 중 하나의 난수 생성(무작위)
3-1. rand()
rand() 함수는 0~32767 사이의 하나의 수를 무작위로 생성한다.
rand() 함수를 사용할 때는 %(나머지) 연산자를 사용한다.
rand() % n : 0~n-1 범위의 난수 생성
(rand() % n) +1 : 1~n 범위의 난수 생성
원리는 '나머지'이다.
x = rand() % 3
라면, x에 해당하는 값은 0~ 2 사이의 한 수이다.
x= rand()% 8
라면, x에 해당하는 값은 0~7 사이의 한 수이다.
만약
x = rand() % 3 + 1
라면, x에 해당하는 값은 1~ 3 사이의 한 수이다.
x= rand()% 8 + 1
라면, x에 해당하는 값은 1~8 사이의 한 수이다.
그런데 여기서 문제가 있는데, 프로그램이 실행 시 항상 같은 난수가 생성된다.
진정한 의미의 난수가 생성되려면
프로그램 실행 시 매번 다른 난수가 생성되야 한다.
이때 사용하는 것이 srand() 함수이다.
3-2. seed()
시드는 난수 생성할 때 씨앗값이 된다.
시드값이 달라져야 이후 생성되는 모든 난수값이 달라진다.
시드값은 예측이 불가능하면서, 상황에 따라 변경되는 값이 좋다.
보통 '현재 시각'을 시드값으로 사용한다.
왜냐하면 프로그램이 실행되는 시간은 다를 가능성이 많기 때문이다.
3-3 time()
time()를 호출하여 1970.1.1부터 현재까지 경과된 시간을 초단위로 반환한다.
3-4 srand()
인수로 time(NULL)을 받아, rand()함수에 무작위 시드값을 준다.
이걸 써야 난수 발생기의 seed가 현재 시간으로 초기화 되어
매번 다른 난수가 생성된다.
따라서 rand함수를 쓰기 전, 아래의 코드를 먼저 적어준다.
#include <time.h>
srand(time(NULL));
4. <time.h> 라이브러리
srand() 함수가 진정한 난수를 생성하는 원리를 구체적으로 이야기해보자.
우선, srand()의 파라미터로 time(NULL) 매개변수가 전달된다.
4-1. time(NULL)
time(NULL)은 1970년 1월 1일 이후 경과된 시간을 초 단위로 반환하는 함수다.
이를 srand() 함수의 매개변수로 불러와야
1초 단위로 매번 다른 시드값을 생성해 rand 함수를 호출하는 것이다.
그러면 무작위 수를 생성할 수 있다.
'C언어 > 참고서: C언어 콘서트' 카테고리의 다른 글
C언어 24차시 for문, 주의점, 연습문제, 중첩 for 반복문 (0) | 2023.03.26 |
---|---|
C언어 23차시 do-while문, 연습문제 (0) | 2023.03.25 |
C언어 22차시 반복문 iteration, system함수, 루프제어변수 (0) | 2023.03.25 |
C언어 21차시 조건문 연습문제 4 (0) | 2023.03.24 |
C언어 20차시 조건문 연습문제 3 (0) | 2023.03.24 |