함수와 기억 클래스 - 1

C 언어에서 함수의 개념, 표준함수와 사용자 정의 함수, 함수의 선언, 정의, 호출 방법.

  • 학습 목표

    1. 함수의 개념과 중요성 이해.
    2. 표준함수와 사용자 정의함수 이해.
    3. 함수의 선언, 정의, 호출 방법 이해.
    4. 표준함수에 대한 헤더파일 사용.

프로그램 언어의 제어 구조

  • 함수 : 특정한 작업(기능)을 수행하도록 설계된 독립적인 프로그램.
  • 표준 함수 : C 언어에서 자체적으로 제공하는 함수.
  • 사용자 정의함수 : 사용자가 정의하여 사용하는 함수.
  • 함수 원형 : 함수를 프로그램에서 사용하기 위한 함수의 양식.
  • 함수 호출 : 사용할 함수를 부르는 것.
  • 매개변수 : 호출하는 함수와 호출 당하는 함수에 쓰이는 변수.

함수의 개념

특정한 작업(기능)을 수행하도록 설계된 독립적인 프로그램.
정해진 순서에 따라 실행 됨으로 프로그램의 기능을 수행 함.

C 프로그램은 함수들로 구성

  • 전체의 실행 내용을 몇 개의 모듈(module)로 분류.
  • 각각의 모듈에 해당하는 내용을 함수로 작성.
  • 실행 순서에 따라 그 함수들을 차례로 호출하여 실행.

함수의 특성

  • 함수들은 서로를 자유롭게 호출 가능.
  • 모든 함수는 서로 독립적.

함수의 장점

  • 프로그램의 수정이 쉽다.
  • 함수의 재사용으로 코드 중복을 최소화 함.
  • 프로그램 기능을 한 눈에 파악할 수 있게 함으로 유지보수가 쉬움.

단위 프로그램을 하나의 함수에 기술 한 경우

  void main() {
    // 성적 입력 코드
    ...
    // 성적 수정 코드
    ...
    // 성적 처리 코드
    ...
    // 성적 출력 코드
    ...
  }
  • 함수의 길이가 커짐.
  • 프로그램 가독성이 낮음.
  • 수정의 어려움이 있음.
  • 일부분만 재호출 불가능.

표준 함수

C 언어에서의 함수

  • 표준함수 : C 언어 자체에서 제공하는 함수.
  • 사용자 정의함수 : 사용자가 정의하여 사용하는 함수.

표준 함수

  • 표준함수의 원형은 헤더파일(*.h)에 정의.
  • 표준함수의 실체는 라이브러리 파일에 수록.
  • 표준함수를 사용하려면 원형이 선언되어 있는 헤더파일을 #include 해줘야 함.

표준 함수의 원형 예

  • prntf(), scanf() 의 원형.
    •   int printf(const char * format, ...);
        int scanf(const char * format, ...);
    • stdio.h(standard input output의 약자)헤더파일에 정의 되어 있음.
    • 표준 함수를 사용하려면 #include <stdio.h>를 꼭 해야 함.
  • sin(), cos() 의 원형.
    •   double sin(double x);
        double cos(double x);
    • math.h 헤더파일에 정의되어 있음.
    • 표준함수를 사용하려면 #include <math.h>

C 언어 표준 함수의 대표적인 예

헤더 파일 선언된 함수 EX
stdio.h 입출력함수 printf(), scanf(), getchar(), putchar(), ...
stdio.h 파일 관련 함수 fopen(), fclose(), fprintf(), ...
conio.h 콘솔 입출력 함수 putch(), cputs(), cprintf()(), getch(), chetche(), cscanf(), ...
string.h 문자열 처리 함수 strcat(), strcmp(), strcpy(), strlen(), strncat(), strncpy(), ...
math.h 수학 함수 sqrt(), sin(), cos(), tan(), log(), exp(), pow(), abs(), asin(), acos(), atan(), cosh(), ...
ctype.h 문자 형태 판별 함수 isalpha(), isdigit(), islower(), ...
ctype.h 문자 변환 함수 tolower(), toupper()
stdlib.h 수치변환 함수 atoi(), itoa()
stdlib.h 난수 관련 함수 rand(), srand()
stdlib.h 정렬/검색 함수 qsort(), lfind()

