양이 많아지기 시작했다...
📌 함수로 사칙연산하기
(형식)
반환형 함수명(전달값);
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()를 통해 문구를 출력했었지만
- 함수를 통해서 간단하게 출력 가능!
더보기
💡 함수를 사용하는 이유
- 코드 중복 방지하고 효율적으로 프로그래밍 함.
- 다른 프로젝트에 재사용 가능
📌 사용자 정의 함수
는 두가지로 나뉨.
표준 함수
- printf(), scanf(), rand() 함수 등이 대표적인 표준 함수
- c언어에 이미 만들어져 있어서 프로그램을 작성할 때 형식에 맞춰 가져다 쓰면 됨.
사용자 정의 함수
- 사용자가 직접 만들어 사용하는 함수
- p( )함수처럼 함수 선언과 함수 정의 형식이 사용자 정의 함수를 만드는 방법.
📌 오답노트
❓ 함수에 관한 설명으로 잘 못된 것을 고르세요.
- 함수란 값을 입력받아 어떤 작업을 처리한 후 그 결과를 출력하는 것을 말한다.
- 함수를 선언할 떄는 반환형과 함수명을 적고 소괄호 안에 그 함수에서 어떤 값을 전달받을지 적는다.
- 함수가 어떤 일을 할지 정의 하는 것을 함수 정의라고 한다.
- 함수를 정의할 때는 함수 선언과 똑같이 적어야 된다.
더보기
💡 정답: 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;
}
- 함수 선언 : 반환값이 남은 사과 개수이므로 반환형은 int, 전달값인 total, ate도 int로 선언
- 함수 정의: 총 개수에서 먹은 개수를 뺴고 남은 개수 반환
- 함수 호출: 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보다 위쪽에 선언되있기만 하면 됨)
'언어 > C' 카테고리의 다른 글
[코딩자율학습] 10일차 배열과 문자열 (0) | 2024.03.15 |
---|---|
[코딩자율학습] 9일차 프로젝트: 비밀번호 마스터 (0) | 2024.03.14 |
[코딩자율학습] 7일차 여러방향으로 분기하기 (1) | 2024.03.12 |
[코딩자율학습] 6일차 조건에 따라 분기하기 (0) | 2024.03.11 |
[코딩자율학습] 5일차 이중 반복문 (0) | 2024.03.08 |