책 내용 질문하기
1권 123쪽 28번
도서
2019 시나공 정보처리기사 실기(산업기사포함)
페이지
123
조회수
164
작성일
2019-10-03
작성자
탈퇴*원
첨부파일

답이 이상한거같습니다

p *= i 를 하면 p = 1 * 0 이되서 p = 0이 되므로  뭘곱해도 0이 나오기 때문에 답은 0 이 아닌가요? 

답변
2019-10-04 10:45:02

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

 

switch문의 각 case에서 p의 초기값은 서로 다릅니다.

+-의 경우 초기값으로 0을

/*의 경우 초기값으로 1을 주고 있습니다.

 

때문에 p*=i의 경우 p = p*i가 되어 p= 1*i를 저장하게 되죠.

 

행복한 하루되세요 :)

  • 관리자
    2019-10-04 10:45:02

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

     

    switch문의 각 case에서 p의 초기값은 서로 다릅니다.

    +-의 경우 초기값으로 0을

    /*의 경우 초기값으로 1을 주고 있습니다.

     

    때문에 p*=i의 경우 p = p*i가 되어 p= 1*i를 저장하게 되죠.

     

    행복한 하루되세요 :)

  • 관리자
    2019-10-07 10:45:49

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

     

    먼저 for문의 기본식이 어떠한 순서대로 수행되는지 떠올려 보세요. 

     

    for(①; ②; ③) {

       ④;

    }

     

    위의 for문이 ④를 3회 반복한다고 가정했을 때, 순서는

    1회 : ①, ②(조건 참), ④

    2회 : ③, ②(조건 참), ④

    3회 : ③, ②(조건 참), ④

    종료 : ③, ②(조건 거짓) <탈출>

    입니다.

     

    이제 해당 for문을 보죠.

    for (int i = 0; i < 5; i++, p *= i); 

    여기서는 for문이 반복해야 하는 ④가 존재하지 않고, ③이 2개로 늘어났습니다. (이것을 ⑤라고 가정하죠)

     

    for(①; ②; ③, ⑤);

     

    이 형태로 볼 수 있죠. 순서는 다음과 같습니다.

    1회 : ①, ②(조건 참)

    2회 : ③, ⑤, ②(조건 참)

    3회 : ③, ⑤, ②(조건 참)

    4회 : ③, ⑤, ②(조건 참) 

    5회 : ③, ⑤, ②(조건 참) 

    종료 : ③, ⑤, ②(조건 거짓) <탈출>


    보시면 초기값(①)이 부여된 후(i=0), 실행할 코드가 없으니 2회로 넘어갈 때 증가식(③, ⑤)이 수행되는데 순서대로 수행하게 되면, i++(i=1), p *= i(p=1)이 됩니다. (③에서 i가 1이되면서 p=p*1이 됩니다.)
    이렇게 종료까지 총 5회 i가 1~5까지의 값이 곱으로 p에 누적되게 되죠.

    for문의 기본 수행 순서를 정확하게 알고 계시면, 3개의 식이 어떻게 변형되도 순서대로만 수행해주면 어렵지 않게 답을 도출할 수 있습니다.

    행복한 하루되세요 :)
  • *
    2019-10-04 13:28:42

    네 답변해주신 그내용은 이미 인지하고있습니다

    제가 설명은 잘못했는거같습니다

     

    28번 문제를 보시면 switch (c[3]) 이니깐 '*'인데 case 안에 없어서 default에 가서 실행을 하면되는데

    일단 첫번째 제가 어렵다고 생각한것은 처음보는 for구문 입니다. 증감식 뒤에 한개의 식이 더 있어서 생소했습니다.

     

    더군다나 p=1이라서 p *= i 를 하면 p=p*i -> p=1*0 이므로 p=0이라서 그뒤에 반복문을 이행해도 p가 0이기 떄문에 저는 프린트 출력을 해서 답을 0으로 적었는데 답이 틀려서 건의드렸습니. 일단 답지의 내용이 전혀이해가 안됩니다.... 

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