표준함수 사용의 예

  •   #include <stdio.h> //  입출력 함수를 처리하기 위한 헤더파일 (standard input output)
      #include <math.h>  //  수학 함수를 처리하기 위한 헤더파일
      #include <stdlib.h>
    
      int main()
      {
        int a, b, c;
        int i = -5, j = 2;
        double x = 12.34;
    
        printf("abs( -5 ) = %d\n", abs(i)); //  x의 절댓값.
    
        a = ceil(x);
        printf("ceil( 12, 34 ) = %d\n", a); //  x 이상의 최소 정숫값.
    
        printf("cos( 10 ) = %f\n", cos(10));
    
        printf("exp( 2 ) = %.f\n", exp(j)); //  x의 지숫값
    
        b = floor(x);
        printf("floor( 12.34 ) = %d\n", b); //  x 미민의
    
        printf("sqrt( 2 ) = %5f\n", sqrt(j));
    
        c = pow(4, j);
        printf("pow( 4, 2) = %d\n", c); //  pow(x, y) : x의 y제곱 값.
    
        return 0;
      }
  •     #include <stdio.h>
        #include <string.h> //  문자열 처리 함수를 위한 헤더파일
        #include <ctype.h>  //  문자형태 판별 함수(isalphat, isdigit)을 위한 헤더
    
        int main()
        {
          int i, alp = 0, no = 0, et = 0;
          char s[20];
    
          printf("\n STRING : ");
          scanf("%s", s);
    
          for (i = 0; i < strlen(s); i++)
          {
            if (isalpha(s[i]))
              alp++;
            else if (isdigit(s[i]))
              no++;
            else
              et++;
          }
    
          printf("alphabe = %d\n", alp);
          printf("number = %d\n", no);
          printf("etc = %d\n", et);
          printf("totoal = %d\n", strlen(s));
    
          return 0;
        }

사용자 정의 함수

사용자가 단위 프로그램을 함수로 정의하여 사용.

  • C 프로그램에서의 함수

    • main()함수 안에 표준 함수를 사용하는 형태
    • 동일 블럭 내의 프로그램 길이가 길어지면, 전체 프로그램은 복잡해 지고 이해하기가 어려워짐.
    • 전체 프로그램을 짧은 단위 프로그램으로 나누어 정의함으로 프로그램의 작성과 이해를 쉽게 할 필요가 있음.
  • 사용자 정의 함수의 예

    •   #include <stdio.h>
      
        int sum(int a, int b);
      
        int main()
        {
      
          int x, y, c;
      
          printf("\nx : ");
          scanf("%d", &x);
      
          printf("y : ");
          scanf("%d", &y);
      
          c = sum(x, y);
      
          printf("\nSUM : %d\n", c);
      
          return 0;
        }
      
        int sum(int a, int b) //  사용자 정의함수
        {
          return a + b;
        }

함수 정의의 구조

  •   반환_자료형 함수명( 자료형 매개변수1, 자료형 매개변수2, ...)  // 함수 헤더
      { // 함수 시작
        // 함수 몸체
      } // 함수 끝
  •   int sum(int a, int b)
      {
        return a + b;
      }

함수 헤더.

  • 반환 자료형.
    • 함수의 결과 값을 호출한 함수에 되돌려 줄 때의 자료형.
    • 사용될 수 있는 자료형은 C 언어에서 사용 가능한 모든 자료형.
    • 생략 가능하며, 생략할 경우 자료형은 int로 간주.
    • 반환 값이 없는 함수인 경우 void 형으로 선언(생략시 int로 처리).
  • 함수명
    • 변수명을 정하는 규칙과 동일한 방식으로 함수명을 정함.
    • 의미 있는 함수명을 정하는 것이 함수를 이해하는 데 도움을 줌.
  • 자료형과 매개변수
    • 자료형은 매개변수의 자료형을 나타냄.
    • 매개변수는 호출 함수와 피호출 함수 사이에 자료를 주고받기 위헤 사용.
    • 매개변수는 해당 함수 내에서 변수처럼 사용.
    • 매개변수가 여러 개일 경우에는 콤마(,)로 구분.
    • 매개변수가 없으면 void 형으로 사용.

함수 몸체

  • 함수가 하는 일을 정의하는 부분.
  • 중괄호 {}를 이용하여 함수의 시작과 끝을 나타냄.
  • C언어의 기본 구조와 동일.

함수의 사용

  • 함수를 사용하기 위해서는 함수의 원형 선언, 함수의 호출, 함수의 정의로 구성.

