2009학년도 대학수학능력평가

직업탐구영역 프로그래밍(C언어)과목 해설지

[정답]

문 항	1	2	3	4	5	6	7	8	9	10
정 답	①	④	②	③	⑤	⑤	④	⑤	①	③
문 항	11	12	13	14	15	16	17	18	19	20
정 답	①	③	①	④	④	③	②	⑤	③	②

[해설]

1. [정 답] ①

[해 설]

프로그래밍 언어 번역기의 종류로는 어셈블러, 컴파일러, 인터프리터가 있다.

어셈블러는 저급언어인 어셈블리어로 작성된 프로그램을 번역할 때 사용하는 언어 번역기이고, 컴파일러는 고급 언어로 작성된 프로그램을 번역할 때 사용하는 언어 번역기인데 목적 프로그램을 생성한다.

인터프리터도 고급언어로 작성된 프로그램을 번역할 때 사용하는 것은 컴파일러와 같지만 원시 프로그램을 한꺼번에 번역하는 것이 아니라 명령문 단위로 하나씩 번역하여 바로 실행한다.

2. [정 답] ④

[해 설]

주차시간이 총 1시간 30분이고, 주차요금이 10분당 500원이므로 총 주차요금은 4500원이다. 그런데 교통 카드 잔액이 3000원밖에 없으므로 교통 카드를 충전한다. 따라서 자동차 A가 출구를 통과했을 때는 13000-4500=8500(원)이 남아 있다.

3. [정 답] ②

[해 설]

주어진 퀴즈를 보면 “알고리즘은 문제 해결 과정을 기술한 것이다.”는 참이고, “순서도와 의사코드는 알고리즘을 표현하는 방법의 일종이다.”도 참이다. 그러나 “어떤 문제든지 결과를 구하기 위한 알고리즘은 한 가지이다.”는 거짓이다. 어떤 문제든지 결과를 구하기 위한 알고리즘은 여러 가지가 있을 수 있다. 마지막 퀴즈 “프로그램은 문제 해결을 위한 명령문들을 순차적으로 나열한 것이다.”는 참이다. 따라서 변수 A, C, D는 참이고, 변수 B만 거짓이다.

철수의 진행을 A가 참이므로 왼쪽, B+D도 참이므로 왼쪽, A․C는 거짓이므로 오른쪽으로 진행한다. 따라서 출구는 ㄴ이다.

4. [정 답] ③

[해 설]

주어진 프로그램 f[a]=d[a]/10;에서 d[a]의 요소값이 35, 54, 59, 61, 47이므로 10으로 나눈 값도 3, 5, 5, 6, 4가 된다. 여기서 조심할 것은 d[a]/10의 결과값이 int형 된다는 것이다. 아래 두 번째 출력을 나타내는 for문에서 제어변수 b는 0부터 f[a]-1이므로 다음과 같이 반복 출력된다.

바깥쪽 제어 변수 a	안쪽 제어변수 b값의 변화	출력되는 ■의 개수
0	0, 1, 2	3
1	0, 1, 2, 3, 4	5
2	0, 1, 2, 3, 4	5
3	0, 1, 2, 3, 4, 5	6
4	0, 1, 2, 3	4

5. [정 답] ⑤

[해 설]

밑줄 친 조건을 보면 “a가 80의 배수가 될 때마다”이므로 a가 80의 배수인가를 판단하면 된다.

프로그램에서 배수를 판단할 때는 주어진 수를 구하고자하는 배수로 나누어 나머지가 0이 되면 그 수의 배수로 판단한다. 이때 나머지를 구하는 연산자로는 나머지 연산자 ‘%’를 사용한다. 그러므로 조건을 수식으로 표현하면 "a % 80 == 0"이 된다.

6. [정 답] ⑤

[해 설]

주어진 배열을 보면 철수에 해당되는 0행은 0, 1, 1, 1이므로 철수 본인에 해당되는 요소값만 0이고 나머지는 모두 1이므로 친구 관계이다. 마찬가지로 영희에 행당되는 1행도 1, 0, 1, 1이므로 영희 본인에 해당되는 요소값만 0이고 나머지는 모두 1이므로 친구 관계이다. 그런데 기영에 해당되는 2행을 보면 1, 1, 0, 0이므로 철수, 영희만 친구 관계이다. 순희에 해당되는 3행을 보면 1, 1, 0, 0이므로 철수, 영희만 친구 관계이다.

7. [정 답] ④

[해 설]

