C 언어 함수 만들기

CBeginner
지금 연습하기

소개

이 랩에서는 C 프로그래밍에서 함수를 생성하고 사용하는 방법을 배우게 됩니다. 이 랩은 함수의 선언 및 정의의 기본 개념, 함수 인자 이해, 함수에서 값 반환, void 함수 처리, 그리고 함수 사용 실습을 다룹니다. 실습 예제와 연습을 통해 이러한 주제를 탐구하여 모듈화되고 재사용 가능한 C 코드를 작성하는 기술을 습득하게 됩니다.

이 랩은 함수 선언 및 정의의 기본 사항을 소개하고, 간단한 함수를 생성하고 호출하는 방법을 보여주는 것으로 시작합니다. 그런 다음 함수 인자에 대한 이해를 깊이 있게 다루며, 다양한 데이터 유형을 함수에 입력으로 전달하는 방법을 보여줍니다. 또한 이 랩은 반환 값의 개념을 다루며, 함수에서 데이터를 반환하는 방법을 안내합니다. 추가적으로, 이 랩은 어떤 값도 반환하지 않는 void 함수의 사용법을 탐구합니다. 마지막으로, 다양한 연습을 통해 학습한 개념을 실습하고 적용할 기회를 갖게 됩니다.

함수 선언 및 정의

이 단계에서는 C 프로그래밍에서 함수를 선언하고 정의하는 방법을 배우게 됩니다. 함수는 코드를 구성하고 모듈화하는 데 도움이 되는 기본적인 구성 요소입니다.

~/project 디렉토리에 functions_demo.c라는 새 파일을 생성하는 것으로 시작해 보겠습니다.

cd ~/project
touch functions_demo.c

이제 간단한 함수 선언과 정의를 작성해 보겠습니다.

#include <stdio.h>

// Function declaration (prototype)
void greet(char* name);

// Main function
int main() {
    // Calling the function
    greet("LabEx User");
    return 0;
}

// Function definition
void greet(char* name) {
    printf("Hello, %s! Welcome to C programming.\n", name);
}

주요 구성 요소를 살펴보겠습니다.

  • void greet(char* name)은 함수 선언 (프로토타입) 입니다.
  • 함수는 문자 포인터 (문자열) 를 인자로 받습니다.
  • void는 함수가 값을 반환하지 않음을 나타냅니다.
  • main() 내부에서 인자와 함께 함수를 호출합니다.
  • 함수 정의는 실제 로직을 구현하는 main 함수 다음에 옵니다.

프로그램을 컴파일하고 실행합니다.

gcc functions_demo.c -o functions_demo
./functions_demo

예시 출력:

Hello, LabEx User! Welcome to C programming.

함수는 다음을 돕습니다.

  • 코드를 재사용 가능한 블록으로 구성합니다.
  • 코드 가독성을 향상시킵니다.
  • 반복을 줄입니다.
  • 프로그램을 모듈화합니다.

함수 인자 이해하기

이 단계에서는 C 프로그래밍에서 함수 인자를 사용하는 방법을 배우게 됩니다. 함수 인자를 사용하면 함수에 데이터를 전달하여 함수를 더욱 유연하고 재사용 가능하게 만들 수 있습니다.

~/project 디렉토리에 function_arguments.c라는 새 파일을 생성해 보겠습니다.

cd ~/project
touch function_arguments.c

이제 다양한 유형의 함수 인자를 보여주는 프로그램을 작성해 보겠습니다.

#include <stdio.h>

// Function with multiple arguments
int calculate_rectangle_area(int length, int width) {
    return length * width;
}

// Function with a floating-point argument
float convert_celsius_to_fahrenheit(float celsius) {
    return (celsius * 9/5) + 32;
}

int main() {
    // Using integer arguments
    int length = 5;
    int width = 3;
    int area = calculate_rectangle_area(length, width);
    printf("Rectangle Area: %d square units\n", area);

    // Using floating-point argument
    float celsius = 25.0;
    float fahrenheit = convert_celsius_to_fahrenheit(celsius);
    printf("%.1f°C is %.1f°F\n", celsius, fahrenheit);

    return 0;
}

주요 개념을 살펴보겠습니다.

  • 함수는 서로 다른 유형의 여러 인자를 가질 수 있습니다.
  • calculate_rectangle_area()는 두 개의 정수 인자를 받습니다.
  • convert_celsius_to_fahrenheit()는 float 인자를 받습니다.
  • C 에서 인자는 값으로 전달됩니다 (복사본이 생성됨).
  • 함수는 계산에 이러한 인자를 사용할 수 있습니다.

프로그램을 컴파일하고 실행합니다.

gcc function_arguments.c -o function_arguments
./function_arguments

예시 출력:

Rectangle Area: 15 square units
25.0°C is 77.0°F

