Skip to content

Qvil Blog

[중등교사임용시험-전기전자통신] C언어 2010년도 문제 및 풀이

teacher appointment exam, C, 20101 min read

문제

1#include <stdio.h>
2
3void print_r(int a[], int n);
4
5int main(void)
6{
7 int a[] = {10, 20, 30, 40, 50};
8 print_r(a, 5);
9 return 0;
10}
11void print_r(int a[], int n)
12{
13 int *p = a + 1;
14 while (p >= a)
15 printf("%d\n", *p--);
16}

해설

  1. print_r함수의 첫번째 인자로 a배열의 시작 주소를 넘겨준다.
    1. score[3] = 4, sum = 4
    2. score[4] = 5, sum = 9
      • 9 출력
    3. switch문에서 `break`가 없으면 계속 다음으로 넘어간다. 위 코드에서는 default: 로 간다.(case에 조건이 맞지 않으면 무조건 defalt로 간다.) 만약 case에서 `break` 혹은 `return`을 하면 switch문을 빠져나온다.
    4. default에서 score[5]에는 값이 들어있지 않다.(쓰레기값) 값이 없으므로 sum += score[i];연산은 이뤄지지 않고 printf한다. sum의 값이 변하지 않았으므로 9 출력.
      • 9 출력

결과(온라인 실행)

120
210

참고

  • c언어는 절차지향형 언어이므로 main함수 위에 함수를 선언하고 main함수 아래에 함수를 만들어서 사용하거나
  • 함수를 main함수 위에 만들어서 사용하면 선언하지 않아도 된다.

아래 두 코드는 같다.

1#include <stdio.h>
2
3void print_r(int a[], int n);
4
5int main(void)
6{
7 int a[] = {10, 20, 30, 40, 50};
8 print_r(a, 5);
9 return 0;
10}
11void print_r(int a[], int n)
12{
13 int *p = a + 1;
14 while (p >= a)
15 printf("%d\n", *p--);
16}
1#include <stdio.h>
2
3void print_r(int a[], int n)
4{
5 int *p = a + 1;
6 while (p >= a)
7 printf("%d\n", *p--);
8}
9
10int main(void)
11{
12 int a[] = {10, 20, 30, 40, 50};
13 print_r(a, 5);
14 return 0;
15}