다중 for문의 제어변수에 따른 누적값을 차례대로 구해 보면 다음과 같다.

바깥쪽 제어 변수 k	안쪽 제어변수 m	누적되는 a[k]	변수 s
0	1, 2	2, 2	2, 4
1	1	1	5
2	1, 2, 3	3, 3, 3	8 ,11, 14

8. [정 답] ⑤

[해 설]

주어진 OX 퀴즈를 보면 A에 해당되는 “기계어는 모든 컴퓨터 기종 간에 호환된다.” 거짓이다. 기계어는 하드웨어 특성에 따라 달라지므로 기종 간에 호환되지 않는다. B에 해당되는 퀴즈를 보면 “JAVA와 C++는 객체 지향 언어에 속한다.”는 참이다. 또한 C에 해당되는 퀴즈를 “포트란, 파스칼, C 언어는 절차 중심 언어에 속한다.”도 참이다. 따라서 주어진 순서도에서 S=0, S=S+2, S=S+4가 수행되므로 출력되는 S는 6이 된다.

9. [정 답] ①

[해 설]

주어진 프로그램은 이진 검색 프로그램의 일부이다.

주어진 프로그램에서 변수의 변화 과정을 보면 다음과 같다.

d=(a+b)/2 → (1+10)/2=5

while(d!=m)의 조건식에서 m=8이므로 조건을 만족하므로 반복문 수행

if문의 조건식 d>m이 거짓이므로

a=d+1=6

cnt=cnt+1=2

d=(a+b)/2=(6+10)/2=8

다시 반복 조건을 비교하면 d=m이므로 반복문을 빠져 나온다.

따라서 출력되는 cnt값은 2이다.

10. [정 답] ③

[해 설]

소수를 구하는 알고리즘 중의 하나이다.

2가 쓰인 깃발에 표지판을 놓고 2의 배수가 쓰인 깃발을 제거하므로 4, 6, 8, 10이 쓰인 깃발을 제거한다.

다음 수인 3에 표지판을 놓고 3의 배수가 쓰인 깃발 9를 제거한다.

4는 제거되었으므로 5에 표지판, 6은 제거되었으므로 7에 표지판, 그리고 8, 9, 10은 모두 제거되었으므로 남아 있는 깃발은 2, 3, 5, 7이 된다.

11. [정 답] ①

[해 설]

주어진 프로그램은 배열의 첨자를 이용하여 수의 삼각형을 만드는 것으로

a[k][m]=a[k-1][m-1]+a[k-1][m]에서 현재 요소값은 앞행 앞열의 요소값에 앞행 현재열의 요소값을 더한 값이 된다.

12. [정 답] ③

[해 설]

주어진 그림 (A)와 (B)에서 아이디는 입력된 상태이고, 아이디가 확인되어 비밀번호를 확인하는 과정에서 비밀번호는 입력되지 않은 오류 메시지가 나온 상태이다. 따라서 첫 번째 비교판단 조건인 “등록된 아이디인가?”에서 “예”를 선택하고 “비밀번호가 맞는가?”에서 “아니오” 그리고 “비밀번호를 입력하였는가?”에서 “아니오”를 선택한 상태이다. 따라서 출력되는 것은 (다)이다.

13. [정 답] ①

[해 설]

수행 평가 과제에서 선수 이름은 문자형, 등수는 정수형, 달리기 기록은 실수형이다.

14. [정 답] ④

[해 설]

주어진 프로그램은 순위를 구하는 프로그램으로 입력된 값이 어느 순위에 해당되는가를 구하는 것으로 입력된 값 70과 기존에 저장된 값을 비교하여 기존에 저장된 값이 크면 순위를 저장하는 변수 r을 1씩 증가시킨 다음 배열 rk[4]에 저장한 후 출력한다.

15. [정 답] ④

[해 설]

날짜를 입력받아 5로 나눈 나머지가 0이면 A 식단을, 1이면 B 식단을, 2이면 C 식단을, 3이면 D 식단을, 그 나머지는 D 식단을 출력한다. 따라서 7이면 5로 나눈 나머지가 2이므로 C 식단이 제공된다. 그리고 월요일은 항상 동일한 식단이 제공되지 않는다. 왜냐하면 7로 나눈 나머지가 아니라 5로 나눈 나머지이므로 월요일이 항상 같은 나머지 값이 나오지 않는다. 그러나 매월 1일은 나머지가 항상 1이므로 A 식단이 제공된다.

16. [정 답] ③

