책 내용 질문하기
2017년 2회 정보처리기사 실기 1번문제
도서
2017 시나공 정보처리기사 실기(산업기사 포함) 특별개정판
페이지
0
조회수
74
작성일
2017-10-11
작성자
탈퇴*원
첨부파일

처음 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로 갔을 땐 또 다시 어디로 이동해야 하는지 궁금합니다..

답변
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가 됩니다.

이와 같은 원리로 적용되는 함수 호출 문제입니다.

오늘도 즐거운 하루 되세요.

  • *
    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가 됩니다.

    이와 같은 원리로 적용되는 함수 호출 문제입니다.

    오늘도 즐거운 하루 되세요.

· 5MB 이하의 zip, 문서, 이미지 파일만 가능합니다.
· 폭언, 욕설, 비방 등은 관리자에 의해 경고없이 삭제됩니다.