자격증 요약/정보처리기사

[정보처리기사 실기] C언어 기출 유형_5 (제어문, 연산)

문성 2026. 4. 8. 21:30


[20년 3회]
2. 다음은 C언어 소스 코드이다. 출력 결과를 쓰시오.

#include <stdio.h>
void main() {
    int i = 0, c = 0;
    while (i < 10) {
        i++;
        c *= i;
    }
    printf("%d", c);
}
답: 0
                               

void main() {
    int i = 0, c = 0;
→ 변수 정의

    while (i < 10) {
        i++;
        c *= i;
while (i < 10) : i 가 10보다 작으면, 아래의 코드를 반복해라.
i++ : i 에 1을 더해라
c *= i : c * i 를 해서 c 값에 넣어라.

 


[24년 1회]

2. 다음 C언어 코드에서 알맞는 출력 값을 작성하시오.

#include <stdio.h>
int main() {
    int v1 = 0, v2 = 35, v3 = 29;
    if(v1 > v2 ? v2 : v1) {
        v2 = v2 << 2;
    }else{
        v3 = v3 << 2;
    }
    printf("%d", v2+v3);
}
답: 151
                               

int main() {
    int v1 = 0, v2 = 35, v3 = 29;
→ 변수 정의

    if(v1 > v2 ? v2 : v1) {
v1 > v2 ? : 0 > 35 → 거짓
v2 : v1 : (참:거짓) 거짓이므로 v1 이 실행됨.
→ 즉, if(0) 이 됨
→ C언어에서 if(0) 은 거짓(False)으로 간주함


        v2 = v2 << 2;
→ 참일 때 실행되는 부분이므로 실행 안 됨

    }else{
        v3 = v3 << 2;
→ 거짓이므로 실행 됨


    printf("%d", v2+v3);
→ 35 + 116

 


[23년 2회]

5. 다음은 C언어의 문제이다. 알맞은 출력값을 작성하시오.

#include <stdio.h>
void main(){
    int n[3] = {73, 95, 82};
    int sum = 0;
    for(int i=0;i<3;i++){
        sum += n[i];
    }
    switch(sum/30){
        case 10:
        case 9: printf("A");
        case 8: printf("B");
        case 7:
        case 6: printf("C");
        default: printf("D");
    }
}
답: BCD
                               

 


[21년 3회]

12. 다음 C언어에 대한 알맞는 출력값을 쓰시오.

#include <stdio.h>
int main() {
    int *arr[3];
    int a = 12, b = 24, c = 36;
    arr[0] = &a;
    arr[1] = &b;
    arr[2] = &c;
    printf("%d\n", *arr[1] + **arr + 1);
    return 0;
}
답: 37
                               

int main() {
    int *arr[3];
    int a = 12, b = 24, c = 36;
→ 변수 정의

    arr[0] = &a;
    arr[1] = &b;
    arr[2] = &c;
→ arr[0]에는 a의 주소를 넣는다. (값이 직접 들어가는 게 아님)


    printf("%d\n", *arr[1] + **arr + 1);
arr[1] : arr[1]은 b의 주소를 가리키고 있음.
*arr[1] : arr[1]은 b의 주소를 찾아가서 값(알맹이)를 꺼내라. = 24

arr : arr 은 배열의 시작점인 arr[0]의 주소 arr의 전체가 지정된다.
*arr : arr[0]에 담긴 a의 주소를 찾아가라는 뜻. 이때 arr[0] 한 칸이 지정된다.

**arr : arr[0]에 담긴 a의 주소를 찾아가서 값(알맹이)를 꺼내라.
**arr + 1 : 꺼낸 값(12)에 +1 을 해라 = 13

*arr[1] + **arr + 1 : 꺼낸 두개의 값 24 + 13 을 해서 37이 된다.
                               

**(arr+1) 이라면
(arr+1) : arr의 시작점 a[0] 에서 +1을 한 a[1]이 된다.
*(arr+1) : a[1]의 주소 한 칸을 지정하고
* *(arr+1) : a[1]의 주소에 있는 값을 꺼낸다.

 


[23년 2회]

3. 다음은 c언어의 코드이다. 보기의 조건에 맞추어 알맞은 출력값을 작성하시오.

#include<stdlio.h> 
#include<stdlib.h> 
char n[30];
char *test() {
    printf(입력하세요 : );
    gets(n);
    return n;
}
int main()
{
    char * test1;
    char * test2;
    char * test3;
    test1 = test();
    test2 = test();
    test3 = test();
    printf(%s\n,test1);
    printf(%s\n,test2);
    printf(%s,test3);
}
입력값은 홍길동, 김철수, 박영희 순서로 주어진다.
답:
박영희
박영희
박영희
                               

 


[25년 3회]

15. C언어 출력값 (비트 연산) 다음 코드의 출력값을 작성하시오.

#include <stdio.h>
int main() {
    int x = 7, y = 4, z;
    z = y % 3 < 3 ? 2 : 1;
    z = z & z >> 1;
    z = x > 5 && z <= 3 ? z * x : z / x;
    printf("%d", z);
    return 0;
}
답: 0
                               

int main() {
    int x = 7, y = 4, z;
→ 초기값 정의

※연산 순서 : 왼쪽부터 오른쪽, 연산 우선 법칙에 따라
    z = y % 3 < 3 ? 2 : 1;
y % 3 : 7 % 3 = 1 (%는 나머지를 구한다.)
y % 3 < 3 : 1 < 3 = 참
y % 3 < 3 ? 2 : 1; : z = 2 (조건 ? 참 : 거짓)
                               

    z = z & z >> 1;
z >> 1 : 2 >>1 = 1
→ '>>' 시프트 연산자 : 오른쪽으로 1비트 밀어라.

                               

z & z >> 1  : 2 & 1 = 0
  '&' AND 연산자 : 이진수 비교해서 일치하면 1, 불일치면 0

                               

    z = x > 5 && z <= 3 ? z * x : z / x;

x > 5 : 7 > 5 = 참
&& : 둘 다 참이어야 참이 되므로, 다음 연산도 확인한다. (거짓이었다면 다음 연산 확인 안 해도 됨)
z <= 3 : 0 <= 3 = 참
z = x > 5 && z <= 3 : 참 && 참 = 참
z * x : 0 * 7 = 0 (참 값이 반환되서 계산된다)
                               

    printf("%d", z);

  0 값 도출