[해 설]

주어진 함수 fun_P는 반환값이 없으며, 함수 fun_G는 반환값이 있으며, 그 반환값은 int형으므로 정수형이다. 또한 변수 Fr, Re는 지역변수가 아니라 전역변수이다.

17. [정 답] ②

[해 설]

프로그램의 실행과정을 보면 다음과 같다.

Fr=0, Re=0,

① fun_P(7) 호출에서

k[0]=7, Re=1

② fun_P(5) 호출에서

k[1]=5, Re=2

③ a=fun_G( )에서

b=k[Fr]=k[0]이므로 b=7, Fr=1

7이 반환되므로 a=7

④ fun_P(a) 호출에서 a=7

k[2]=7, Re=3

⑤ fun_P(3) 호출에서

k[3]=3, Re=4

⑥ a=1

⑦ 반복문에서 a가 1, 2, 3일 때 출력되므로

k[1], k[2], k[3]의 요소값이 출력되므로 5, 7 ,3이 출력된다.

18. [정 답] ⑤

[해 설]

모터가 동작되는 1의 논리식을 구하는 것이다.

주어진 조건에서 버튼 A를 누르면 모터 Y가 회전하고, 또 모터 Y가 회전 상태인 경우에는 A에 관계없이 계속 회전한다. 따라서 이 부분의 구동모터 Y의 회전 논리식은 A||Y가 된다. 또한 버튼 B를 누르는 순간 구동모터 Y가 정지하므로 회전하기 위해서는 !B가 되어야 한다. 그리고 버튼 A와 B가 동시에 눌려진 경우에는 구동모터 Y가 정지되므로 반대로 회전하기 위해서는 버튼 B가 누르지 말아야 한다. 따라서 이 모든 조건을 조합하면 Y=(A||Y) && !B이다.

19. [정 답] ③

[해 설]

3행 3열 배열에서 a=2, b=1이므로 c[a][b]은 c[2][1]에 k값 1이 처음 들어간다.

	0	1	2
0
1
2		1

그런 후 k값이 3의 배수이면 행의 첨자 a를 1 감소하여 대입하고, k값이 3의 배수가 아니면 행의 첨자 a를 1, 열의 첨자 b를 1 증가한 후 그 값을 3으로 나눈 나머지가 값으로 배열의 위치를 정한다. 이를 정리하면 다음과 같이 요소값이 들어갈 위치가 정해진다.

	0	1	2
0		다음 위치
1		현위치		현위치의 요소값이 3의 배수이면 다음 위치는 행의 첨자를 하나 감소 시킨 위치
2

	0	1	2
0
1		현위치
2			다음 위치	현위치의 요소값이 3의 배수가 아니면 다음 위치는 행과 열의 첨자를 하나 증가시킨 위치

이때 행과 열의 첨자가 3이 되면 3으로 나눈 나머지 값이므로 0이 된다.

이 방법에 의하면 다음 순으로 입력된다.

	0	1	2
0
1
2		1

	0	1	2
0			2
1
2		1
			2	위로 이동

	0	1	2
0			2
1	3			3
2		1
			2	앞으로 이동

	0	1	2
0	4		2	3의 배수이므로 행첨자 1 감소
1	3
2		1
			2

	0	1	2
0	4		2
1	3	5	7	3의 배수이므로 행첨자 1 감소
2		1	6
			2

	0	1	2
0	4		2
1	3	5	7
2	8	1	6	앞으로 이동
			2

	0	1	2
0	4	9	2	위로 이동
1	3	5	7
2	8	1	6
			2

이 결과를 보면 행과 열, 대각선의 합이 모두 15로 같다. 이와 같은 형태를 마방진이라 하는데 바로 이 프로그램은 마방진을 만드는 프로그램의 하나이다.

20. [정 답] ②

[해 설]

주어진 프로그램에서 if문의 조건 “c[a]>=65 && c[a]<=90)"은 영문자 대문자에 해당되므로 변수 m은 영문자 대문자의 개수를 저장하는 변수이다. else 문 다음에 나오는 변수 n은 영문자 소문자의 개수를 저장하는 변수이다. 또한 c[a]=c[a]-32는 아스키코드값에서 32를 빼면 결국 소문자를 대문자로 바꾸는 식이 된다. 따라서 출력하는 m, n은 3, 7이 되고, 배열 c는 영문자 배열을 대문자로 바꾸어 출력하게 된다.

20. [정 답] ②

[해 설]

그