다음 C 프로그램의 실행 결과로 옳은 것은?#include <st… | [계리직 컴퓨터일반] 21년 1회차 기출문제 상세 페이지
1[계리직 컴퓨터일반] 21년 1회차
다음 C 프로그램의 실행 결과로 옳은 것은?#include <stdio.h>
void main(void) {
int a = 1, b = 2, c = 3;
{
int b = 4, c = 5;
a = b;
{
int c;
c = b;
}
printf("%d %d %d\n", a, b, c);
}
}
1
1 2 3
2
1 4 5
3
4 2 3
4
4 4 5
해설
실행 결과는 4 4 5이다.
C에서 블록 안에 같은 이름의 변수를 선언하면 그 블록에서는 바깥 변수가 가려진다(변수의 유효 범위). a는 다시 선언되지 않았으므로 바깥 a가 그대로 쓰인다.
두 번째 블록에서 b=4, c=5가 새로 선언되고 a = b로 바깥 a가 4가 된다. 가장 안쪽 블록의 c = b는 새로 선언한 c에만 대입되고 블록이 끝나면 사라지므로, printf 시점의 값은 a=4, b=4, c=5이다.
- 1 2 3: 바깥 블록의 초깃값으로, 내부 블록의 선언과 a = b 대입을 반영하지 않았다.
- 1 4 5: a = b가 바깥 a를 바꾼다는 점을 놓쳤다.
- 4 2 3: printf가 내부 블록 안에 있어 b·c는 내부에서 선언한 4·5가 출력된다.
오류나 개정된 내용이 보이면 알려주세요