안녕하세염~ 가끔 눈팅만 하다가는 cherry 라고 해염~
C언어 문제를 풀다가 막히는곳이 생겨서 저도 질문 올리고 가염~
오빠들 악플은 달지 말아쥬세염 ㅠ_ㅠ
문제는 어북온씨 2장 24번인데염, for 루프를 사용하여 rand()를 500번 호출하고,
rand()의 리턴 값이 median보다 크면 above_cnt 변수를 증가시키고,
작으면 below_cnt를 증가시키는 프로그램 짜는거에염~!
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int above_cnt = 0, below_cnt = 0, i;
double median = RAND_MAX / 2.0;
srand(time(NULL));
for (i = 0; i<500; i++)
{
if (rand() > median) above_cnt++;
else if (rand() < median) below_cnt++;
}
printf(\"%s%d%s%d\\n%s%d\\n\",
\"above_cnt = \", above_cnt, \", below_cnt = \", below_cnt,
\"difference = \", above_cnt - below_cnt);
return 0;
}
문제에선 above_cnt - below_cnt 값이 0 주위에서 진동해야 한다고 하는데,
계속 프로그램을 실행시켜도 값이 100 주위에서 진동해염 \'-\';
그런데 문제는, 위에서 굵은글씨로 된 부분을 else below_cnt++; 로 고치면
above_cnt - below_cnt 값이 0 주위에서 진동하게 된다는거에염 -ㅁ-
왜그럴까 궁금해서 int형 변수 temp=0를 선언하고 굵은글씨 아랫줄에
else if (rand() == median) temp++; 를 추가해봤지만 결과는 항상 temp=0.
rand()는 항상 int값을 리턴하고 median은 실수값을 가지니까 당연한 결과지만서도..
질문의 요지는,
① above_cnt - below_cnt 값이 원래 0 주위에서 진동하는 것인가?
② 소스에서 굵은글씨를 else below_cnt++; 로 고쳤을때 위의 현상이 나타난 이유
이것이 궁금해염~ 고수오빠들의 답변 부탁드려염~+_+
참, 환경은 윈xp, MS VC++ 6.0 이에염~~
rand()가 두번 불리네여
나도 듣보잡이긴 한데 횽 혹 rand() 천번 호출하고 있는거 아닌가? 그리고 rand() 함수가 어떤 값을 뱉는지 네이버에서 확인해볼 것
j = rand(); if (j > median) above_cnt++; else if (j < median) below_cnt++; 간지로 짜야 되는거 아닌가 싶어여
ㅇㅇ// rand()함수가 [0, RAND_MAX] 구간의 int값을 뱉어낸다고 알고있어염~
ㅇㅇ 내가 잠깐 문제를 잘못 봤네여 기둘
일단 ktkr횽 말대로 rand() 수를 줄여 그리고 else if 에서 else로 바꾸게 되면 조건이 <에서 <=로 바뀌는 거랑 똑같음
아하~! 이해 됐어염^^ ktkr님, ㅇㅇ님 감사해염~♡
rand() 두번 써서 그런 것 뿐
지금 컴파일 해 봤는데 중복때문에 오차가 2배로 생겨서 그런 거 맞는 듯 잘 돌아가네염
옵하들 ~~~~~~