포털:고등학교/정보·통신 계열 전문 교과(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의 제곱근 계산 |