ABOUT ME

-

Today
-
Yesterday
-
Total
-

Post Calendar

«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
  • 정보처리기사 실기 스터디[2022-10-03] - 프로그래밍 언어 활용(사용자 정의함수, 재귀함수)
    자격증/정보처리기사 2022. 10. 3. 21:31

    📌 Study

    🔸 2022-10-03

    [프로그래밍 언어 활용]

    1. 기본 문법 활용하기

    • 열거체 개념
      • 서로 연관된 정수형 상수들의 집합
      • 정수형 상수에 이름을 붙여서 코드를 이해하기 쉽게 해줌
      • C, C++ 언어에서는 멤버에 초깃값을 설정하지 않으면 0부터 차례대로 할당
      • 자바에서는 멤버에 값이 0부터 차례대로 할당
      • 파이썬은 멤버에 값들을 지정해야 함
      enum 열거체명 {
        멤버1,
        멤버2,
        ...
        };

     

    • C++ 열거체 예시
      #include <iostream>
      enum Week {
        Sunday,
        Monday,
        Tuesday = 5,
        Wednesday
      };
    
      void main() {
        enum Week week;
        week = Wednesday;
        std::cout << week;    // 6
      }
    • enum Week 선언 => Week = 열거체
    • 값을 설정하지 안았으니 차례대로 할당, Sunday = 0, Monday = 1, Tuesday = 5, Wednesday = 6
    • 변수 week 선언
    • week = Wednesday; => Wednesday = 6 이므로 출력 6

     

      class Week(Enum):
        Sunday = 0
        Monday = 1
        Tuesday = 5
        Wednesday = 6
    
        print(Week.Sunday)    // Week.Sunday

     

    • 구조체 개념 : 사용자가 기본 타입을 가지고 새롭게 정의할 수 있는 사용자 정의 자료형
    • 구조체 문법
      struct 구조체명 {
        자료형 변수명1;
        자료형 변수명2;
        ...
      };

     

    • C++ 구조체 예시
      #include <iostream>
    
      using namespace std;
    
      struct Student {
        char gender;
        int age;
        int num;
      };
    
      void main() {
        struct Student s;
        s.gender = 'M';
        s.age = 24;
        s.num = 20221003;
        cout << s.gender << endl;   // M
        cout << s.age << endl;    // 24
        cout << s.num << endl;    // 20221003

     

    • 구조체와 포인터
      • 구조체는 일반 구조체 변수로 접근할 때는 .으로 접근
      • 구조체 포인터는 접근할 때는 ->로 접근

     

      #include <stdio.h>
      struct Student {
        char gender;
        int age;
      };
    
      void main() {
        struct Student s = {'F', 21};
        struct Student *p = &s;
    
      printf("%c %d \n", s.gender, s.age);        // F, 21
      printf("%c %d \n", (&s)->gender, (&s)->age);    // F, 21
      printf("%c %d \n", p->gender, , p->age);    // F, 21
      printf("%c %d \n", (*p).gender, (*p).age);  // F, 21
      printf("%c %d \n", p[0].gender, p[0].age);  // F, 21
      }

     

    • 기출
      #include <stdio.h>
    
      struct Soojebi {
        char name[10];
        int age;
      };
    
      void main() {
        struct Soojebi s[] = {"Kim", 28, "Lee", 38, "Seo", 50, "Park", 35};
        struct Soojebi *p;
        p = s;
        p++;
        printf("%s\n", p->name);    // Lee
        printf("%s\n", p->age);     // 38
      }

     

    • main 함수
      • 프로그램이 실행하는 모든 프로그램의 시작점
      • main 함수에 있는 명령어를 실행한다.

     

      void main() {
    
      }
    
      int main() {
        return 반환값;
      }

     

    • 사용자 정의 함수 개념 : 사용자가 직접 새로운 함수를 정의하여 사용하는 방법
      int fn (int a, int b) {
        return a+b;
      }
    
      void main() {
        std::cout << fn(5, 7);    // 12
      }

     

    • 사용자 정의 함수 예시
      #include <stdio.h>
      char fn(int num) {
        if(num % 2 == 0)
          return 'Y';
        else
          return 'N';
        }
    
      void main() {
        char a = fn(5)
        printf("%c\n", a);
      }
      def fn(num):
        if num % 2 == 0:
          return 'Y'
        else:
          return 'N'
    
      a = fn(5)
      print(a)

     

    • 기출
      #include <stdio.h>
      int r1() {
        return 4;
      }
    
      int r10() {
        return (30+r1());   // 34
      }
    
      int r100() {
        return (200+r10());   // 234
      }
    
      int main() {
        printf("%d\n", r100());   // 234
        return 0;
      }
      #include <stdio.h>
      int Soojebi(int base, int exp) {
        int i, result = 1;
        for(i = 0; i < exp; i++)
          result *= base;
        return result;        // 2, 4, 8, ..., 2^10
      }
    
      void main() {
        printf("%d", Soojebi(2, 10));   // 1024
      }

     

    • 함수 포인터 : 함수의 주소를 저장하고, 해당 주소의 함수를 호출하는데 사용하는 포인터

     

    • 함수 포인터 문법 : 리턴타입(*함수 포인터)(함수 파라미터);

     

    • 함수 포인터 예제
      #include <stdio.h>
    
      void fn1() {
        printf("fn1 함수\n");
      }
    
      int fn2(int a) {
        printf("fn2 함수 : %d\n", a);
        return 0;
      }
    
      voin main() {
        void (*pf1)();
    
        int (*pf2)(int);
    
        fn1();    // fn1함수
        fn2(5);   // fn2함수 : 5
    
        pf1 = fn1;
        pf2 = fn2;
    
        pf1();    // fn1함수
        pf2(5);   // fn2함수 : 5
      }

     

    • 매개변수 전달 개념 : 함수가 필요로 하는 값을 매개변수로 만들면 함수를 호출하는 쪽에서 매개변수를 사용하여 해당 함수에게 변수의 값, 변수의 주소값을 전달하는 방식

     

    • 매개 변수 종류
      • 전달 인자(Argument) : 실 매개변수, 함수가 함수 호출하는 쪽에서 전달하는 변수의 값 또는 변수의 주소값
      • 매개 변수(Parameter) : 형식 매개변수, 함수를 호출하는 쪽에서 전달받는 변수의 값 또는 변수의 주소값

     

    • 매개 변수 전달 방법
      • call by value : 변수의 값을 넘겨주고, 이 값은 새로운 공간에 할당되어 사용하는 방식, 형식 매개변수의 어떠한 변화도 실 매개변수에 아무런 영향을 미치지 않음
      • call by reference : 변수의 값이 아닌 변수가 사용 중인 메모리 공간의 주소를 넘겨주는 방식, 실 매개변수의 주소를 형식 매개변수로 보냄

     

    • 매개변수 전달 방법 예시(call by value, call by reference)
      // call by value
    
      #include <stdio.h>
    
      int fn(int x, int y) {
        ...
      }
    
      void main() {
        int i, j;
        ...
        fn(i, j);
      }
    
      ===========================
    
      // call by reference
    
      #include <stdio.h>
    
      int fn(int* x, int* y) {
        ...
      }
    
      void main() {
        int i, j;
        ...
        fn(&i, &j);
      }

     

    • 재귀함수 : 함수 자신이 자신을 부르는 함수
    • 재귀함수 예시
      #include <iostream>
      int fn(int n) {
        if(n <= 1)
          return 1;
        else
          return n * fn(n-1);
      }
    
      void main() {
        std::cout << fn(3);   // 3 * 2 * 1 = 6
      }

     

    • 기출
      #include <stdio.h>
      int hrd(int n) {
        if(n <= 0)
          return 1;
        else 
          printf("%d", n);
        hrd(n-1);
      }
    
      int main() {
        hrd(5);     // 54321
        return 0;
      }

    댓글

Designed by Tistory.