본문 바로가기
자격증/실기

C 언어 기출 해설

by 천왕지짐 2023. 6. 26.

 

 

 2020년 1회 - 14번 문제

01
02
03
04
05
06
07
08
09
10
11
12
13
14
#include <stdio.h>
 
main() {
    int c=1;
    switch(3){
        case 1:c+=3;
        case 2:c++;
        case 3:c=0;
        case 4:c+=3;
        case 5:c-=10;
        default : c--;
    }
    printf("%d",c);
}
-8
해당 코드는 switch문을 사용하여 변수 c의 값을 조작하는 예제이다. 실행 결과는 -7이다.
 
switch문에서는 3이라는 값이 case 3에 매칭되기 때문에 이후의 모든 case문이 실행된다. 따라서, c의 값을 증가, 감소시키는 연산이 모두 수행된다.
 
case 3: c=0; -> c는 0으로 초기화된다.
case 4: c+=3; -> c에 3이 더해져서 c는 3이 된다.
case 5: c-=10; -> c에서 10을 빼면 c는 -7이 된다. (c = 3 - 10 = -7)
default: c--; -> default 문으로 넘어와서 c에 -1이 더해져서 c는 –8이 된다.
 
break가 없어서 생기는 문제이다.

 

 2020년 1회 - 20번 문제

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>

void align(int a[]){

    int temp;
    for(int i=0;i<4;i++)
        for(int j=0;j<4-i;j++)
            if(a[j]>a[j+1]){
                temp=a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
            }
}

main() {

    int a[]={85, 75, 50, 100, 95};
    align(a);
    for(int i=0;i<5;i++)
        printf("%d",a[i]);
}
50758595100
버블 정렬(bubble sort) 알고리즘을 사용하여 배열 a를 정렬하는 프로그램이다.
align() 함수는 정렬 대상인 배열 a[]를 매개변수로 받아, 버블 정렬 알고리즘을 사용해 배열의 원소를 오름차순으로 정렬한다.
버블 정렬 알고리즘은 두 인접한 원소를 비교하면서, 원소의 순서를 바꿔가면서 정렬을 수행하는 간단한 정렬 알고리즘이다.
main() 함수는 배열 a[]의 초기값을 설정한 뒤, align() 함수를 호출하여 배열을 정렬한 후, 정렬된 배열 원소를 출력한다.

 

 2020년 3회 - 10번 문제

01
02
03
04
05
06
07
08
09
10
11
12
13
#include <stdio.h>
int r1(){
return 4;
}
int r10(){
return(30+r1());
}
int r100(){
return(200+r10());
}
int main(){
printf("%d\n",r100());
}
234
 

 

 2020년 4회 - 10번 문제

01
02
03
04
05
06
07
08
09
10
#include <stdio.h>
 
main() {
char *p="KOREA";
printf("%s\n",p);
printf("%s\n",p+3);
printf("%c\n",*p);
printf("%c\n",*(p+3));
printf("%c\n",*p+2);
}
KOREA
EA
K
E
M
이 코드는 문자열과 포인터에 대한 이해를 확인하기 위해 작성된 예제이다.
 
char *p="KOREA"; char p[]="KOREA"; 는 동일하다.
 
main() 함수에서는 "KOREA" 문자열을 가리키는 포인터 p를 선언하고, 그 값을 출력한다. p는 문자열의 첫 번째 글자인 'K'의 주소를 가리키기 때문에, "KOREA"라는 문자열이 출력된다.
 
그 다음, p+3을 출력한다. p의 값은 여전히 'K'의 주소지만, p+3'E'의 주소를 가리키게 된다. E부터 끝까지 출력되므로 "EA"가 출력된다.
 
다음 두 줄에서는 *p*(p+3)의 값을 출력한다. *p'K'ASCII 코드 값인 75가 출력된다. *(p+3)'E'ASCII 코드 값인 69가 출력된다.
 
마지막으로, *p+2의 값을 출력한다. 이 표현식에서는 *p75이므로, 75+2를 수행한 결과인 77에 해당하는 ASCII 값인 'M'이 출력된다.
 
이 예제를 통해, 문자열은 포인터로 표현될 수 있으며, 포인터의 산술 연산을 통해 문자열 내의 특정 문자를 가리킬 수 있음을 확인할 수 있다. 또한, 포인터 연산과 Deference (*) 연산의 우선순위에 대한 이해도 확인할 수 있다.
 

 

 2021년 1회 - 15번 문제

01
02
03
04
05
06
07
08
09
10
11
12
#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
 

 

 2021년 2회 - 16번 문제

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
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
 

 

 2021년 2회 - 18번 문제

01
02
03
04
05
06
07
08
09
10
11
12
13
14
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
 

 

 2021년 3회 - 12번 문제

01
02
03
04
05
06
07
08
09
10
11
12
#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
 

 

 2021년 3회 - 17번 문제

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
#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
 

 

 2022년 1회 - 12번 문제(5를 입력받았을 때의 출력결과)

01
02
03
04
05
06
07
08
09
10
11
12
#include <stdio.h>

