728x90
반응형
9장: 함수 (Functions)
9.1 함수의 개요
함수는 특정 작업을 수행하는 코드 블록으로, 코드의 재사용성과 가독성을 높이는 데 사용됩니다.
함수 정의
반환형 함수이름(매개변수) {
명령문;
return 값; // 반환형이 void인 경우 생략 가능
}
함수 호출
함수이름(인수);
9.2 함수의 구성 요소
- 반환형 (Return Type)
- 함수가 반환하는 값의 데이터 타입.
- 반환값이 없으면 void 사용.
- 함수 이름
- 함수를 호출할 때 사용하는 이름.
- 매개변수 (Parameters)
- 함수가 호출될 때 전달받는 값.
- 함수 본문
- 함수가 수행할 작업을 정의하는 코드 블록.
- return 문
- 값을 반환하거나 함수 실행을 종료.
예제
#include <stdio.h>
// 두 숫자의 합을 반환하는 함수
int add(int a, int b) {
return a + b;
}
int main(void) {
int result = add(10, 20); // 함수 호출
printf("결과: %d\n", result);
return 0;
}
출력 결과:
결과: 30
9.3 반환값이 없는 함수
void를 반환형으로 사용하여 반환값이 없는 함수를 정의할 수 있습니다.
예제
#include <stdio.h>
void printMessage() {
printf("안녕하세요, C 언어!\n");
}
int main(void) {
printMessage(); // 함수 호출
return 0;
}
출력 결과:
안녕하세요, C 언어!
9.4 매개변수가 없는 함수
매개변수가 없는 함수는 입력값 없이 항상 동일한 작업을 수행합니다.
예제
#include <stdio.h>
int getTen() {
return 10;
}
int main(void) {
int value = getTen(); // 함수 호출
printf("값: %d\n", value);
return 0;
}
출력 결과:
값: 10
9.5 함수와 배열
배열은 함수의 매개변수로 전달될 때 포인터로 전달됩니다.
예제: 배열을 함수로 전달
#include <stdio.h>
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main(void) {
int numbers[5] = {1, 2, 3, 4, 5};
printArray(numbers, 5); // 배열과 크기를 전달
return 0;
}
출력 결과:
1 2 3 4 5
9.6 재귀 함수 (Recursive Functions)
재귀 함수는 자기 자신을 호출하는 함수로, 반복 작업을 수행할 때 유용합니다.
예제: 팩토리얼 계산
#include <stdio.h>
int factorial(int n) {
if (n == 0 || n == 1) // 종료 조건
return 1;
else
return n * factorial(n - 1); // 재귀 호출
}
int main(void) {
int result = factorial(5); // 5! 계산
printf("결과: %d\n", result);
return 0;
}
출력 결과:
결과: 120
재귀 함수의 구성
- 종료 조건 (Base Case): 무한 반복을 방지하기 위해 종료 조건이 반드시 필요합니다.
- 재귀 호출 (Recursive Call): 함수가 자기 자신을 호출.
9.7 함수와 변수의 범위
1. 지역 변수 (Local Variables)
- 함수 내부에서 선언된 변수.
- 함수가 종료되면 메모리에서 해제.
2. 전역 변수 (Global Variables)
- 모든 함수에서 접근 가능한 변수.
- 파일의 가장 위에서 선언.
예제: 지역 변수와 전역 변수
#include <stdio.h>
int globalVar = 10; // 전역 변수
void printGlobal() {
printf("전역 변수: %d\n", globalVar);
}
int main(void) {
int localVar = 20; // 지역 변수
printf("지역 변수: %d\n", localVar);
printGlobal();
return 0;
}
출력 결과:
지역 변수: 20
전역 변수: 10
9.8 함수의 프로토타입
함수 프로토타입은 함수의 선언부를 미리 작성하여, 컴파일러가 함수 호출 전에 해당 함수의 정보를 알 수 있게 합니다.
형식
반환형 함수이름(매개변수 타입);
예제
#include <stdio.h>
// 함수 프로토타입 선언
int add(int, int);
int main(void) {
int result = add(10, 20); // 함수 호출
printf("결과: %d\n", result);
return 0;
}
// 함수 정의
int add(int a, int b) {
return a + b;
}
9.9 심화 예제
1. 두 수 중 큰 값 반환
#include <stdio.h>
int max(int a, int b) {
return (a > b) ? a : b;
}
int main(void) {
int num1 = 10, num2 = 20;
printf("더 큰 값: %d\n", max(num1, num2));
return 0;
}
2. 피보나치 수열 (재귀 함수 사용)
#include <stdio.h>
int fibonacci(int n) {
if (n == 0)
return 0;
else if (n == 1)
return 1;
else
return fibonacci(n - 1) + fibonacci(n - 2); // 재귀 호출
}
int main(void) {
for (int i = 0; i < 10; i++) {
printf("%d ", fibonacci(i));
}
printf("\n");
return 0;
}
출력 결과:
0 1 1 2 3 5 8 13 21 34
728x90
반응형
'Computer Science > C 언어' 카테고리의 다른 글
[C# 11] Makefile 분석 (0) | 2024.12.09 |
---|---|
[C 10] 프로그램 조직화 (Program Organization) (1) | 2024.12.08 |
[C #8] 배열 (Arrays) (1) | 2024.12.06 |
[C #7] 기본 데이터 타입 (Basic Types) (1) | 2024.12.05 |
[C #6] 반복문 (Loops) (0) | 2024.12.04 |