함수 인자에 대한 주요 사항:

  • 인자는 함수에 입력을 제공합니다.
  • 변수 또는 직접 값을 전달할 수 있습니다.
  • 인자의 수와 유형은 함수 선언과 일치해야 합니다.
  • 인자는 함수를 더욱 다재다능하고 재사용 가능하게 만드는 데 도움이 됩니다.

함수 반환 값

이 단계에서는 C 프로그래밍에서 함수에서 값을 반환하는 방법을 배우게 됩니다. 반환 값을 사용하면 함수가 결과를 계산하고 호출 코드에 다시 보낼 수 있습니다.

~/project 디렉토리에 function_returns.c라는 새 파일을 생성해 보겠습니다.

cd ~/project
touch function_returns.c

이제 다양한 유형의 반환 값을 보여주는 프로그램을 작성해 보겠습니다.

#include <stdio.h>

// Function returning an integer
int square(int number) {
    return number * number;
}

// Function returning a float
float calculate_average(int a, int b, int c) {
    return (float)(a + b + c) / 3;
}

// Function returning a character
char get_grade(int score) {
    if (score >= 90) return 'A';
    else if (score >= 80) return 'B';
    else if (score >= 70) return 'C';
    else if (score >= 60) return 'D';
    else return 'F';
}

int main() {
    // Using integer return value
    int num = 7;
    int squared = square(num);
    printf("Square of %d is %d\n", num, squared);

    // Using float return value
    int math = 85, science = 92, english = 78;
    float average = calculate_average(math, science, english);
    printf("Average score: %.2f\n", average);

    // Using character return value
    int student_score = 85;
    char grade = get_grade(student_score);
    printf("Student score %d gets grade %c\n", student_score, grade);

    return 0;
}

주요 개념을 살펴보겠습니다.

  • 함수는 서로 다른 데이터 유형을 반환할 수 있습니다.
  • square()는 정수 결과를 반환합니다.
  • calculate_average()는 float 를 반환합니다.
  • get_grade()는 문자를 반환합니다.
  • return 키워드는 값을 호출 함수로 다시 보냅니다.
  • 반환 유형은 함수 선언과 일치해야 합니다.

프로그램을 컴파일하고 실행합니다.

gcc function_returns.c -o function_returns
./function_returns

예시 출력:

Square of 7 is 49
Average score: 85.00
Student score 85 gets grade B

반환 값에 대한 주요 사항:

  • 반환 값을 사용하면 함수가 결과를 계산하고 다시 보낼 수 있습니다.
  • 함수의 목적에 따라 적절한 반환 유형을 사용합니다.
  • 반환 값을 직접 사용하거나 변수에 저장할 수 있습니다.
  • 반환 값은 함수를 더욱 강력하고 유연하게 만듭니다.

Void 함수 처리

이 단계에서는 C 프로그래밍에서 void 함수에 대해 배우게 됩니다. void 함수는 값을 반환하지 않고 작업을 수행하며, 결과를 다시 보낼 필요가 없는 작업에 유용합니다.

~/project 디렉토리에 void_functions.c라는 새 파일을 생성해 보겠습니다.

cd ~/project
touch void_functions.c

이제 void 함수를 보여주는 프로그램을 작성해 보겠습니다.

#include <stdio.h>

// Void function to print a welcome message
void print_welcome() {
    printf("Welcome to the C Programming Lab!\n");
}

// Void function with parameters to display student information
void display_student_info(char* name, int age) {
    printf("Student Name: %s\n", name);
    printf("Student Age: %d\n", age);
}

// Void function to draw a simple pattern
void draw_pattern(int size) {
    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {
            printf("* ");
        }
        printf("\n");
    }
}

int main() {
    // Calling void functions
    print_welcome();

    // Void function with parameters
    char* student_name = "LabEx User";
    int student_age = 25;
    display_student_info(student_name, student_age);

    // Void function with a pattern
    int pattern_size = 3;
    printf("\nDrawing a %dx%d pattern:\n", pattern_size, pattern_size);
    draw_pattern(pattern_size);

    return 0;
}

주요 개념을 살펴보겠습니다.

  • Void 함수는 반환 유형으로 void를 갖습니다.
  • 값을 반환하지 않고 작업을 수행합니다.
  • print_welcome()은 단순히 메시지를 출력합니다.
  • display_student_info()는 매개변수를 받아 정보를 출력합니다.
  • draw_pattern()은 중첩 루프를 사용하여 시각적 패턴을 만듭니다.
  • Void 함수는 일반 함수처럼 호출됩니다.
  • Void 함수에서는 값과 함께 return을 사용할 수 없습니다.

프로그램을 컴파일하고 실행합니다.

gcc void_functions.c -o void_functions
./void_functions

예시 출력:

Welcome to the C Programming Lab!
Student Name: LabEx User
Student Age: 25

