학이시습

[혼공C] 4주차_함수 알아보기 본문

혼공학습단/혼공C

[혼공C] 4주차_함수 알아보기

dbswndud 2024. 1. 29. 00:04

혼공C 커리큘럼


chapter 7

01. 함수의 작성과 사용

함수는 기능을 수행하는 코드 단위입니다. printf나 scanf 함수처럼 프로그램에서 바로 사용할 수 있게 구현되어 있는 함수를 표준 라이브러리 함수라고 합니다. (printf와 scanf 함수는 stdio.h 헤더파일에 들어있음)

 

함수를 만들 때는 다음 세가지가 중요합니다.

  • 함수 정의 : 함수를 실제 코드로 만드는 것이며 기능을 구현합니다.
  • 함수 호출 : 함수 호출을 해야지 사용할 수 있습니다.
  • 함수 선언 : 프로그램의 상단에서 어떤 함수를 사용할 것이라고 컴파일러에 정보를 주는 역할을 합니다.

 

함수 정의

새로운 함수를 만들 때에는 다음 3가지 질문을 생각하면서 만들면 좋습니다.

  • 함수의 기능에 맞는 이름은 무엇인가? (함수명)
  • 함수가 기능을 수행하는 데 필요한 데이터는 무엇인가? (매개변수)
  • 함수가 수행된 후의 결과는 무엇인가? (변환명)

 

이 질문의 답이 함수 원형을 이룹니다.

반환명 함수명(매개변수1, 매개변수2) {
    // 함수가 수행하는 명령, 결괏값을 돌려보냄
}

이렇게 함수를 만드는 것을 함수 정의라고 합니다. 함수 선언이 없으면 함수 정의는 항상 함수 호출 이전에 있어야 합니다.

 

함수명은 기능을 충분히 예상할 수 있도록 적절한 이름을 선택하며 변수 선언 규칙에 따라 만듭니다.

매개변수는 함수가 처리할 데이터를 저장하는 변수로 함수명 옆의 괄호 안에 선언합니다.

반환형은 함수가 기능을 수행한 후에 호출한 곳으로 돌려줄 값의 자료형을 적습니다.

 

함수 호출과 반환

함수 호출

함수를 호출할 때는 이름을 사용하며 함수에 인수(필요한 데이터)를 괄호 안에 넣어줍니다.

인수는 상수나 변수를 쓸 수 있고 수식을 사용하면 수식의 결괏값이 인수로 쓰입니다.

함수를 호출할 때 입력된 인수의 값은 호출된 함수의 매개변수에 복사되어 사용됩니다.

 

함수 반환 

호출된 함수가 실행을 끝내고 값을 반환할 때 return문을 사용합니다.

 

함수 선언

함수 선언은 컴파일러가 새로 만든 함수를 인식할 수 있도록 알리는 역할을 합니다.

함수 선언은 함수 원형에 세미콜론을 붙이면 됩니다.

함수형 함수명(매개변수1, 매개변수2);

 

함수 정의가 있는데 함수 선언이 필요한 이유

  • 함수 선언에서 반환값의 형태를 확인합니다.
  • 함수의 호출 형식에 문제가 없는지 검사합니다.

 

확인 문제

1. 다음은 두 실수의 평균을 구하는 함수를 호출하는 코드입니다. 함수 정의에서 빈칸에 적당한 내용을 채우세요.

double res;
res = average(1.5, 3.4);

______ average(________________) {
    double temp;
    temp = a + b;
    return(temp / 2.0);
}
double       double a, double b

 

 

2. 각 용어에 맞는 설명(연결)하기

함수 선언 함수 원형을 컴파일러에 알린다.
함수 정의  함수 원형을 설계하고 내용을 구현한다.
함수 호출 함수에 필요한 값을 주고 함수를 사용한다.

 

 

3. 187cm를 미터 단위로 환산하여 출력하는 프로그램을 작성하세요. 단, cm를 m로 환산하여 반환하는 함수를 만들고 함수 호출을 동해 구현합니다.

#include <stdio.h>

double centi_to_meter(int cm);

int main(void) {
	double res;

	res = centi_to_meter(187);
	printf("%.2lfm\n", res);

	return 0;
}

double centi_to_meter(int cm) {
	double meter;

	meter = cm / 100.0;

	return meter;
}

 

 

02. 여러 가지 함수 유형

함수는 기능에 따라 형태가 결정됩니다.

 

매개변수가 없는 함수

예를들면 키보드로 수를 입력하면 양수를 반환하는 함수를 만든다면 호출한 함수로부터 값을 받을 필요가 없으므로 매개변수도 필요 없습니다.

 

매개변수가 없는 함수는 매개변수 자리에 void를 사용합니다.

매개변수가 없는 함수를 호출할 때는 함수 이름()로 호출합니다.

 

반환값이 없는 함수

데이터를 받아서 단지 화면에 출력하는 함수라면 특별히 반환값이 필요없습니다.

반환값이 없는 함수는 반환형 자리에 void를 사용합니다.

반환값이 없는 함수는 돌려줄 값이 없으므로 return이 혼자 쓰입니다.

 

매개변수와 반환값이 모두 없는 함수

매개변수와 반환값이 모두 없는 함수의 매개변수와 반환형에 모두 void를 씁니다.

매개변수가 없는 함수와 반환형이 없는 함수의 특징을 모두 가지고 있습니다.

함수 정의에 return문을 안 쓰고 함수를 호출할 때는 값을 주지 않고 독립된 문장으로 쓰입니다.

 

재귀호출 함수

함수는 보통 다른 함수를 호출하는데 재귀호출 함수는 자기 자신을 호출합니다.

재귀호출 함수는 ㄴ중간에 정상적으로 종료할 수 있는 조건식이 없다면 계속 반복하여 자기 자신(함수)를 호출합니다.

 

확인 문제

1. 다음 중 함수 형태(원형)에 따라 옳게 사용(호출)된 것을 고르세요. 

1번 문제

 

 

2. main 함수와 실행겨로가를 참고하여 1부터 일정 수까지의 합을 구하는 sum 함수를 만들고 프로그램을 완성하세요.

int sum(int input);

int main(void) {
	sum(10);
	sum(100);
	return 0;
}

int sum(int input) {
	int i, result = 0;

	for (i = 1; i <= input; i++) {
		result += i;
	}

	printf("1부터 %d까지의 합은 %d입니다.\n", input, result);
}

 

 

3. 다음 프로그램의 실행결과를 예상해보세요.

#include <stdio.h>
int func(int n);
int poly(int n);
int main(void) {
    printf("%d\n", func(-3));
    return 0;
}

int func(int n) {
    int res;
    res = poly(n);
    if (res >= 0) return res;
    else return -res;
}

int poly(int n) {
    return((2 * n * n) + (3 * n));
}
9

 

선택 미션.. 을 하고 싶었지만 아무리 돌려봐도 무한대로 출력이 되어서 어떻게.. 선택 미션을.. 할 수가 없네요..