처음 main 함수 for문에서 cnt=cnt+isprime(i)이라고 나오는데
처음 i가 가지고 있는 수인 2을 대입하면 cnt=cnt+isprime(2)일텐데,
isprime(2)가 무엇을 뜻하는지 모르겠어요..
그 후 for문을 모두 실행하여 소수 개수를 찾은 후 밑에 return0이 있으니까
int isprime(int number)함수에서 return 0자리로 이동하는 건가요?
그렇다면 그곳에 있는 for문을 다시 반복한후 return 1로 갔을 땐 또 다시 어디로 이동해야 하는지 궁금합니다..
안녕하세요.
교재 1권 80쪽의 함수 호출 부분을 먼저 확실히 학습하신 후 풀어보셔야 합니다.
number가 100일 때
for 반복문은 i가 2부터 100보다 작을 때까지 반복합니다.
먼저 i가 2일 때 반복문의 실행문을 처리합니다.
cnt = cnt + isprime(i);
에서 isprime(i)가 호출될 때 i가 2이므로 isprime(2)가 됩니다.
isprime 함수를 호출합니다.
isprime 함수에서의 for문에서
i가 2부터 i가 number보다 작을 때까지 반복합니다.
앞서 isprime 함수를 호출할 때 isprime(2)로 호출하였으므로 number는 2가 됩니다.
i가 2인데 2보다 작을 때까지 반복문을 반복하므로 반복문을 실행하지 못하고 빠져나옵니다.
그러므로 return 1;을 수행하여 1을 반환합니다.
main 함수로 돌아와
반환받는 1을 처음 isprime(i)를 호출했던 곳에 대치하면
cnt = cnt + isprime(i) 즉 cnt = cnt + 1이되어 cnt는 1이 됩니다.
이어서 for 반복문의 i++에 의해 i가 3이 된 후 다시 반복문의 실행문을 처리합니다.
cnt = cnt + isprime(i);
에서 isprime(i)가 호출될 때 i가 3이므로 isprime(3)이 됩니다.
isprime 함수를 호출합니다.
isprime 함수에서의 for문에서
i가 2부터 i가 number보다 작을 때까지 반복합니다.
앞서 isprime 함수를 호출할 때 isprime(3)로 호출하였으므로 number는 3이 됩니다.
i가 2인데 2보다 작을 때까지 반복문을 반복하므로 반복문의 실행문을 처리합니다.
if ( number % i == 0) 에서 number가 3이고 i가 2이므로 나머지가 0이 아니므로
if문의 실행문을 실행하지 못합니다.
이어서 for반복문의 i++에 의해 i가 3이 된 후 for문이 i
그러므로 return 1;을 수행하여 1을 반환합니다.
main 함수로 돌아와
반환받는 1을 처음 isprime(i)를 호출했던 곳에 대치하면
cnt = cnt + isprime(i) 즉 cnt = cnt + 1이되어 기존의 cnt 값 1에 1이 더해져 2가 됩니다.
이와 같은 원리로 적용되는 함수 호출 문제입니다.
오늘도 즐거운 하루 되세요.
-
*2017-10-12 09:03:05
안녕하세요.
교재 1권 80쪽의 함수 호출 부분을 먼저 확실히 학습하신 후 풀어보셔야 합니다.
number가 100일 때
for 반복문은 i가 2부터 100보다 작을 때까지 반복합니다.
먼저 i가 2일 때 반복문의 실행문을 처리합니다.
cnt = cnt + isprime(i);
에서 isprime(i)가 호출될 때 i가 2이므로 isprime(2)가 됩니다.
isprime 함수를 호출합니다.
isprime 함수에서의 for문에서
i가 2부터 i가 number보다 작을 때까지 반복합니다.
앞서 isprime 함수를 호출할 때 isprime(2)로 호출하였으므로 number는 2가 됩니다.
i가 2인데 2보다 작을 때까지 반복문을 반복하므로 반복문을 실행하지 못하고 빠져나옵니다.
그러므로 return 1;을 수행하여 1을 반환합니다.
main 함수로 돌아와
반환받는 1을 처음 isprime(i)를 호출했던 곳에 대치하면
cnt = cnt + isprime(i) 즉 cnt = cnt + 1이되어 cnt는 1이 됩니다.
이어서 for 반복문의 i++에 의해 i가 3이 된 후 다시 반복문의 실행문을 처리합니다.
cnt = cnt + isprime(i);
에서 isprime(i)가 호출될 때 i가 3이므로 isprime(3)이 됩니다.
isprime 함수를 호출합니다.
isprime 함수에서의 for문에서
i가 2부터 i가 number보다 작을 때까지 반복합니다.
앞서 isprime 함수를 호출할 때 isprime(3)로 호출하였으므로 number는 3이 됩니다.
i가 2인데 2보다 작을 때까지 반복문을 반복하므로 반복문의 실행문을 처리합니다.
if ( number % i == 0) 에서 number가 3이고 i가 2이므로 나머지가 0이 아니므로
if문의 실행문을 실행하지 못합니다.
이어서 for반복문의 i++에 의해 i가 3이 된 후 for문이 i
그러므로 return 1;을 수행하여 1을 반환합니다.
main 함수로 돌아와
반환받는 1을 처음 isprime(i)를 호출했던 곳에 대치하면
cnt = cnt + isprime(i) 즉 cnt = cnt + 1이되어 기존의 cnt 값 1에 1이 더해져 2가 됩니다.
이와 같은 원리로 적용되는 함수 호출 문제입니다.
오늘도 즐거운 하루 되세요.