int func(int a) {
if(a<=1) return 1;
return a*func(a-1);
}
 
int main(){
int a;
scanf("%d",&a);
printf("%d",func(a));
}
120
 

 

 2022년 1회 - 15번 문제(정수를 역순으로 출력하는데 (1)(2)(3)에 들어갈 연산자를 쓰시오)

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
int main() {

int number = 1234;
int div = 10;
int result = 0;

while (number ( 1 ) 0) {

result = result * div;
result = result + number ( 2 ) div;
number = number ( 3 ) div;

}

printf("%d", result);
return 0;

}
(1) : >
(2) : %
(3) : /
 

 

 2022년 2회 - 8번 문제

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
struct A{
int n;
int g;
};
 
int main() {
struct A a[2];
for(int i=0;i<2;i++){
a[i].n=i, a[i].g=i+1;
}
printf("%d",a[0].n+a[1].g);
}
2
 

 

 2022년 2회 - 15번 문제

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
struct A{
int n;
int g;
};
 
int main() {
struct A a[2];
for(int i=0;i<2;i++){
a[i].n=i, a[i].g=i+1;
}
printf("%d",a[0].n+a[1].g);
}
10
 

 

 2022년 2회 - 16번 문제

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
 
int main(int argc, char*argv[]) {
int a[4]={0,2,4,8};
int b[3]={};
int i=1;
int sum=0;
int *p1;
 
for(i;i<4;i++){
p1=a+i;
b[i-1]=*p1-a[i-1];
sum=sum+b[i-1]+a[i];
}
printf("%d",sum);
 
return 0;
}
22
 

 

 2022년 3회 - 아래는 C언어의 2차원 배열 형태이다. field의 경우 2차원 배열 형태는 예시처럼 출력되므로, 이를 참고하여 mines의 2차원 배열 형태를 작성하시오. 

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
void main(){
 
int mines[4][4] = {{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}};
int field[4][4] = {{0,1,0,1},{0,0,0,1},{1,1,1,0},{0,1,1,1}};

int w = 4, h = 4;
 
for(int y=0; y<h; y++) {
for(int x=0;x<w;x++) {
if(field[y][x] == 0) continue;
for(int j=y-1;j<=y+1;j++) {
for(int i=x-1;i<=x+1;i++) {
if(chkover(w,h,j,i) == 1)
mines[j][i] += 1;
}
}
}
}
}

int chkover(int w,int h,int j,int i) {
if (i >= 0 && i < w && j >= 0 && j < h) return 1;
return 0;
}

 
 

 

 2022년 3회 - 13번 문제

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include<stdio.h>
main(){
int s, el =0;
for(int i=6; i<=30; i++){
s=0;
for(int j=1; j<=i/2; j++){
if(i%j==0){
s=s+j;
}
}
if(s==i){
el++;
}
}
printf("%d", el);
}
2
 

 

 2023년 1회 - 2번 문제

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
 
int main(void) {
char a[]="Art";
char*p=NULL;
p=a;
printf("%s\n",a);
printf("%c\n",*p);
printf("%c\n",*a);
printf("%s\n",a);
 
for(int i=0;a[i]!='\0';i++){
printf("%c",a[i]);
}
}
Art
A
A
Art
Art
 

 

 2023년 1회 - 8번 문제

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
 
int main(void) {
char *a = "qwer";
char *b = "qwtety";
for (int i = 0; a[i] != '\0'; i++) {
for (int j = 0; b[j] != '\0'; j++) {
if (a[i] == b[j]) printf("%c", a[i]);
}
}
}
qwe
 

 

 2023년 1회 - 10번 문제((가)는 연산자이고 (나)는 정수인데 빈칸을 알맞게 쓰시오.)

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
 
int main(void) {
int input = 101110;
int di = 1;
int sum = 0;
 
while (input > 0) {
sum = sum + (input ()() * di);
di = di * 2;
input = input / 10;
}
 
printf("%d", sum);
 
return 0;
}
() : %
() : 10 또는 2
 

 

 2023년 1회 - 14번 문제((가) (나) 빈칸에 알맞은 변수를 쓰시오.)

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
 
void swap(int* idx1, int* idx2) {

int t = *idx1;
*idx1 = *idx2;
*( ) = t;
}
void Usort(int a[], int len) {
for (int i = 0; i < len - 1; i++) {
for (int j = 0; j < len - i - 1; j++) {
if (a[j] > a[j + 1])
swap(&a[j], &a[j + 1]);
}
}
 
for (int k = 0; k < 5; k++) {
printf("%d ", a[k]);
}
}
 
int main(void) {
int arr[] = {64, 34, 25, 12, 40};
int nx = 5;
 
Usort(arr, ());
return 0;
}
() idx2
() nx
 

 

'자격증 > 실기' 카테고리의 다른 글

SQL 기출 해설  (0) 2023.06.26
Python 언어 기출 해설  (0) 2023.06.26
JAVA 언어 기출 해설  (0) 2023.06.26

댓글