책 내용 질문하기
95,96쪽 질문입니다
도서
2018 시나공 정보처리기사 실기(산업기사 포함)
페이지
95
조회수
53
작성일
2018-09-13
작성자
탈퇴*원
첨부파일

1.

95쪽 3번에서 *x<*y 경우에 *x가 *y보다 작을경우

반복문을 수행하는데 x가 10일때도 반복문을 수행하여

답이 x는 10이고 y가 55인가요 ?

X가 10이면 10<10이면 조건에 만족하지 않아 반복문이 실행 안되니

X는 10이고 y는 45아닌가요 ??

이게 헷갈리니

96쪽 5번문제에서도 i<exp 즉 i가 exp보다 작을경우면 반복문 실행인데

여기서는 i가 10이되면 조건에 맞지않아서 result 값이 변하지 않아

I의 9였던 Result 1024 가 반환됏네요

3번 5번 둘다 <10 인데 왜 3번은 10까지되고 10의 값 55를 출력하고

5번은 10까지했지만 9의값 1024가 됐는지요.

두 문제가 너무 헷갈리네요 ..

2. 96쪽 5번 해설 디버깅에서 왜 i가 0일때 result는 1 밑에 2가 있죠 ?

2는 왜 i의 0과 함께 가나요 ??

답변
2018-09-14 14:57:32

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

1. 95쪽 3번에서 *x<*y 경우에 *x가 *y보다 작을경우 반복문을 수행하는데 x가 10일때도 반복문을 수행하여 답이 x는 10이고 y가 55인가요 ?

X가 10이면 10<10이면 조건에 만족하지 않아 반복문이 실행 안되니 X는 10이고 y는 45아닌가요 ??

[답변]

아닙니다.

문제와 같이 *x = 0, *y = 10, *z = 0 일 때,

① while (*x < *y) {

② ++*x;

③ *z += *x;

④ }

위의 반복문을 수행하여 *x가 8이고 *z가 36일 때부터 설명 드리겠습니다.

①의 *x(8) < *y(10)가 참이므로, ②번으로 갑니다.

② *x(8)에 1이 더해져 9가 됩니다.

③ *z(36)에 *x(9)가 더해져 45가 됩니다.

④ ①번으로 돌아갑니다.

①의 *x(9) < *y(10)가 참이므로, ②번으로 갑니다.

② *x(9)에 1이 더해져 10이 됩니다.

③ *z(45)에 *x(10)가 더해져 55이 됩니다.

④ ①번으로 돌아갑니다.

①의 *x(10) < *y(10)이 거짓이므로 종료합니다.

이와 같은 순서로 반복문이 진행됩니다. *x가 9일 때 반복문으로 진입하여 ②를 수행하여 10이 된 *x를 *z에 더하기 때문에 10이 더해진 값이 출력되게 됩니다.

직접 디버깅표를 작성해보는 것이 해당 문제를 해결하는 과정에서 어떤 점이 잘못되었는지 정확히 파악하는데 도움을 줍니다.

------------------------------------------------------

이게 헷갈리니 96쪽 5번문제에서도 i

여기서는 i가 10이되면 조건에 맞지않아서 result 값이 변하지 않아 I의 9였던 Result 1024 가 반환됏네요

3번 5번 둘다 <10 인데 왜 3번은 10까지되고 10의 값 55를 출력하고 5번은 10까지했지만 9의값 1024가 됐는지요.

두 문제가 너무 헷갈리네요 ..

[답변]

해당 문제는 위의 답변과는 조금 다른 문제입니다.

for문의 반복횟수를 정확히 파악해야 합니다.

해당 문제에서 for문은 0부터 exp보다 작은 값까지 1씩 더하는 구문입니다.

