
정답a e f * + b c / - d + 가 올바른 후위 표기식입니다.
핵심 개념
전위 표기식(prefix)의 후위 표기식(postfix) 변환
전위 표기식은 연산자가 피연산자 앞에 오는 형태로, 왼쪽부터 읽으면서 '연산자 뒤에 오는 두 개의 완전한 식'을 그 연산자의 피연산자로 묶어 나가면 원래의 중위식을 복원할 수 있습니다. 복원한 뒤 각 부분식을 (피연산자1)(피연산자2)(연산자) 순서로 다시 늘어놓으면 후위 표기식이 됩니다. 주어진 식 + - + a * e f / b c d 를 풀면 가장 안쪽부터 * e f = (e*f), + a (e*f) = (a+e*f), / b c = (b/c), - (a+e*f) (b/c), 마지막으로 + (앞의 결과) d 가 되어 중위식은 ((a + e*f) - (b/c)) + d 입니다.
선지별 해설
①b - c / d 부분의 순서가 어긋나 있습니다. 원식에서는 / b c 가 하나의 부분식 (b/c)이므로 후위식에서 'b c /'가 붙어 나와야 하는데, 이 선지는 b 다음에 -가 먼저 나와 구조가 달라집니다.
②a e f * + b c / 까지는 맞지만 그다음이 'd + -' 로 되어 있습니다. 원식은 뺄셈을 먼저 하고 그 결과에 d를 더하므로 '- d +' 순서여야 하며, 이 선지는 (a+e*f) - ((b/c)+d) 를 뜻해 다른 식입니다.
③a e f * + 는 (a + e*f), b c / 는 (b/c)를 나타내고 이어지는 -로 두 값을 빼며, 마지막에 d +로 d를 더합니다. 복원한 중위식 ((a + e*f) - (b/c)) + d 와 정확히 일치하므로 정답입니다.
④a e + 가 먼저 나와 (a+e)를 만들지만, 원식의 + 는 a 와 (e*f)를 더하는 연산입니다. 곱셈 대상이 잘못 묶여 있어 다른 식이 됩니다.
⑤역시 a e + 로 시작해 (a+e)를 만들고 연산자 배치도 원식과 달라, 복원되는 중위식이 ((a+e)*f) 형태가 되어 주어진 전위식과 일치하지 않습니다.

정답func: 7, main: 3 이 출력됩니다.
핵심 개념
전역 변수와 지역 변수의 유효 범위, 후위 증가 연산자와 값에 의한 호출
C언어에서 함수 안에 같은 이름의 지역 변수가 선언되면 그 함수 블록 안에서는 지역 변수가 전역 변수를 가립니다. 따라서 main의 x는 전역 x(=5)와 무관한 별개의 변수(=2)이고, func 안에는 지역 x가 없으므로 func의 x++는 전역 x를 사용합니다. 또한 후위 증가 x++는 '현재 값을 먼저 사용하고 그 뒤에 1을 더하는' 연산이며, C는 값에 의한 호출(call by value)이므로 func에서 매개변수 a를 바꿔도 호출한 쪽 변수에는 영향이 없습니다.
선지별 해설
①func(x++)는 main의 x 값 2를 넘기고 main의 x는 3이 됩니다. func에서 a=2, x++는 전역 x(=5)를 사용하므로 a = 2+5 = 7이 되어 'func: 7'이 출력되고, 이후 main에서 지역 x인 3이 출력됩니다.
②func의 출력 7은 맞지만, main의 x는 func(x++) 호출 시 후위 증가로 이미 3이 되었으므로 2가 아닙니다.
③a += x++ 에서 x++는 증가 전 값인 5를 사용하므로 a는 2+5=7이며 8이 아닙니다. 전역 x가 6이 되는 것은 덧셈 이후의 일입니다.
④func 값이 8이라는 점도, main의 x가 2라는 점도 모두 틀렸습니다. 각각 7과 3이 맞습니다.
⑤func 값 8도 틀렸고, main의 x는 2에서 3으로 증가하므로 1이 될 수 없습니다.