[C언어] 동전 던지기 시뮬레이션 예제(랜덤함수, 난수, 함수)
C언어2018. 3. 28. 16:46
[C언어] 동전 던지기 시뮬레이션 예제(랜덤함수, 난수, 함수)
문제
"동전 던지기"를 시뮬레이트하는 프로그램을 작성한다. 프로그램이 동전을 100번 던지고 동전의 각면이 나타나는 횟수를 세어 출력한다.
난수를 발생하여서 0 또는 1을 반환하는 flip() 함수를 작성하여 사용하라.
프로그램이 "동전 던지기"를 올바르게 시뮬레이트하는 경우, 동전의 각 면이 대략 절반정도 나타난다.
함수를 사용하고 함수 안에서 랜덤 함수를 사용하는 예제 이다.
소스
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | #include <stdio.h> #include<time.h> #include<stdlib.h> // 함수를 선언한다. int flip(); int main() { int back = 0; int forward = 0; // 동일한 난수가 나오지 않도록 초기화 한다. srand(time(NULL)); // 100번 반복하여 앞면, 뒷면이 몇회 나오는지 확인하는 반복문 for(int i = 0; i < 100; i++) { // 난수가 1이면 앞면, 0이면 뒷면을 증가 if(flip()) { forward++; } else { back++; } } printf("앞면은 %d번 나왔으며 뒷면은 %d번 나왔습니다.\n", forward, back); return 0; } //0 또는 1 이 랜덤하게 나오는 함수. int flip() { // 0 또는 1이 나오는 난수 함수 return rand() % 2; } | cs |
요약
생각보다 간단한 문제이다.
여기서 가장 중요한 포인트는
14번째 줄이다. 이것을 삭제하고 돌려보면 매번 같은 횟수가 출력된다.
그 이유는 랜덤값을 계속 같은 값에서 가져오기 때문이다.
반드시 초기화 해주어야 매번 다른 횟수가 나온다.
더욱 자세한 이유는 srand를 찾아보길 바란다.
rand함수는 값을 나눈 나머지 값 중에 하나가 나온다.
위에는 2로 나눴기 대문에 나올수 있는 나머지의 값은 0 또는 1이다.
만약에 1~10중에 랜덤하게 수를 발생하기 위해선
return rand() % 10 + 1;
위와 같이 해주면 10으로 나눈 나머지는 0 ~ 9 이지만 여기에 1을 더해
1 ~ 10 중에 랜덤하게 수를 나타낼 수 있는 것이다.
'C언어' 카테고리의 다른 글
[C언어] while문으로 1부터 n까지 홀수의 합계 구하는 예제 (0) | 2018.03.28 |
---|---|
[C언어] 정수 입력 받아 많이 입력 받은 수와 빈도수 출력하기 (0) | 2018.03.22 |
[C언어] float 값 배열 초기화와 총합 평균 구하기 (0) | 2018.03.22 |
[C언어] 변수형의 개념 (0) | 2018.03.18 |
[C언어] C언어의 역사 (0) | 2018.03.14 |
댓글