함수란?
function이란 뜻으로 특정 기능을 수행하는 코드들의 집합
**함수를 만드는 이유**
1) 하나의 main함수에서 모든 것을 관리하지않고 기능별로 세분화하는것이 코드가 복잡해지는 것을 막고 효율적인 유지 및 보수를 가능하게 하기 때문임
2) 반복적인 프로그래밍을 피할 수 있게 해주기 때문임 (코드의 재사용성을 높임)
3) 기능별로 함수를 선언해놓으면 가독성이 좋아짐
4) 절차지향적인 코딩을 객체 지향적인 코딩으로 바꿔줌
**함수의 형태**
int main (int num1) {
( 1.반환형태 ) ( 2.함수이름 ) ( 3.입력형태 )
(함수의 몸체)
(4.return result;)
}
1) 반환형 : 마지막 값을 반환시킬 때의 출력형태
2) 함수의 이름 : 함수를 호출할 때 쓰일 이름을 선언해줌
3) 매개변수 : 함수선언시 초기에 입력받는 값을 저장할 변수들을 선언함
(전달인자는 여러개 세팅가능함)
4) 값의 반환 : 함수의 최종적인 출력값을 세팅해주는 것 (함수의 반환값은 1개임)
/*
제목: 함수 예제 9-3
날짜: 2024.01.31.
내용: 함수의 기본 사용 및 이해
*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
// 팩토리얼을 계산하는 함수 (재귀적사용, 반환값있음)
int factorial(int num) {
if (num <= 1)
return 1;
else
return num * factorial(num - 1);
}
// 문자열을 출력하는 함수 (인자 없음, 반환값 없음)
void ShowMessage(void) {
printf("문자열 출력하는 함수 'ShowMessage' 호출.\n");
}
// 랜덤 수를 반환하는 함수 (인자 없음, 반환값 있음)
int RandomNum(void) {
return rand() % 100; // 0에서 99까지의 난수 반환
}
int main() {
int result; // 결과 저장 변수
ShowMessage(); // 문자열 출력 함수 호출
int num = 6; // 팩토리얼 계산할 숫자 설정
result = factorial(num); // 팩토리얼 함수 호출
printf("팩토리얼 결과: %d\n", result);
result = RandomNum(); // 랜덤 수 생성 함수 호출
printf("랜덤 수 결과: %d\n", result);
return 0;
}
**함수 특징**
-함수는 입력값과 그에 따른 출력값이 존재하기에 입력형태와 출력형태를 둘 다 지정해줘야하는게 기본이지만, 입력값(전달인자)이나 출력값(반환값)이 없거나 둘 중 한개만 있을 수도 있음
-함수를 호출하여 (전달인자를 입력하면) 바로 함수에 대한 호출값으로 대체 되기 때문에 함수를 함수(전달인자) = 함수의 호출값으로 생각할 수 있음
-한번 정의된 함수는 몇번이고 반복하여 호출할 수 있음
-전달인자에 (void)라고 설정한 함수에는 실제로 함수 호출시 전달인자를 입력하면 안됨
-main함수에서 함수를 호출하기 위해서 함수가 이미 선언되어 있어야하기 때문에 main함수보다 위에서 함수를 선언해둬야함
(그렇지 않으면 선언되지않은 변수처럼 에러가 발생하게 됨)
-main 함수위에 함수 전체를 놓게되어 가독성이 떨어지게 되면
int Increment(int n); 과 같은 형태로 함수를 선언만 해놓고 main함수 아래에 다시 함수정의를 선언해두는 것도 가능함
/*
제목: 함수 예제 9-4
날짜: 2024.01.31.
내용: 두 수의 최대 공약수 및 최소 공배수 구하기 - 두 수의 비교와 수학적 함수의 적용
*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
// 최대 공약수를 구하는 함수
int AbsGcd(int num1, int num2) {
if (num2 == 0) return num1;
else return AbsGcd(num2, num1 % num2); // 유클리드 호제법을 사용
}
// 최소 공배수를 구하는 함수
int AbsLcm(int num1, int num2) {
return (num1 * num2) / AbsGcd(num1, num2); // 최소 공배수는 두 수의 곱을 최대 공약수로 나눈 값
}
int main() {
int num1, num2;
printf("두 수의 최대 공약수와 최소 공배수를 구합니다: ");
scanf("%d %d", &num1, &num2);
printf("최대 공약수: %d\n", AbsGcd(num1, num2));
printf("최소 공배수: %d\n", AbsLcm(num1, num2));
return 0;
}
** 알아두면쓸만한 신기한 잡학사전 **
-printf함수도 사실 반환값이 존재한다 (출력시키는 문자열의 길이를 반환함)
/*
제목: 함수 예제 9-1
날짜: 2024.02.25.
내용: printf문의 결과값 반환 이해하기
*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int num1, num2;
// printf 함수는 출력한 문자의 수를 반환
num1 = printf("12345 \n");
num2 = printf("I love my home \n");
printf("%d %d ", num1, num2);
return 0;
}
'프로그래밍 언어 > C언어' 카테고리의 다른 글
C언어 기초이론 (반복문) (0) | 2024.06.13 |
---|---|
C언어 기초이론 (조건문) (0) | 2024.06.13 |
C언어 기초이론 (지역변수, 전역변수) (1) | 2024.06.13 |
C언어 기초이론 (재귀함수) (0) | 2024.06.13 |
C언어 기초이론 (배열) (1) | 2024.06.13 |