관리 메뉴

나구리의 개발공부기록

Chapter 02 - C언어(기출 문제_1) 본문

2024년도 수제비 실기책(6판) 내용 정리


1. C코드의 출력 결과 작성

#include <stdio.h>

int main() {
  int i, j;
  int temp;
  
  int a[5] = {75, 95, 85, 100, 50};
  
  for(i=0; i<4; i++) {
    for(j=0; j<4-1; j++) {
      if(a[j] > a[j+1]){
        temp = a[j];
        a[j] = a[j+1];
        a[j+1] = temp;
      }
    }
  }
  
  for(i=0; i<5; i++) {
    printf("%d", a[i[);
  }
  
  return 0;
}

 

풀이

#include <stdio.h>

int main() {
  int i, j;
  int temp;
  
  // 길이가 5인 int타입 배열 변수 a에 아래의 값들을 저장
  int a[5] = {75, 95, 85, 100, 50};
  
  // 2중 반복문, i의 값이 0부터 4미만(3)까지(4번) 반복
  for(i=0; i<4; i++) {
    // i의 반복문이 1번 실행 될 때마다 j의 값이 4-i 미만 까지 반복
    for(j=0; j<4-i; j++) {
    
      // 반복문이 돌 때 a[j]의 값이 a[j+1]의 값보다 크면 if문의 코드를 실행
      if(a[j] > a[j+1]) {  // a[j]의 값과 a[j+1]의 값의 위치를 바꾸는 코드가 실행됨
        temp = a[j];
        a[j] = a[j+1];
        a[j+1] = temp;
      }
    }
  }
  
  // 5번 출력하기위한 반복문, i의 값이 0부터 5미만(4)까지(5번) 반복
  for(i=0; i<5; i++) {
    printf("%d ", a[i]);  // a배열의 i위치의 값을 10진 정수의 형태로 출력
    // 50 75 85 95 100 출력
  }
  
  return 0;
}

 

i = 0 일때 j의 값이 4 - 0 미만(4)까지 반복 →  a = {75, 85, 95, 50, 100}

  • j = 0 : a[0] == 75, a[1] == 95 , if문 실행 X
  • j = 1 : a[1] == 95, a[2] == 85,  a[1] > a[2] 이므로 if문의 코드 실행 a[1] == 85,  a[2] == 95
  • j = 2 : a[2] == 95, a[3] == 100, if문 실행 X
  • j = 3 : a[3] == 100, a[4] == 50, a[3] > a[4] 이므로 if문의 코드 실행 → a[3] == 50, a[4] == 100

 

i = 1 일때 j의 값이 4 - 1 미만(3) 까지 반복 → a = {75, 85, 50, 95, 100}

 

  • j = 0 : a[0] == 75, a[1] == 85, if문 실행 X
  • j = 1 : a[1] == 85, a[2] == 95, if문 실행 X
  • j = 2 : a[2] == 95, a[3] == 50, a[2] > a[3] 이므로 if문의 코드 실행 → a[2] == 50, a[3] == 95

i = 2일때 j의 값이 4 - 2 미만(2) 까지 반복 → a = {75, 50, 85, 95, 100}

 

  • j = 0 : a[0] == 75, a[1] == 85, if문 실행 X
  • j = 1 : a[1] == 85, a[2] == 50, a[1] > a[2] 이므로 if문의 코드 실행 → a[1] == 50, a[2] == 85

i = 3일때 j의 값이 4 - 3 미만(1) 까지 반복 a = {50, 75, 85, 95, 100}

 

  • j = 0 : a[0] ==  75, a[1] == 50, a[0] > a[1] 이므로  if문의 코드 실행 → a[0] == 50, a[2] == 75

2. C코드의 출력 결과 작성

#include <stdio.h>

int main() {
  int i = 0, c = 0;
  while(i>10) {
    i++;
    c *= i;
  }
  
  printf("%d", c);
}

 

풀이

#include <stdio.h>

int main() {
  int i = 0, c = 0;    // int타입 변수 i, c에 값을 0으로 초기화하여 선언
  while(i<10) {        // i의 값이 10미만(9)이 될때까지 반복(10번)
    i++;               // i의 값을 1 증가
    c *= i;            // 증가한 i의 값과 c의 값을 곱하기 연산
  }
  
  printf("%d", c);     // c의 값을 출력, 0 이 출력됨
}

 

while 문 실행

 

  • while문의 조건에 부합하여 반복문이 실행 되어도 c의 값이 0이기 때문에 i의 값이 계속 증가 되어도 0 * i가 되어 c는 0이 됨
  • 반복문이 종료 되어도 c의 값은 계속 0이 됨

3. C코드의 출력 결과 작성

#include <stdio.h>

int r1() {            // int 타입 4를 반환하는 r1 함수
  return 4;
}

int r10() {           // 30 + 4(r1함수의 반환값)의 연산결과를 반환하는 r10 함수
  return (30+r1());
}

int r100() {          // 200 + 34(r10함수의 반환값)의 연산결과를 반환하는 r100 함수
  return (200+r10());
}

int main() {
  printf("%d\n", r100());   // r100의 연산결과를 10진 정수의 형태로 출력, 234
  return 0;
}

4. 헝가리안 표기법(Hungarian Case)에 대해서 서술

  • 식별자 표기  시 접두어에 자료형을 붙이는 표기법
  • int형일 경우 n, char 형일 경우 c, 문자형일 경우 sz를 붙힘

그외 표기법

 

  • 카멜 표기법 : 여러 단어가 이어지면 첫 단어 시작만 소문자, 각 단어의 첫글자는 대문자로 표기
  • 파스칼 표기법 : 여러 단어가 이어지면 각 단어의 첫글자는 대문자로 지정하는 표기법
  • 스네이크 표기법 : 여러 단어가 이어지면 단어 사이에 언더바를 넣는 표기법

5. C코드의 출력 결과 작성

#include <stdio.h>
int 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);
  
  return 0;
}

 

