언어/C

[코딩자율학습] 8일차 함수

홍시_코딩기록 2024. 3. 13. 23:39

양이 많아지기 시작했다...

 

📌 함수로 사칙연산하기

(형식)

반환형 함수명(전달값);

int main(void) {}

반황형 함수명(전달값) {
	// 수행할 문장
}

(함수 사칙연산)

void p(int num);

int main(void) {
	
	int num = 2;

	p(num);
	num = num + 3;

	p(num);
	num = num - 1;

	p(num);
	num = num * 3;

	p(num);
	num = num / 6;

	p(num);
	return 0;
}

void p(int num) {
	printf("num은 %d입니다\\n", num);
}

  • 원래는 계산식마다 printf()를 통해 문구를 출력했었지만
  • 함수를 통해서 간단하게 출력 가능!

 

더보기

💡 함수를 사용하는 이유

  1. 코드 중복 방지하고 효율적으로 프로그래밍 함.
  2. 다른 프로젝트에 재사용 가능

 

 

📌 사용자 정의 함수

는 두가지로 나뉨.

표준 함수

  • printf(), scanf(), rand() 함수 등이 대표적인 표준 함수
  • c언어에 이미 만들어져 있어서 프로그램을 작성할 때 형식에 맞춰 가져다 쓰면 됨.

사용자 정의 함수

  • 사용자가 직접 만들어 사용하는 함수
  • p( )함수처럼 함수 선언과 함수 정의 형식이 사용자 정의 함수를 만드는 방법.

 

 

📌 오답노트

함수에 관한 설명으로 잘 못된 것을 고르세요.

  1. 함수란 값을 입력받아 어떤 작업을 처리한 후 그 결과를 출력하는 것을 말한다.
  2. 함수를 선언할 떄는 반환형과 함수명을 적고 소괄호 안에 그 함수에서 어떤 값을 전달받을지 적는다.
  3. 함수가 어떤 일을 할지 정의 하는 것을 함수 정의라고 한다.
  4. 함수를 정의할 때는 함수 선언과 똑같이 적어야 된다.
더보기

💡 정답: 4

함수 선언과 함수 정의는 반환형, 함수명, 매개변수의 종류와 개수를 동이랗게 적어야 하지만, 매개변수 이름은 다르게 작성해도 됨.

 

 

 

📌 함수의 종류

1. 반환값이 없는 함수

  • 반환형을 void로 선언한 함수
#include <stdio.h>

void function_without_return(); // 함수 선언

int main(void) {

	function_without_return(); //반환값이 없는 함수 호출
	return 0;
}

void function_without_return() { //함수 정의
	printf("반환값이 없는 함수입니다.\\n");
}

 

2. 반환값이 있는 함수

#include <stdio.h>

int function_with_return(); // 함수 선언
void p(int num);

int main(void) {
	int ret;
	ret = function_with_return(); //반환값이 없는 함수 호출
	p(ret);
	return 0;
}

int function_with_return() { //함수 정의
	printf("반환값이 있는 함수입니다.\\n");
	return 10;
}

void p(int num) {
	printf("num은 %d 입니다.\\n", num);
}

  • 반환값이 있는 함수라서 void 대신 int를 반환형으로 작성
  • p( )함수는 function_With_Return() 함수의 반환값을 출력하므로 ret 변수를 p( )함수로 전달
  • 반환값이 있는 함수는 return 문으로 원하는 값이나 함수의 결괏값을, 함수로 호출한 곳으로 반환함.

 

3. 전달값이 없는 함수

  • 전달값은 함수를 호출할 때 함수에 전달하는 값으로 함수에서는 매개변수로 받음.
  • 전달값이 없으면 매개변수도 필요 없으므로 함수를 선언할 때나 정의할 때 함수명 다음에 오는 소괄호에 아무것도 넣지 않음.
  • 1번과 2번의 function_with, without 함수도 전달값이 없는 함수임.

 

 

4. 전달값이 있는 함수

void function_with_params(int num1, int num2, int num3); //함수 선언

int main(void) {
	function_with_params(1, 2, 3);// 전달값이 있는 함수 호출
	return 0;
}

void function_with_params(int num1, int num2, int num3) {
	printf("전달값이 있는 함수, 전달값은 %d, %d, %d\\n", num1, num2, num3);
}
  • 반환값은 없고 전달값이 정수형 3개인 함수를 만들어봄.
  • 전달값을 매개변수로 받아 printf( )문으로 출력

 

 

5. 반환값과 전달값이 있는 함수

#include <stdio.h>

int apple(int total, int ate); //1. 함수 선언

int main(void) {
	int ret = apple(5, 2); // 3. 함수 호출
	printf("사과 5개 중에서 2개를 먹으면 %d가 남지요", ret);
	return 0;
}

int apple(int total, int ate) { //2. 함수 정의
	printf("전달값과 반환값이 있는 함수\\n");
	return total - ate;
}
  1. 함수 선언 : 반환값이 남은 사과 개수이므로 반환형은 int, 전달값인 total, ate도 int로 선언
  2. 함수 정의: 총 개수에서 먹은 개수를 뺴고 남은 개수 반환
  3. 함수 호출: apple( ) 함수를 호출하며 5, 2 전달하고, 반환값은 ret 변수에 저장.

** 반환값 따로 저장 안하고 printf()문에 함수 호출 넣어서 바로 출력 가능

printf("사과 %d개 중에서 %d개를 먹으면 %d가 남지요", 10, 4, apple(10, 4));

 

 

📌 사직연산 함수 만들기

#include <stdio.h>

//함수 선언
void p(int num);
int add(int num1, int num2);
int sub(int num1, int num2);
int mul(int num1, int num2);
int div(int num1, int num2);

int main(void) {
	int num = 2;
	p(num);
	num = add(num, 3); //더하기 함수 호출
	p(num);
	num = sub(num, 1); //빼기 함수 호출
	p(num);
	num = mul(num, 3); //곱하기 함수 호출
	p(num);
	num = div(num, 2); //나누기 함수 
	p(num);

	return 0;
}

//함수 정의
void p(int num) {
	printf("num은 %d입니다\\n", num);
}

int add(int num1, int num2) {
	return num1 + num2;
}
int sub(int num1, int num2) {
	return num1 - num2;
}
int mul(int num1, int num2) {
	return num1 * num2;
}
int div(int num1, int num2) {
	return num1 / num2;
}
  • 처음에 p(num);을 선언해서 2부터 나오는 듯
  • main()위에 함수 선언, main()아래에 함수 정의
  • p( )함수가 함수 선언 부분에서 어디에 있어도 무방(main보다 위쪽에 선언되있기만 하면 됨)