전체적으로 어떤 순서로 실행하는건지 모르겠습니다.
int isprime(int number) 이게 어떻게 적용되는지하고,
return 0,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-10 10:27:44
안녕하세요.
교재 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가 됩니다.
이와 같은 원리로 적용되는 함수 호출 문제입니다.
오늘도 즐거운 하루 되세요.