008. FUNCTION

Posted on by pkchan

함수는 어떤 구체적인 일을 수행하여 결과를 리턴해주는 코드의 한 블록을말합니다. 예를 들면 사용자에게 2개의 수를 입력받아 평균을 구하는 일이 자주 발생한다면, 이 내용을 함수로 정의하고 호출할 수 있습니다.

008-01 // STANDARD LIBRARY FUNCTIONS

#include < stdio.h >에서 불러온 stdio.h 파일에는 많은 함수가 정의되어 있습니다. 대표적으로 printf()와 scanf() 함수가 있습니다. stdio.h 파일 말고도 더 많은 라이브러리가 있고 수도 없이 많은 함수가 이미 정의되어 있습니다. 이렇게 c언어 라이브러리 형식으로 제공되는 함수를 표준 함수라고 부릅니다.

008-02 // USER DEFINED FUNCTIONS

사용자 정의 함수는 말 그대로 사용자가 정의해서 사용하는 함수를 말합니다.

Data_type functionName(data_type a, data_type b);

int main( void ) {

... .. ...

functionName(a, b);

... .. ...

}

Data_type functionName(data_type a, data_type b) {

//body of the function

}

C언어 컴파일러는 위에서 밑으로 순차적으로 읽으며 메인 함수를 최우선으로 실행합니다. 메인 함수를 실행 중에 사용자 정의 함수를 호출하는 functionName()을 만나면 함수를 정의하는 부분인 void functionName()을 찾아가서 실행한 후 함수가 종료되면 다시 호출하는 부분으로 돌아와서 메인 함수의 실행을 이어 갑니다. 함수의 호출이 정상적으로 이루어지기 위해서는 함수 원형 혹은 함수 정의가 메인 함수 위에 존재해야 합니다.

사용자 정의 함수의 대표적인 장점은
1. 코드를 이해하기 쉽고, 그로 인해 유지 보수가 쉬워집니다.
2. 사용자 정의 함수는 다른 프로그램에서 재사용이 가능합니다.
3. 큰 프로그램이라면 작은 모듈로 나누어 여러 프로그래머가 동시에 개발이 가능합니다.

주의할 점은 함수 호출 인자를 함수 정의 인자로 전달해줄 때 변수가 전달되는 것이 아닌 변수의 값만 전달되므로 함수 호출 인자의 자료형과 함수 정의인자 자료형은 같아야 합니다. 또한 함수를 정의할 때 지정해주는 함수의 자료형은 함수 실행 후 리턴해주는 값의 자료형과 일치해야 합니다.

008-03 // FUNCTION TYPES

1. 리턴해주는 값이 있고 함수 인자도 있는 경우

/*
 example 008-01
 C language function with argument and a return value
*/

#include <stdio.h>

int checkPrimeNumber(int n);

int main(void) {

          int n, flag;

          printf("Enter a positive integer: ");
          scanf("%d",&n);

          flag = checkPrimeNumber(n);

          if(flag==1)
                    printf("%d is not a prime number",n);
          else
                    printf("%d is a prime number",n);

          return 0;

}

int checkPrimeNumber(int n) {

          int i;

          for(i=2; i <= n/2; ++i) {

                    if(n%i == 0)

                              return 1;

          }

          return 0;

}

2. 리턴해주는 값이 있고 함수 인자는 없는 경우

/*
 example 008-02
 C language function with no argument and a return value
*/

#include < stdio.h >

int getInteger(void);

int main(void) {

          int n, i, flag = 0;

          n = getInteger();

          for(i=2; i<=n/2; ++i) {

                    if(n%i==0) {

                              flag = 1;
                              break;

                    }

          }

          if (flag == 1)
                    printf("%d is not a prime number.", n);
          else
                    printf("%d is a prime number.", n);

          return 0;

}

int getInteger(void) {

          int n;

          printf("Enter a positive integer: ");
          scanf("%d",&n);

          return n;

}

3. 리턴해주는 값이 없고 함수 인자는 있는 경우

/*
 example 008-03
 C language function with argument and no return value
*/

#include < stdio.h >

void checkPrimeAndDisplay(int n);

int main(void) {

          int n;

          printf("Enter a positive integer: ");
          scanf("%d",&n);

          checkPrimeAndDisplay(n);

          return 0;

}

void checkPrimeAndDisplay(int n) {

          int i, flag = 0;

          for(i=2; i <= n/2; ++i) {

                    if(n%i == 0){

                              flag = 1;
                              break;

                    }

          }

          if(flag == 1)
                    printf("%d is not a prime number.",n);
          else
                    printf("%d is a prime number.", n);

}

4. 리턴해주는 값이 없고 함수 인자도 없는 경우

/*
 example 008-04
 C language function with no argument and no return value
*/

#include < stdio.h >

void checkPrimeNumber();

int main(void) {

          checkPrimeNumber(); 

          return 0;

}

void checkPrimeNumber() {

          int n, i, flag=0;

          printf("Enter a positive integer: ");
          scanf("%d",&n);

          for(i=2; i <= n/2; ++i) {

                    if(n%i == 0) {

                              flag = 1;

                    }

          }

          if (flag == 1)
                    printf("%d is not a prime number.", n);
          else
                    printf("%d is a prime number.", n);

}

008-04 // RECURSION

재귀 함수는 자기 자신을 호출하는 함수를 말합니다. 함수로 어떤 명령을 반복할 때 자주 쓰입니다. 중요한 점은 반복을 탈출하는 조건이 꼭 있어야 한다는 것입니다.

/*
 example 008-05
 C language recursion function
*/

#include < stdio.h >

int sum(int n);

int main() {

          int number, result;

          printf("Enter a positive integer: ");
          scanf("%d", &number);

          result = sum(number);

          printf("sum=%d", result);

}

int sum(int num) {

          if (num!=0)
                    return num + sum(num-1);
          else
                    return num;

}

Leave a Reply