본문 바로가기
Computer Science/C 언어

[C #9] 함수 (Functions)

by rnasterofmysea 2024. 12. 7.
728x90
반응형

9장: 함수 (Functions)


9.1 함수의 개요

함수는 특정 작업을 수행하는 코드 블록으로, 코드의 재사용성가독성을 높이는 데 사용됩니다.

함수 정의

반환형 함수이름(매개변수) {
    명령문;
    return 값;  // 반환형이 void인 경우 생략 가능
}

함수 호출

함수이름(인수);

9.2 함수의 구성 요소

  1. 반환형 (Return Type)
    • 함수가 반환하는 값의 데이터 타입.
    • 반환값이 없으면 void 사용.
  2. 함수 이름
    • 함수를 호출할 때 사용하는 이름.
  3. 매개변수 (Parameters)
    • 함수가 호출될 때 전달받는 값.
  4. 함수 본문
    • 함수가 수행할 작업을 정의하는 코드 블록.
  5. 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

재귀 함수의 구성

  1. 종료 조건 (Base Case): 무한 반복을 방지하기 위해 종료 조건이 반드시 필요합니다.
  2. 재귀 호출 (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