예제2)
난수를 이용해 계산된 n의 값이 1일 때까지 반복하는 프로그램이다.
실행 결과를 확인하시오.
main() {
int n=0;
srand(time(NULL));
while (n!=1)
{
n=rand()%6+1;
printf("%d\n",n);
}
실행결과가 언젠가는 1이 나오긴 하겠지만
rand() 실행 결과가 말그대로 랜덤으로 나올 것 같은데
3
3
2
1
이라고 답이 나와있었습니다.
반드시 이 답이 나올 수가 있는 건가요?
아니면 그냥 예제로 이런식으로 된다는 걸 답변해두신 건지...궁금합니다.
[ 추가 문의사항 ]
다른 분이 문의하신 질문 중에 "예제 2번에서 rand() 함수를 왜 6으로 나누는건지 모르겠습니다." 라는 내용을 봤는데,
답변이 아래와 같았습니다.
"rand() 함수는 0부터 32767 사이의 난수를 발생시킵니다.
주사위를 굴리다고 하면 1~6까지의 수를 발생시켜야 하는데 위의 수에서 특정 개수의 수를 뽑아내는데 주로 사용하는 방법이 나머지를 사용하는 방법입니다.
(난수)%6을 하면 0~5의 나머지가 나오게 됩니다. 이 나머지에 +1을 하게 되면 주사위와 같이 1~6의 랜덤수가 나오게 되죠."
그런데 여기서 질문은...
예제의 문제는 난수를 이용해 계산된 n의 값이 1일때까지 반복하는 프로그램이라고 했는데
갑자기 주사위를 굴리는 예제가 왜 나온 건지 궁금합니다.
안녕하세요 길벗수험서 운영팀입니다.
예, 예제가 맞습니다.
하단의 n = rand()%6 + 1; 의 해설을 보시면, '발생되는 값은 실행할 때마다 달라진다.'라고 언급하고 있습니다.
아래 디버깅표의 예제는 단순히 실행될 경우 이러한 값이 나올 수 있다라고 표시한 것입니다.
주사위 굴리는 예제는 해당 예제를 주사위 문제로 착각하고 답변드린 것 같습니다.
srand, rand 함수가 사용된 문제는 지금까지 주사위 관련 문제로만 출제되었었습니다.
(18년도 10월 문제)
행복한 하루되세요 :)
-
관리자2019-05-21 14:39:56
안녕하세요 길벗수험서 운영팀입니다.
예, 예제가 맞습니다.
하단의 n = rand()%6 + 1; 의 해설을 보시면, '발생되는 값은 실행할 때마다 달라진다.'라고 언급하고 있습니다.
아래 디버깅표의 예제는 단순히 실행될 경우 이러한 값이 나올 수 있다라고 표시한 것입니다.
주사위 굴리는 예제는 해당 예제를 주사위 문제로 착각하고 답변드린 것 같습니다.
srand, rand 함수가 사용된 문제는 지금까지 주사위 관련 문제로만 출제되었었습니다.
(18년도 10월 문제)
행복한 하루되세요 :)