책 내용 질문하기
수식 계산과 관련하여..
도서
2024 시나공 정보처리기사 필기 기본서
페이지
33
조회수
369
작성일
2024-02-05
작성자
한*민
첨부파일

4과목, 5과목이 기술되어있는 2권 33페이지 2번 문제의 풀이과정에 오류가 있는 것 같습니다.

문제와 풀이과정은 다음과 같습니다. (정답에는 문제가 없습니다.)

a=3, b=4, c=5, d=6

 

d % b + ++a * c-- || c - --a >= 10

2 + 3 * 5 || c - 3 >= 10

2 + 15 || c - 3 >= 10

17 || 2 >= 10

17 || 0

1

 

여기서 연산자 우선순위를 적용해 --와 ++을 오른쪽부터 왼쪽으로 순차적으로 계산하는 모습을 볼 수 있습니다.

하지만 제가 알기로는 계산은 연산자 우선순위가 낮은 연산자부터 표현식을 나누어 트리와 같은 형태를 만들고, 해당 트리를 후위 순회하는 형태로 컴파일되는 것으로 알고 있습니다.

expr || expr  // 이 수식은 왼쪽 표현식, 오른쪽 표현식, or 연산이 순서대로 진행됩니다. 왼쪽 표현식이 계산되는 과정에서 오른쪽 표현식은 어떤 형태로든 관여할 수 없습니다.

예를 들어, or(a + b, --a + b++)라는 식으로 기술하면, 왼쪽의 'a + b' 부분이 가장 먼저 계산되고, 그 다음 오른쪽의 --a가 계산되는 형태입니다.

 

그걸 증명하기 위해, 식은 그대로 두고 각 변수의 값만 변경하여 c언어 프로그램을 작성했습니다.

 

#include

 

int main() {

int a = -10, b = 4, c = 0, d = 8;

int e = d % b + ++a * c-- || c - --a >= 10;

 

printf("%d", e);

}

 

교재의 생각이 맞다면 식은 다음과 같이 전개될 것입니다.

a = -10, b = 4, c = 0, d = 8 

 

d % b + ++a * c-- || c - --a >= 10

0 + (-10) * 0 || c - (-10) >= 10

0 + 0 || c - (-10) >= 10

0 || 10 >= 10

0 || 1

1

 

제 생각이 맞다면 식은 다음과 같이 전개될 것입니다.

a = -10, b = 4, c = 0, d = 8 

 

d % b + ++a * c-- || c - --a >= 10 

0 + ++a * c-- || c - --a >= 10

0 + (-9) * 0 || c - --a >= 10

0 || c - --a >= 10

0 || -1 - (-10) >= 10

0 || 9 >= 10

0 || 0

0

 

위의 함수가 작성된 파일을 gcc -o gongbu.exe gongbu.c 명령어로 cmd로 컴파일한 결과 0이 나왔습니다.

긴 글 읽어주셔서 감사합니다.

 

[간단한 요약]

a = 0

 

a && a++ + ++a

위 수식은 왼쪽이 먼저 계산되므로 0이 나와야 함

근데 책에서는 마치 ++이 먼저 계산되는것처럼 표현하여, 위 수식이 1이 나올거라고 오해할 소지가 있음

답변
2024-02-08 13:25:30

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

 

놓치고 있던 부분을 확실히 짚어주신 점 감사합니다.

 

해당 부분에 대해서는 추가로 자문을 얻어 내용을 보충함으로써 다른 수험생이 혼동을 겪지 않도록 수정토록 하겠습니다.

 

잘못된 내용으로 학습에 불편을 드려 사과드립니다.

 

행복한 하루되세요 :)

  • 관리자
    2024-02-08 13:25:30

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

     

    놓치고 있던 부분을 확실히 짚어주신 점 감사합니다.

     

    해당 부분에 대해서는 추가로 자문을 얻어 내용을 보충함으로써 다른 수험생이 혼동을 겪지 않도록 수정토록 하겠습니다.

     

    잘못된 내용으로 학습에 불편을 드려 사과드립니다.

     

    행복한 하루되세요 :)

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