책 내용 질문하기
261p 10번 문제
도서
2018 시나공 정보처리기사 실기(산업기사 포함)
페이지
261
조회수
46
작성일
2018-09-19
작성자
탈퇴*원
첨부파일

if (c==0)

printf("소수");

이 부분에서 배열의 위치가 0부터 시작하면 소수라고 하는데 왜 소수인지 모르겠어요

n = 20이 들어왔다고 치면 s[0] = 2 이고

n = 7이 들어가면 s[0] = 7 아닌가요?

그러면 둘다 s[0] 시작이고 c == 0인 상태 아닌가요?

답변
2018-09-20 11:23:22

안녕하세요. 길벗 수험서 운영팀입니다.

do while문의 시작과 끝이 어딘지 정확히 확인해 주세요.

(579쪽 해설 페이지로 설명드리겠습니다.)

첫번째는 while(1)로 2~16번을 반복 수행합니다.

즉, 입력으로 2미만의 수가 n에 저장되지 않으면 무한으로 돌게 되죠.

두번째는 do~while()문으로 5~10번을 반복 수행합니다.

입력받은 수 n을 약수로 계속 나눠 1이 될 때까지 반복하게 되죠.

세번째는 while()문으로 7번만을 반복 수행합니다.

입력받은 수 n의 약수를 찾는 반복문이네요.

회원님이 말씀하신 20이 입력되게 되면, 2, 2, 5로 나눠지면서 n이 1이 됩니다. 두번째 do~while()문을 3번 반복하는 거죠.

if(c==0)을 만나는 시점에서 c는 -1에서 3번 c++을 하였으므로, 2값을 가지게 됩니다.

7의 경우 약수가 7 본인 밖에 없으니 7로 한번 나눠지면서 n은 1이 됩니다. 두번째 do~while()문은 1번 수행하겠네요.

if(c==0)을 만나는 시점에서 c는 -1에서 c++을 1회 수행하였으므로, 0값을 가지게 되었으므로 "소수"를 출력합니다.

행복한 하루되세요.^^

  • *
    2018-09-20 11:23:22

    안녕하세요. 길벗 수험서 운영팀입니다.

    do while문의 시작과 끝이 어딘지 정확히 확인해 주세요.

    (579쪽 해설 페이지로 설명드리겠습니다.)

    첫번째는 while(1)로 2~16번을 반복 수행합니다.

    즉, 입력으로 2미만의 수가 n에 저장되지 않으면 무한으로 돌게 되죠.

    두번째는 do~while()문으로 5~10번을 반복 수행합니다.

    입력받은 수 n을 약수로 계속 나눠 1이 될 때까지 반복하게 되죠.

    세번째는 while()문으로 7번만을 반복 수행합니다.

    입력받은 수 n의 약수를 찾는 반복문이네요.

    회원님이 말씀하신 20이 입력되게 되면, 2, 2, 5로 나눠지면서 n이 1이 됩니다. 두번째 do~while()문을 3번 반복하는 거죠.

    if(c==0)을 만나는 시점에서 c는 -1에서 3번 c++을 하였으므로, 2값을 가지게 됩니다.

    7의 경우 약수가 7 본인 밖에 없으니 7로 한번 나눠지면서 n은 1이 됩니다. 두번째 do~while()문은 1번 수행하겠네요.

    if(c==0)을 만나는 시점에서 c는 -1에서 c++을 1회 수행하였으므로, 0값을 가지게 되었으므로 "소수"를 출력합니다.

    행복한 하루되세요.^^

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