Drawing a 3x3 pattern:
* * *
* * *
* * *

Void 함수에 대한 주요 사항:

  • 값을 반환할 필요가 없는 작업에 사용됩니다.
  • 매개변수를 가질 수 있습니다.
  • 출력, 로깅 또는 특정 작업을 수행하는 데 유용합니다.
  • 코드를 구성하고 모듈화하는 데 도움이 됩니다.
  • return을 사용하여 값을 반환할 수 없습니다.

함수 사용 연습

이 마지막 단계에서는 C 에서 함수에 대해 배운 모든 내용을 적용하여 여러 함수 유형과 사용법을 보여주는 포괄적인 프로그램을 만들 것입니다.

~/project 디렉토리에 calculator.c라는 파일을 생성해 보겠습니다.

cd ~/project
touch calculator.c

이제 다양한 함수를 사용하여 간단한 계산기를 구현하는 프로그램을 작성해 보겠습니다.

#include <stdio.h>

// Function to add two numbers
int add(int a, int b) {
    return a + b;
}

// Function to subtract two numbers
int subtract(int a, int b) {
    return a - b;
}

// Function to multiply two numbers
int multiply(int a, int b) {
    return a * b;
}

// Function to divide two numbers with error handling
float divide(int a, int b) {
    if (b == 0) {
        printf("Error: Division by zero!\n");
        return 0;
    }
    return (float)a / b;
}

// Void function to display calculator menu
void display_menu() {
    printf("\n--- Simple Calculator ---\n");
    printf("1. Addition\n");
    printf("2. Subtraction\n");
    printf("3. Multiplication\n");
    printf("4. Division\n");
    printf("5. Exit\n");
    printf("Enter your choice: ");
}

int main() {
    int choice, num1, num2;
    float result;

    while (1) {
        display_menu();
        scanf("%d", &choice);

        // Exit condition
        if (choice == 5) {
            printf("Goodbye!\n");
            break;
        }

        // Validate choice
        if (choice < 1 || choice > 4) {
            printf("Invalid choice. Try again.\n");
            continue;
        }

        // Get user input
        printf("Enter two numbers: ");
        scanf("%d %d", &num1, &num2);

        // Perform calculation based on user choice
        switch (choice) {
            case 1:
                result = add(num1, num2);
                printf("Result: %d + %d = %d\n", num1, num2, (int)result);
                break;
            case 2:
                result = subtract(num1, num2);
                printf("Result: %d - %d = %d\n", num1, num2, (int)result);
                break;
            case 3:
                result = multiply(num1, num2);
                printf("Result: %d * %d = %d\n", num1, num2, (int)result);
                break;
            case 4:
                result = divide(num1, num2);
                printf("Result: %d / %d = %.2f\n", num1, num2, result);
                break;
        }
    }

    return 0;
}

주요 개념을 살펴보겠습니다.

  • 여러 함수 유형이 사용됩니다 (반환 값, void 함수).
  • 함수는 특정 수학적 연산을 수행합니다.
  • display_menu()는 메뉴를 보여주는 void 함수입니다.
  • 산술 함수는 계산된 결과를 반환합니다.
  • main() 함수는 메뉴 기반 계산기를 구현합니다.
  • 0 으로 나누기에 대한 오류 처리가 포함되어 있습니다.
  • switch 문은 연산을 선택하는 데 사용됩니다.

프로그램을 컴파일하고 실행합니다.

gcc calculator.c -o calculator
./calculator

예시 상호 작용:

--- Simple Calculator ---
1. Addition
2. Subtraction
3. Multiplication
4. Division
5. Exit
Enter your choice: 1
Enter two numbers: 10 5
Result: 10 + 5 = 15

--- Simple Calculator ---
...
Enter your choice: 5
Goodbye!

함수 사용에 대한 주요 사항:

  • 서로 다른 함수 유형을 결합합니다.
  • 함수를 사용하여 복잡한 문제를 세분화합니다.
  • 오류 처리를 구현합니다.
  • 모듈식이고 재사용 가능한 코드를 만듭니다.

요약

이 랩에서는 C 프로그래밍에서 함수를 선언하고 정의하는 방법, 함수 인자 (argument) 를 이해하는 방법, 함수에서 반환 값 (return value) 을 반환하는 방법, void 함수를 처리하는 방법, 그리고 함수 사용을 연습하는 방법을 배웠습니다. 사용자를 환영하는 간단한 함수를 생성하는 것으로 시작하여, 여러 인자와 반환 값을 가진 더 복잡한 함수를 탐구했습니다. 또한 void 함수를 사용하는 방법과 프로그램에서 함수 사용을 연습하는 방법을 배웠습니다. 이러한 기본적인 개념은 C 에서 모듈식이고 재사용 가능한 코드를 구축하는 데 필수적입니다.