257페이지 문제7번에 대한 디버깅표(576페이지)를 보면
디버깅 첫번째줄에 isprime(2)의 cnt 값이 0이라고 나와있는데요
2는 소수이니까 isprime(2)의 cnt 값이 1이 되어야 하는게 아닌지요?
문제의 코드를 직접 c프로그램으로 돌려보니까
오류가 있는거같습니다.
#include
int isprime(int number)
{int i;
for(i=2;i if(number%i==0)
return 0;
return 1;
}
int main()
{int number = 3, cnt = 0,i;
for(i=2; i cnt = cnt + isprime(i);
printf("%d를 넘지 않는 소수는 %d개입니다.\n",number, cnt);
return 0;
}
코드를 쉽게 검증하기 위해서 number 값을 100이 아닌 3으로 변경을 해보니까
(3을 넘지 않는 소수의 개수는 2개잖아요?(2와, 3)
그래서 답은 2로 나와야 하는데
답이 1로 나오네요
어떤부분이 잘못되었는지 모르겠습니다.
제가 어떤부분을 잘못했는지요?
안녕하세요.
학습에 불편을 드려 죄송합니다.
number가 2일 때는 반복문이 수행되지 않으므로
1이 반환됩니다.
그러므로 cnt는 1이 됩니다.
수정된 내용에 의하면
cnt의 값은
i(main)가 2일 때 cnt는 1
i(main)가 3일 때 cnt는 2
i(main)가 4일 때 cnt는 2
i(main)가 5일 때 cnt는 3
i(main)가 6일 때 cnt는 3
이후
i(main)가 7일 때부터는 cnt의 값이 맞습니다.
오늘도 즐거운 하루 되세요.
-
*2018-03-21 09:49:58
안녕하세요.
학습에 불편을 드려 죄송합니다.
number가 2일 때는 반복문이 수행되지 않으므로
1이 반환됩니다.
그러므로 cnt는 1이 됩니다.
수정된 내용에 의하면
cnt의 값은
i(main)가 2일 때 cnt는 1
i(main)가 3일 때 cnt는 2
i(main)가 4일 때 cnt는 2
i(main)가 5일 때 cnt는 3
i(main)가 6일 때 cnt는 3
이후
i(main)가 7일 때부터는 cnt의 값이 맞습니다.
오늘도 즐거운 하루 되세요.