본문 바로가기

정보처리기사[실기]

[C언어] 21년 기출 문제 풀이 (1회 ~ 4회)

[21년 1회]

#include <stdio.h>

void main(){
    struct insa {
        char name[10];
        int age;
     }a[] = {"Kim",28,"Lee",38,"Park",42,"Choi",31};
        struct insa *p;
        p = a;
        p++;
        printf("%s\n", p-> name);
        printf("%d\n", p-> age);
}
더보기

[정답]

Lee

38

 

[풀이]

p = a 는 a의 주소값 즉, a[0]을 가리키기 때문에 a의 첫번째 요소

→ "Kim", 28  

p++ 는 포인터를 1 증가시키기 때문에 a[1]을 가리키게됨

→ "Lee", 38  

 

*  구조체 Struct

하나 이상의 변수를 묶어 그룹화하는 사용자 정의 자료형

배열 = 같은 자료형으로만 구성 / 구조체 = 여러 가지 자료형으로 구성 가능


[21년 2회]

#include <stdio.h>

int main() {
	int res;
    res = mp(2,10);
    printf("%d",res);
    return 0;
}

int mp(int base, int exp){
	int res = 1;
    for(int i=0; i < exp; i++){
    	res *= base;
    }
    return res;
}
더보기

정답 : 1024

 

그냥 계산하면 됨

 

#include <stdio.h>

int main() {
	int ary[3];
    int s = 0;
    *(ary+0) = 1;
    ary[1] = *(ary+0)+2;
    ary[2] = *ary+3;
    
    for(int i=0; i<3; i++){
    	s = s+ary[i];
    }
    
    printf("%d",s);
}
더보기

정답 : 8

 

[풀이]

*(ary + 0) = 1 

→ ary[]의 주소값을 뜻하는데 배열의 주소값은 첫번째 요소의 값이기 때문에 배열 ary[0]이 1이라는 의미

 

ary[1] = *(ary+0) + 2 

*(ary+0)=1 이기 때문에 1+2 =3 / ary[]의 두 번째 요소는 3

 

ary[2] = *ary+3 

→ *ary도 ary 배열의 주소값을 의미하기 때문에 1, 1+3 =4

 

➡️ ary[] = {1, 3, 4}

 

배열을 적용해서 for문을 돌리면 8 출력


[21년 3회]

#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);
}
더보기

정답 : 37

 

[풀이]

arr[0] = &a;
arr[1] = &b;
arr[2] = &c;

→ 배열의 각 인덱스에 a, b, c의 주소가 저장됨
     결국 각각 a,b,c의 값을 가리킴

 

*arr[1] = b의 값을 참조 = 24

**arr = *arr[0] = a = 12

24 + 12 + 1 = 37  

 

#include <stdio.h>

struct jsu {
	char name[12];
    int os, db, hab, hhab;
};

int main() {
	struct jsu st[3] = {{"데이터1", 95, 88},
    					{"데이터2", 84, 91},
                        {"데이터3", 86, 75}};
    struct jsu *p;
    
    p = &st[0];
    
    (p + 1) -> hab = (p + 1) -> os + (p + 2) -> db;
    (p + 1)-> hhab = (p + 1) -> hab + p -> os + p -> db;
 
	printf("%d\n", (p + 1) -> hab + (p + 1) -> hhab);
}
더보기

정답 : 501

 

[풀이]

(p + 1) = st[1]

(p + 1)의 hab = st[1]의 os + st[2]의 db = 84 + 75 = 159

(p + 1)의 hhab = st[1]의 hab + st[0]의 os + st[0]의 db = 159 + 95 + 88 = 342

 

159 + 342 = 501