풀이

#include <stdio.h>
int main() {
  char *p = "KOREA";      // 문자 타입 포인터 변수 p에 문자열 "KOREA"가 저장된 
                          // 별도의 메모리주소를 저장
  
  printf("%s\n", p);      // p == &p[0](p의 0번째 주소), KOREA가 저장된 주소의 값을
                          // 시작부터 널값까지 문자열로 출력, KOREA
                          
  printf("%s\n", p+3);    // p+3 = &p[3], p의 3번인덱스 부터 널값까지 문자열로 출력, EA
  printf("%c\n", *p);     // *p == p[0], p[0]의 값을 문자 타입으로 출력, K 
  printf("%c\n", *(p+3)); // *(p+3) == p[3], p[3]의 값을 문자타입으로 출력, E
  
  // *p+2 == p[0]+2, p[0]의 값은 K, K+2 이므로 K+2가 아스키 코드로 연산됨
  // 연산된 값을 문자 타입으로 출력, M
  printf("%c\n", *p+2);
  
  return 0;
}

6. C코드의 출력 결과 작성

#include <stdio.h>
struct Soojebi {
  char name[10];
  int age;
};

int main() {
  struct Soojebi s[] = {"Kim", 28, "Lee", 38, "Seo", 50, "Park", 35};
  struct Soojebi *p;
  
  p = s;
  P++;
  printf("%s\n", p->name);
  printf("%d\n", p->age);
}

 

풀이

#include <stdio.h>

struct Soojebi {  // 구조체 Soojebi 선언
  char name[10];  // 구조체의 처음 변수는 길이가 10인 문자 배열
  int age;        // 두번째 변수는 int타입 변수
};                // 구조체 선언 종료는 ;으로

int main() {
  // 구조체 초기화 - 순서대로 저장됨
  // 구조체 s[0] = "kim", 28 이, s[1] = "Lee", 38 이런식으로 저장됨
  struct Soojebi s[] = {"Kim", 28, "Lee", 38, "Seo", 50, "Park", 35};
  struct Soojebi *p;  // 구조체 포인터 변수 p를 선언
  
  p = s; // 포인터 변수 p가 구조체 배열 s의 주소값(&s[0])을 가리킴
  P++;   // p의 값을 1 증가
  
  // 구조체 포인터 p가 가르키는 name의 값을 문자열로 출력
  printf("%s\n", p->name); // p가 1 증가 했으므로 p+1 == s[1]의 name의 값을 출력, LEE
  
  // 구조체 포인터 p가 가르키는 age의 값을 정수로 출력
  printf("%d\n", p->age);  // 마찬가지로 p+1 == s[1]의 age의 값을 출력, 38
  
  return 0;
}

7. C코드의 출력 결과 작성

#include <stdio.h>
int main() {
  int ary[3] = {1};
  int s = 0;
  int i = 0;
  
  ary[1] = *(ary+0)+2;
  ary[2] = *ary+3;
  for(i=0; i<3; i++) {
    s = s + ary[i];
  }
  
  printf("%d",s);
  return 0;
}

 

풀이

#include <stdio.h>

int main() {
  int ary[3] = {1};   // ary[0] = 1
  int s = 0;
  int i = 0;
  
  // *(ary+0) == ary[0], ary[0]는 1이므로 1 + 2가됨
  ary[1] = *(ary+0)+2; // 1 + 2를 ary[1]에 저장
  
  // *ary == ary[0], 1 + 3이 됨
  ary[2] = *ary+3;     // 1 + 3을 ary[2]에 저장
  
  for(i=0; i<3; i++) { // 0 ~ 2 까지 3번 반복
    s = s + ary[i];    // 1 + 3 + 4 = s, 누적저장
  }
  
  printf("%d",s);      // 정수형으로 출력, 8
  return 0;
}