for(i=0; i

exp가 10이니 즉, 0부터 9까지 반복하는 구문인거죠.

여기서 다시 한 번 생각해보셔야 하는 것은 1부터가 아닌 0부터 라는 것입니다.

1부터 9는 9번 반복을 반복하는 것이지만, 0부터 9는 0번째도 1회 반복하기 때문에 10회 반복을 하게 됩니다.

--------------------------------------------------------

2. 96쪽 5번 해설 디버깅에서 왜 i가 0일때 result는 1 밑에 2가 있죠 ?

2는 왜 i의 0과 함께 가나요 ??

[답변]

디버깅표를 보실 때 많은 분들이 실수하는 부분입니다.

일반적인 디버깅표는 변수가 변하는 값을 순서대로 적어서 기록합니다.

단순히 순서도 또는 코드에서 각 변수들의 값이 변할 때마다 값을 적는 것에 불과하기 때문에, 반복문의 한 회전 내에서 하나의 변수가 여러 번 변화하는 경우 특정 변수의 행만 길어지는 경우도 존재합니다.

즉, 해당 디버깅표의 경우 result에 1이 추가되어 있는 것은 문제의 3번째 줄에서 result에 초기값 1을 주고 시작했기 때문입니다.

행복한 하루되세요.^^

  • *
    2018-09-14 14:57:32

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

    1. 95쪽 3번에서 *x<*y 경우에 *x가 *y보다 작을경우 반복문을 수행하는데 x가 10일때도 반복문을 수행하여 답이 x는 10이고 y가 55인가요 ?

    X가 10이면 10<10이면 조건에 만족하지 않아 반복문이 실행 안되니 X는 10이고 y는 45아닌가요 ??

    [답변]

    아닙니다.

    문제와 같이 *x = 0, *y = 10, *z = 0 일 때,

    ① while (*x < *y) {

    ② ++*x;

    ③ *z += *x;

    ④ }

    위의 반복문을 수행하여 *x가 8이고 *z가 36일 때부터 설명 드리겠습니다.

    ①의 *x(8) < *y(10)가 참이므로, ②번으로 갑니다.

    ② *x(8)에 1이 더해져 9가 됩니다.

    ③ *z(36)에 *x(9)가 더해져 45가 됩니다.

    ④ ①번으로 돌아갑니다.

    ①의 *x(9) < *y(10)가 참이므로, ②번으로 갑니다.

    ② *x(9)에 1이 더해져 10이 됩니다.

    ③ *z(45)에 *x(10)가 더해져 55이 됩니다.

    ④ ①번으로 돌아갑니다.

    ①의 *x(10) < *y(10)이 거짓이므로 종료합니다.

    이와 같은 순서로 반복문이 진행됩니다. *x가 9일 때 반복문으로 진입하여 ②를 수행하여 10이 된 *x를 *z에 더하기 때문에 10이 더해진 값이 출력되게 됩니다.

    직접 디버깅표를 작성해보는 것이 해당 문제를 해결하는 과정에서 어떤 점이 잘못되었는지 정확히 파악하는데 도움을 줍니다.

    ------------------------------------------------------

    이게 헷갈리니 96쪽 5번문제에서도 i

    여기서는 i가 10이되면 조건에 맞지않아서 result 값이 변하지 않아 I의 9였던 Result 1024 가 반환됏네요

    3번 5번 둘다 <10 인데 왜 3번은 10까지되고 10의 값 55를 출력하고 5번은 10까지했지만 9의값 1024가 됐는지요.

    두 문제가 너무 헷갈리네요 ..

    [답변]

    해당 문제는 위의 답변과는 조금 다른 문제입니다.

    for문의 반복횟수를 정확히 파악해야 합니다.

    해당 문제에서 for문은 0부터 exp보다 작은 값까지 1씩 더하는 구문입니다.

    for(i=0; i

    exp가 10이니 즉, 0부터 9까지 반복하는 구문인거죠.

    여기서 다시 한 번 생각해보셔야 하는 것은 1부터가 아닌 0부터 라는 것입니다.

    1부터 9는 9번 반복을 반복하는 것이지만, 0부터 9는 0번째도 1회 반복하기 때문에 10회 반복을 하게 됩니다.

    --------------------------------------------------------

    2. 96쪽 5번 해설 디버깅에서 왜 i가 0일때 result는 1 밑에 2가 있죠 ?

    2는 왜 i의 0과 함께 가나요 ??

    [답변]

    디버깅표를 보실 때 많은 분들이 실수하는 부분입니다.

    일반적인 디버깅표는 변수가 변하는 값을 순서대로 적어서 기록합니다.

    단순히 순서도 또는 코드에서 각 변수들의 값이 변할 때마다 값을 적는 것에 불과하기 때문에, 반복문의 한 회전 내에서 하나의 변수가 여러 번 변화하는 경우 특정 변수의 행만 길어지는 경우도 존재합니다.

    즉, 해당 디버깅표의 경우 result에 1이 추가되어 있는 것은 문제의 3번째 줄에서 result에 초기값 1을 주고 시작했기 때문입니다.

    행복한 하루되세요.^^

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