함수란?
- 특별한 기능을 수행하는 코드 단위
#두 정수값을 더하는 함수 만들기
1. 함수의 기능에 맞는 이름을 정한다. -> sum
2. 매개변수를 선언한다. -> (int a, int b)
3. 리턴값의 형태를 적어둔다. -> int
4. 함수의 몸체를 만들자 -> {int res;, res=a+b;, return res;}
->
int sum(int a, int b)
{
int res;
res=a+b;
return res;
}
함수 사용하기(호출)
- 함수의 이름으로 호출하여 함수의 기능을 사용
-함수를 호출할 땐느 함수에 필요한 값을 전달인자로 준다.함수의 호출 -> sum(10, 20);
-전달인자가 필요 없는 함수를 호출할 때도 괄호는 사용해야 함.
sum이 전달인자가 필요없는 함수라면 -> sum();
함수의 실행과정
- 함수는 호출하기 전에 정의되어 있어야 한다.
- 다른 함수가 먼저 있어도 프로그램은 항상 메인함수부터 시작된다.
int sum(int a, int b) //sum함수가 메인함수 위에 있지만 { ... } int main() //메인함수부터 시작 { sum(1,2); //위에서 차례로 실행 ... }
- 메인함수의 실행 중에 다른 함수를 호출하면 그 때 함수가 실행된다.
-함수가 호출되면, 함수마다 고유의 저장공간을 할당 받는다. 고유의 저장공간에 함수 나부에 선언된 변수를 위한 메모리를 잡는다.- 함수가 호출될 때 전달인자는 매개변수에 복사된다.
a b 메인함수의 두 변수 a, b 값 -> 10 20 | 복사 | sum함수에 있는 두 매개변수 a, b -> 10 20
- 함수가 실행을 마치고 리턴할 때는 제어와 함께 리턴값도 돌려준다.
- 함수가 리턴하는 값은 복사되어 임시기억공간에 저장되며, 이 값은 따로 저장하지 않으며 버려지므로 다른 변수에 저장해서 사용한다.
int res; //sum함수가 리턴하는 값이 int형이므로 int형 변수 선언 res = sum(10, 20); //sum함수가 리턴하는 값을 저장한다.
예시문제1
- 성적 계산 프로그램(함수 사용)
예시문제2
- 계산 프로그램(함수 사용)
함수의 선언
- 함수를 호출하기 전에 정의되어 있지 않으면 컴파일에러가 발생한다.
int main() { sum(10, 20); //sum이 뭐지? -> 정의되지 않음 }
- 호출함수 뒤에 함수를 정의할 경우에는 먼저 선언해야 한다.
선언 int sum(int a, int b); //sum이라는 함수가 있구나.. 호출 int main() { sum(10, 20); //이제 호출해야지! }
- 함수의 선언은 함수의 머리를 그대로 적고 세미콜론을 붙인다.
int sum(int a, int b);
예시문제3
- 계산 프로그램2(함수 사용)
예시문제4
- 계산 프로그램3(함수 사용)
예시문제4
- 계산 프로그램4(함수 사용)
매개변수가 없는 함수
- 양수값을 키보드로 입력 받아서 리턴하는 함수의 예
int get_positive() //매개변수가 없고 리턴값만 있다. { int pos; printf("양수값 하나를 입력하세요 : "); scanf("%d", &pos); return pos; }
- 메인함수에서 호출할 때
int main() { int n; n=get_positive(); //전달인자는 없지만 리턴하는 값은 사용한다. ... }
리턴값이 없는 함수
- 전달인자의 값을 단지 출력하는 경우라면 리턴값이 필요없다.
- 리턴값이 없는 함수는 리턴값의 형태를 void로 한다.
void user_print(int); <- 리턴값이 없는 함수의 원형
- 특정문자를 반복해서 출력하는 함수의 예
void char_print(char ch, int n) //매개번수는 있지만 리하는 값은 없다. { int i; print(4%c문자를 %c번 출력합니다 => , ch, n); for(=0; icn; it+){ printf("%c», ch); } }
- 메인함수에서 호출할 때
int main() { char_print(*X', 5); //출력할 문자와 그 횟수를 진달인자로 주고 호출한다. return 0; }
리턴값과 매개변수가 모두 없는 함수
- 일정한 문자열만을 출력하는 경우에 사용
void title_print //매개변수와 리턴값이 모두 없다. { printf("======<< 성적표 >>=========\n\n"); printf("언어 역사 과학 총점 평균\n"); }
- 메인함수에서 호출할 때
int main() { title_print(); //함수와 이름만으로 호출한다. ... }
예시문제5
- 다양한 형태의 함수 만들기1(함수 사용)
예시문제6
- 다양한 형태의 함수 만들기2(함수 사용)
예시문제7
- 다양한 형태의 함수 만들기3(함수 사용)
for(i=2; i<=100; i++){
i가 소수이면 출력;
}
int prime_check(int n)
{
int i; //반복 제어변수
for(i=2; i<=n-1; i++) //i는 2부터 n-1까지 하나씩 증가
{
if(n%i==0) return 0; //n이 한번이라도 i로 나누어 떨어지면 소수가 아니다
}
return 1; //for문 중간에 리턴하지 않았다면 소수이다.
}
예시문제8
- 사칙연산 프로그램(함수 사용)