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

전체적으로 어떤 순서로 실행하는건지 모르겠습니다.

int isprime(int number) 이게 어떻게 적용되는지하고,

return 0,1 을 어떻게 적용시켜주는지 헷갈립니다.

풀이에는 디버깅이 있긴한데,

이 디버깅이 어떤 순서로 적용되는지 잘모르겠네요.

설명 부탁드려요.

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

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

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

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

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

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

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