난수를 사용하려면 2가지 헤더파일이 추가로 필요하다.
#include<time.h>
#iclude<stdlib.h>
위 두가지 헤더파일로 난수 생성이 가능하다.
time.h파일은 시간관련 함수를 모아 놓은 헤더파일이고, stdlib.h파일은 난수 생성과 문자열 변환 등을 수행하는 함수들을 모아 놓은 헤더파일입니다.
rand()함수로 난수를 뽑는 방법
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main() {
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
}
rand() 함수로 난수를 생성할 수 있으나, 값이 계속 동일하게 나옵니다.
난수를 생성하기 전에 난수를 초기화 해야 합니다. 난수를 초기화 하는 문장은 아래와 같습니다.
srand(time(NULL));
위 코드를 난수를 생성하기 전에 항상 추가해 주어야 실행할 때마다 다른 난수값을 얻을 수 있습니다.
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main() {
srand(time(NULL));
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
}
실행해보면 실행할 때마다 난수가 달라집니다.
그러면 본인이 원하는 난수의 범위를 정하려면 어떻게 해야 할까요?
나머지를 구하는 연산자를 사용하면 됩니다. 바로 % 입니다.
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main() {
srand(time(NULL));
for (int i = 1; i <= 10; i++) {
for (int j = 1; j <= 10; j++) {
printf("%d\n", rand() % i);
}
printf("\n");
}
}
위 코드는 2중 반복문입니다. 표로 만들어 정리해보면
반복횟수 | i값 | j값 | 출력 예상 결과 |
1 | 1 | 0~9 까지 10번 반복함 | rand() % 1 를 10번 출력 |
2 | 2 | 0~9 까지 10번 반복함 | rand() % 2 를 10번 출력 |
3 | 3 | 0~9 까지 10번 반복함 | rand() % 3 를 10번 출력 |
4 | 4 | 0~9 까지 10번 반복함 | rand() % 4 를 10번 출력 |
5 | 5 | 0~9 까지 10번 반복함 | rand() % 5 를 10번 출력 |
6 | 6 | 0~9 까지 10번 반복함 | rand() % 6 를 10번 출력 |
7 | 7 | 0~9 까지 10번 반복함 | rand() % 7 를 10번 출력 |
8 | 8 | 0~9 까지 10번 반복함 | rand() % 8 를 10번 출력 |
9 | 9 | 0~9 까지 10번 반복함 | rand() % 9 를 10번 출력 |
10 | 10 | 0~9 까지 10번 반복함 | rand() % 10 를 10번 출력 |
일단 첫 루프문에서 알 수 있죠. 모든 정수를 1로 나누면 나머지가 0이기 때문에 0만 출력 됩니다.
그리고 나누는 수가 n 이라고 할 때 나머지는 항상 n보다 작습니다.
어떤 정수를 3으로 나눈다고 할 때 나머지가 3이 나올 수는 없죠. 나머지는 항상 0이거나 1이거나 2이거나 셋중 하나일 겁니다.
난수 생성에서도 똑같이 적용 할 수 있습니다.
본인이 원하는 수의 범위가 있다면 해당 범위보다 하나씩 증가 시켜야 겠네요.
만약 1부터 6까지의 난수를 원한다면
rand() % 6+1 의 형태를 사용하면 되겠죠.
3부터 6까지(6포함) 난수를 원한다면 어떻게 하면 될까요?
먼저 난수를 생성하고, 더했을 때 3~6이 되게 만들면 됩니다.
rand() % 4 + 3 의 형태입니다.
'C언어 자습 > 혼자공부하는 C언어 (저자 서현우)' 카테고리의 다른 글
문자열과 포인터 버퍼,scanf의 이해 (0) | 2023.04.20 |
---|---|
getchar 함수와 putchar 함수, 버퍼의 개념 (0) | 2023.04.18 |
continue 와 break 그리고 switch (0) | 2023.04.11 |
C언어의 반복문 (0) | 2023.04.11 |
C언어 상수 (0) | 2023.04.10 |