포털:고등학교/정보·통신 계열 전문 교과(2015)/프로그래밍/함수

위키배움터

함수란[편집]

함수[편집]
  • 프로그램 코드를 재사용하는 유용한 도구이다.
  • 함수는 특정작업을 수행하는 코드의 집합으로, 필요한 데이터를 전달받고 작업이 완료되면 그 결과를 함수를 호출한 곳으로 반환할 수 있다.
함수의 구분[편집]
  • 사용자 정의 함수 : 프로그래머가 정의하는 함수
  • 라이브러리 함수 : 컴파일러가 기본적으로 제공하는 함수

사용자 정의 함수[편집]

함수를 작성하는 것을 C 언어에서는 함수를 ‘정의(Definition)한다’라고 하며, 함수를 사용하는 것을 함수를 ‘호출(Call)한다’고 한다.

함수의 호출[편집]
함수를 호출(Function Call)하기 위해서는 프로그램 코드 중에 함수를 호출할 위치에 함수 이름을 쓰면 된다. 
함수가 호출되면 함수 안의 문장이 순차적으로 실행되며, 실행이 끝나면 호출한 원래 위치로 되돌아간다.
매개 변수와 인수[편집]
매개 변수(Parameter)는 함수 이름 뒤 소괄호 안에 넣는 변수들이다. 함수는 필요에 따라서 매개 변수를 이용해서 호출 시에 자료를 전달받을 수 있다. 
인수(Argument)는 호출 프로그램에 의하여 함수에 실제로 전달되는 값이고, 함수가 호출될 때마다 인수는 함수의 매개 변수에 전달된다.
반환[편집]
함수는 필요에 따라 자신을 호출한 곳으로 값을 반환(Return)할 수 있다. 
값을 반환하기 위해서는 함수를 정의할 때 함수 이름 앞에 반환할 값의 자료형을 제시한다.
함수totalScore는 정수 배열을 받아 배열의 요소를 합한 정숫값을 반환한다.
#include <stdio.h>
int totalScore(int grade[ ]) { →int는 함수 totalScore의 반환형 매개 변수는 배열
    int countSubject, sum=0;
    for(countSubject=0; countSubject<4; countSubject++) {
        sum = sum + grade[countSubject];
    }
    return sum; → sum은 함수 totalScore의 반환할 값
}
int main( )
{
    int stScore1[5] = { 87, 92, 95, 91, 0};
    int stScore2[5] = { 68, 95, 76, 88, 0};
    int stScore3[5] = { 77, 88, 91, 87, 0};
    int stScore4[5] = { 78, 81, 96, 76, 0};
    stScore1[4] = totalScore(stScore1); → 총점을 구할 때마다 함수를 호출하면 됨
    printf("1번 학생의 총점은 %d", stScore1[4]);
    return 0;
}
실행결과 : 1번 학생의 총점은 365
함수의 선언[편집]
main( ) 함수 위에 사용자 정의 함수를 정의하는 것이 필요하다.
함수 원형(Function Prototype)은 함수가 사용되기 이전 즉, main( ) 함수 위에 선언해야 한다.
#include <stdio.h>
int totalScore(int grade[ ]); → 함수의 선언
int main( )
{
   int stScore1[5] = { 87, 92, 95, 91, 0};
   int stScore2[5] = { 68, 95, 76, 88, 0};
   int stScore3[5] = { 77, 88, 91, 87, 0};
   int stScore4[5] = { 78, 81, 96, 76, 0};
   stScore1[4] = totalScore(stScore1); → 총점을 구할 때마다 함수를 호출하면 됨
   printf("1번 학생의 총점은 %d", stScore1[4]);
   return 0;
}
int totalScore(int grade[ ]) {
    int countSubject, sum=0;
    for(countSubject=0; countSubject<4; countSubject++) {
       sum = sum + grade[countSubject];
    }
    return sum;
} → 함수 정의
실행 결과 : 1번 학생의 총점은 365

지역 변수와 전역 변수[편집]

지역 변수[편집]
지역 변수는 하나의 코드 블록 내부에서만 정의되는 변수를 말한다.
#include <stdio.h>
void add( )
{
     int num1; → add 함수용 지역 변수 선언
     int num2; 
     num1 = 10;
     num2 = num1 * 2;
}
int main( )
{
    int num2 = 5; → main 함수용 변수 num2 선언
    add( );
    printf("%d", num2);
    return 0;
}
실행 결과 : 5
전역 변수[편집]
전역 변수는 전역 변수가 선언된 파일 및 프로그램 전체에서 사용할 수 있는 변수이다.
만일 여러 개의 소스 파일로 하나의 실행 파일을 만드는 경우의 전역 변수는 프로그램에 포함된 여러 가지 소스 파일에서 사용할 수 있다.

되부름 함수[편집]

되부름 함수란 사용자 정의 함수 안에서 자기 자신을 다시 호출하는 함수를 말한다. 
되부름 함수는 재귀 호출(Recursive Call)이라고도 하는데, 이는 어떤 문제를 풀 때 큰 문제를 큰 문제와 동일한 규칙을 갖고 있는 반복되는 형태의 작은 문제로 만드는 방식이다.
2개의 사용자 정의 함수가 있는데, 하나는 재귀 호출을 이용한 것이고 다른 하나는 반복문을 이용한 것으로 두 함수의 결과는 동일하다.
#include <stdio.h>
int factorial_r( int n )
{
    if ( n > 1)
    {
        return ( n*factorial_r(n-1));
    }
    else
    {
        return 1;
    }
}
int factorial_l( int n )
{
    int i, p=1;
    for ( i=1; i<=n; i++ )
    {
        p = p*i;
    }
    return p;
}
int main( )
{
   int recursive, loop;
   recursive = factorial_r(5);
   loop = factorial_l(5);
   printf("재귀 호출 %d\n", recursive );
   printf("반복문 %d\n", loop);
   return 0;
}
실행 결과 : 재귀호출 120 / 반복문 120

라이브러리 함수[편집]

라이브러리 함수는 사용자 정의 함수와는 다르게 C 언어 컴파일러가 기본적으로 제공하는 함수이다.

C 언어에서 라이브러리 함수가 사용되는 경우

  • 표준 입출력(시스템 함수)
  • 수학 연산
  • 문자열 처리
  • 시간 처리
  • 오류 처리
  • 데이터 검색과 정렬
난수 발생 함수[편집]
라이브러리 함수 중 많이 사용하는 함수가 난수 발생 함수이다. 난수는 규칙성 없이 임의로 생성되는 수이고, 암호학이나 게임 등에서 필수적으로 사용된다.
수학 함수[편집]
수학함수를 사용하기 위해서는 프로그램 선두에 math.h 헤더 파일을 포함시켜야 한다.
수학 함수의 종류
분류 함수 설명
double sin(double x) x의 사인값 계산
삼각 함수 double cos(double x) x의 코사인값 계산
double tan(double x) x의 탄젠트값 계산
double exp(double x) ex 계산
지수 함수 double log(double x) x의 자연로그 계산
double log10(double x) x의 상용로그 계산
int abs(int x) 정수 x의 절댓값 계산
기타 함수 double fabs(double x) 실수 x의 절댓값 계산
double sqrt(double x) x의 제곱근 계산