

정답
㉠ b = 7.5, ㉠이 없으면 출력은 20 2.5 와 20 2.5 50.0이다.
출제 의도
파이썬의 전역 변수와 지역 변수의 동작을 C 언어의 전역 변수와 함수 호출 구조로 대응시켜 이해하는지를 평가한다. 특히 함수 호출 시 전역 변수의 값 유지 여부와 초기화 코드의 필요성을 점검하는 문제이다.
풀이 과정
(가)의 파이썬 프로그램에서 변수 a는 전역 변수로 선언되어 있으며, 함수 calc 안에서 global a로 지정되어 값이 직접 변경된다. 반면 b는 함수 안에서 새로 정의된 지역 변수이므로, 함수 호출이 끝난 뒤 전역 변수 b의 값은 변하지 않는다.
따라서 실행 과정은 다음과 같다. 처음 전역 변수는 \(a=10\), \(b=7.5\)이다. 함수 호출 시 매개변수 \(p=10\)이 전달되고, 함수 내부에서 \(a=10+10=20\), \(b=10/4=2.5\)가 되어 첫 번째 출력은 20 2.5가 된다. 반환값은 \(20\times2.5=50.0\)이다.
함수 호출이 끝난 뒤 전역 변수 a는 20으로 바뀌어 있지만, 전역 변수 b는 여전히 7.5이므로 최종 출력은 20 7.5 50.0이 된다.
C 프로그램 (다)에서 동일한 출력을 얻으려면, 함수 calc 내부에서 전역 변수 b의 값이 바뀌지 않도록 함수 시작 시 다시 7.5로 설정해야 한다. 따라서 빈칸 ㉠에는
b = 7.5
가 들어가야 한다.
만약 (다)에서 ㉠이 없다면, 함수 calc 안에서 b는 \(p/4=2.5\)로 변경되고 전역 변수로 유지된다. 그러면 첫 출력은 20 2.5, 함수 종료 후 최종 출력은 20 2.5 50.0이 된다.
<풀이가 부정확할 수 있으니 반드시 교차검증 확인 바랍니다.>