[C언어] 함수

이가영·2023년 8월 18일
0

C언어

목록 보기
8/16
post-thumbnail

함수

함수란?

  • 특별한 기능을 수행하는 코드 단위
#두 정수값을 더하는 함수 만들기   
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("%, 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(함수 사용)

함수의 필요성

  • 프로그램이 크거나 복잡하면 함수를 만드는 것이 좋다.
    -2부터 100까지의 수 중에서 소수를 모두 구하는 예
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문 중간에 리턴하지 않았다면 소수이다.
}
  • 잘 만들어진 함수는 코드의 재활용성을 높인다.
    -printf함수와 scanf함수는 이미 만들어진 함수를 사용하는 것이다.
  • 그러므로 함수는 재활용이 잘 되도록 작성해야 한다.

예시문제8

  • 사칙연산 프로그램(함수 사용)
profile
gy’s portfolio

0개의 댓글