C 언어 함수 만들기

CBeginner
지금 연습하기

소개

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

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

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 92%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

함수 선언 및 정의

이 단계에서는 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 에서 모듈식이고 재사용 가능한 코드를 구축하는 데 필수적입니다.