함수의 원형 선언

  • 함수는 변수와 같이 사용되기 전에 미리 선언.

  • 함수의 원형 선언은 일반적으로 main() 이전에 함.

    • 컴파일 시, main()을 먼저 컴파일 하기 때문에, main()에서 사용할 함수를 미리 선언해 줘야 함.
  • 원형선언은 함수정의 부분의 헤더부분에 세미콜론(;)만 추가 하면 됨.

    • 함수 원형선언은 함수와 관련된 3가지 성질을 선언.
      • 함수의 반환형.
      • 배개변수의 개수.
      • 배개변수의 자료형.
  • 피호출 함수가 main() 뒤에 선언된 경우 함수의 원형선언이 필요.

    •   #include <stdio.h>
      
        int sum(int a, int b);
      
        int main()
        {
          printf("sum = %d\n", sum(10, 20));
      
          return 0;
        }
      
        int sum(int a, int b)
        {
          return (a + b);
        }
  • 피 호출 함수가 main() 앞에 선언된 경우 원형선언 필요 X.

    •   #include <stdio.h>
      
        int sum(int a, int b)
        {
          return (a + b);
        }
      
        int main()
        {
          printf("sum = %d\n", sum(10, 20));
      
          return 0;
        }

함수의 호출

  • 함수는 일종의 부 프로그램.
  • 함수의 호출이 있어야 함.
  • 함수 호출의 방법.
    • 함수명과 매개변수의 열거.
  • 함수 호출과 프로그램 실행순서.
    • main() 시작.
    • ()를 만나면 함수의 호출이 발생.
    • 해당 함수 시작.
    • 해당 함수 수행 결과 반환.
    • main()의 남은 부분 수행

매개변수

  • 실 매개변수
    • 함수를 호출하는 함수(호출함수)에 쓰이는 매개변수.
  • 형식 매개변수
    • 호출 당하는 함수(피 호출함수)에 쓰이는 매개변수.
  • 실 매개변수와 형식 매개변수 사이에는 자료형과 변수의 개수가 일치해야 함.
  • 자료형이 일치하지 않을 경우 형 변환 발생.
  • 변수의 개수가 일치하지 않을 경우 컴파일 에러 발생.
    •   void main() {
          fnc1( a, b, c ); // 호출함수로서 a, b, c는 실 매개변수
        }
        void fnc1(int x, float y, double z) {
          // 피 호출 함수로서 x, y, z는 형식매개변수
        }

결과값 반환 return

  • 기능 :

    • 함수를 끝내고 제어와 함수 수행 결과를 호출 함수로 넘김.
  • 형식 :

    • return (수식);
    • return 수식;
  • 사용 예

    •   return 0; -> 상수 0 반환. (정상적인 종료 의미.)
        return 1; -> 상수 1 반환.
        return x; -> x 값 반환.
        return (x + y * z); -> 수식의 결과 값 반환.
        return ( sum( 10, 20 ) ); -> 다른 함수 호출.
  •   #include <stdio.h>
    
      int max(int x, int y);
      int min(int x, int y);
    
      int main()
      {
    
        int i = 10, j = 20;
    
        printf("max( %d, %d ) => %d\n", i, j, max(i, j));
        printf("min( %d, %d ) => %d\n", i, j, min(i, j));
    
        return 0;
      }
    
      int max(int x, int y)
      {
        return (x > y ? x : y);
      }
    
      int min(int x, int y)
      {
        if (x > y)
          return y;
        else
          return x;
      }

함수의 여러 가지 사용 예

  #include <stdio.h>

  //  함수 원형 선언.
  int sum(int, int);
  void test();

  //  main.
  int main()
  {
    int s;

    //  단순 호출.
    test();
    sum(10, 20);

    // 함수 결과를 변수에 반환.
    s = sum(30, 40);

    printf("sum from 30 to 40 = %d\n", s);
    // 호출 결과를 직접 사용.
    printf("sum from 100 to 200 = %d\n", sum(100, 200));

    return 0;
  }

  void test()
  {
    printf("FUNCTION EXAMPLE\n");
  }

  int sum(int a, int b)
  {
    int i, s = 0;
    for (i = a; i <= b; i++)
      s = s + i;

    return s;
  }
728x90
반응형

'Language > C' 카테고리의 다른 글

[C] 배열과 포인터 - 1  (0) 2020.12.25
[C] 함수와 기억 클래스 - 2  (0) 2020.12.25
[C] 선택 제어문과 반복 제어문  (0) 2020.12.20
[C] 입출력 함수와 연산자 - 2  (0) 2020.12.20
[C] 입출력 함수와 연산자 - 1  (0) 2020.12.15

+ Recent posts