본문 바로가기
GD's IT Lectures : 기초부터 시리즈/C, C++ 기초부터 ~

[C/C++ 프로그래밍] 8. 함수

by GDNGY 2023. 5. 16.

Chapter 8. 함수

프로그래밍에서 가장 핵심적인 요소 중 하나인 '함수'에 대해 다룹니다. 함수는 프로그램의 특정 기능을 수행하는 코드 블록으로, 특정한 일을 수행하도록 설계됩니다. 이 챕터에서는 함수의 개념, 기본 구조, 종류, 활용 방법, 변수와의 관계, 함수 포인터, 람다 함수(단, C++에서만 가능), 그리고 함수를 활용한 프로그램 예제까지 광범위하게 다룹니다. 또한 함수와 배열, 함수와 포인터 같은 고급 주제도 소개합니다. 이 모든 내용을 통해 여러분은 함수의 전반적인 개념과 활용법을 이해하고 자신만의 함수를 작성하는 능력을 키울 수 있게 될 것입니다.

 


 

반응형

 


[Chapter 8. 함수]

 

8.1. 함수의 개념

8.1.1. 함수란?

8.1.2. 함수의 필요성과 장점

 

8.2. 함수의 기본 구조

8.2.1. 함수의 선언, 정의, 호출

8.2.2. 반환 타입과 매개변수

8.2.3. 함수의 프로토타입

 

8.3. 함수의 종류

8.3.1. 내장 함수

8.3.2. 사용자 정의 함수

8.3.3. 재귀 함수

 

8.4. 함수의 활용

8.4.1. 함수를 이용한 프로그램 구조화

8.4.2. 함수 오버로딩

8.4.3. 인라인 함수

 

8.5. 함수와 변수

8.5.1. 지역 변수와 전역 변수

8.5.2. 매개변수 전달 방식: 값에 의한 전달과 참조에 의한 전달

 

8.6. 함수 포인터

8.6.1. 함수 포인터의 개념과 활용

 

8.7. 람다 함수 (C++ only)

8.7.1. 람다 함수의 개념과 활용

 

8.8. 함수를 사용한 프로그램 예제

8.8.1. 간단한 계산기 프로그램 작성

8.8.2. 팩토리얼 계산 프로그램 작성

 

8.9. 함수에 대한 고급 주제

8.9.1. 함수와 배열

8.9.2. 함수와 포인터

 


8.1 함수의 개념

프로그래밍의 기본적인 구성 요소인 함수에 대해 배웁니다. 함수는 프로그램에서 특정 작업을 수행하는 코드의 모음이며, 재사용 가능하고 유지 관리가 쉽습니다.

 

8.1.1 함수란?

함수(function)는 하나의 특정 작업을 수행하는 코드의 집합입니다. 함수는 코드를 더 읽기 쉽고 관리하기 쉽게 만들어줍니다. 함수는 주로 프로그램에서 반복적으로 수행해야 하는 작업을 분리하여 작성합니다.

 

C와 C++에서 기본적인 함수 형태는 다음과 같습니다:

 

[예제] : C

int functionName(int parameter1, int parameter2) {
   // function body
   // ...
   return value;
}

 

[예제] : C++

auto functionName(int parameter1, int parameter2) -> int {
   // function body
   // ...
   return value;
}

 

위의 코드에서 functionName은 함수의 이름이며, parameter1와 parameter2는 함수가 받는 매개변수이며, int는 함수가 반환하는 값의 데이터 타입입니다. return 문은 함수에서 결과를 반환합니다.

 

8.1.2 함수의 필요성과 장점

함수는 프로그램을 더 이해하기 쉽게 만들고 코드의 재사용성을 높입니다. 주요 장점은 다음과 같습니다:

  • 코드의 재사용: 함수는 한 번 작성하면 필요할 때마다 여러 번 호출할 수 있습니다. 이는 코드의 중복을 줄이고 프로그램의 크기를 줄여줍니다.
  • 코드의 관리: 프로그램이 복잡해질수록 함수를 사용하면 코드의 읽기 쉬움, 유지보수성, 디버깅 용이성이 크게 향상됩니다.
  • 모듈화: 함수를 사용하면 프로그램을 작은 부분, 즉 모듈로 나눌 수 있습니다. 이는 각 부분을 독립적으로 개발하고 테스트할 수 있게 해 주며, 이는 큰 프로젝트에서 매우 유용합니다.

 


8.2. 함수의 기본 구조

함수의 선언, 정의, 호출 방법, 반환 타입, 매개변수, 그리고 프로토타입에 대해 알아보겠습니다. 이를 통해 기능적 단위로 코드를 분리하고 재사용하는 방법을 배웁니다.

 

8.2.1 함수의 선언, 정의, 호출

함수를 사용하기 위해서는 세 단계를 거쳐야 합니다: 선언, 정의, 호출.

함수 선언: 함수 선언은 함수의 이름, 반환 타입, 매개변수의 타입과 수를 컴파일러에게 알려줍니다.

함수 정의: 함수 정의는 함수의 실제 동작을 기술합니다. 이 부분은 함수가 어떤 일을 해야 하는지를 정의하는 코드입니다.

함수 호출: 함수 호출은 프로그램에서 함수를 실행하는 부분입니다.

 

[예제] : C

더보기

int add(int a, int b); // function declaration

int add(int a, int b) { // function definition
    return a + b;
}

int main() {
    int result = add(3, 4); // function call
    printf("%d", result);
    return 0;
}


[예제] : C ++

int add(int a, int b); // function declaration

int add(int a, int b) { // function definition
    return a + b;
}

int main() {
    int result = add(3, 4); // function call
    cout << result;
    return 0;
}

 

8.2.2 반환 타입과 매개변수

함수 선언 시, 함수가 어떤 타입의 값을 반환할지 지정해야 합니다. 이것을 반환 타입이라 합니다. 또한, 함수가 동작하는데 필요한 정보를 전달하는 매개변수를 지정할 수 있습니다.

 

8.2.3 함수의 프로토타입

프로토타입은 함수의 선언 부분을 가리킵니다. 함수의 프로토타입은 함수의 이름, 반환 타입, 그리고 매개변수의 타입과 수를 컴파일러에게 알려주는 역할을 합니다. 이를 통해 컴파일러는 함수 호출이 올바른지 확인합니다.

 


8.3. 함수의 종류

다양한 함수 유형을 살펴보겠습니다. 이 섹션에서는 내장 함수, 사용자 정의 함수, 그리고 재귀 함수에 대해 배워보겠습니다.

8.3.1 내장 함수

C/C++에서 제공하는 내장 함수는 매우 다양합니다. 이들은 문자열 조작, 수학 계산, 시간과 날짜 계산 등의 기능을 제공합니다. 이들 함수는 프로그램의 기능을 확장하고 코드를 더 효과적으로 작성할 수 있게 돕습니다.

 

예를 들어, C에서 제공하는 수학 관련 내장 함수 중 하나인 sqrt는 제곱근을 계산합니다. 아래 예제는 9의 제곱근을 계산하는 코드입니다.

 

[예제] : C

#include <stdio.h>
#include <math.h>

int main() {
    double number = 9.0;
    double result = sqrt(number);
    printf("The square root of %.1f is %.1f\n", number, result);
    return 0;
}

 

[예제] : C ++

#include <iostream>
#include <cmath>

int main() {
    double number = 9.0;
    double result = sqrt(number);
    std::cout << "The square root of " << number << " is " << result << std::endl;
    return 0;
}

 

8.3.2 사용자 정의 함수

사용자 정의 함수는 프로그래머가 특정 작업을 수행하도록 만든 함수입니다. 이 함수를 사용하면 코드를 재사용할 수 있고, 코드의 가독성을 향상할 수 있습니다.

 

다음 예제에서 add 함수는 두 개의 정수를 받아 더한 값을 반환합니다. 이 add 함수는 사용자가 정의한 함수입니다.

 

[예제] : C 

#include <stdio.h>

int add(int a, int b) {
    return a + b;
}

int main() {
    int sum = add(5, 7);
    printf("The sum of 5 and 7 is %d\n", sum);
    return 0;
}

 

[예제] : C ++

#include <iostream>

int add(int a, int b) {
    return a + b;
}

int main() {
    int sum = add(5, 7);
    std::cout << "The sum of 5 and 7 is " << sum << std::endl;
    return 0;
}


8.3.3 재귀 함수

재귀 함수는 자기 자신을 다시 호출하는 함수입니다. 재귀는 복잡한 문제를 더 작고 관리하기 쉬운 문제로 분해하는 데 유용합니다.

 

예를 들어, 팩토리얼은 재귀를 사용하여 계산할 수 있습니다. 팩토리얼 n은 1부터 n까지의 모든 양의 정수의 곱입니다.

 

[예제] : C

#include <stdio.h>

int factorial(int n) {
    if(n == 0) {
        return 1;
    }
    else {
        return n * factorial(n - 1);
    }
}

int main() {
    int number = 5;
    printf("The factorial of %d is %d\n", number, factorial(number));
    return 0;
}

 

[예제] : C ++

#include <iostream>

int factorial(int n) {
    if(n == 0) {
        return 1;
    }
    else {
        return n * factorial(n - 1);
    }
}

int main() {
    int number = 5;
    std::cout << "The factorial of " << number << " is " << factorial(number) << std::endl;
    return 0;
}

 


8.4. 함수의 활용

함수를 효과적으로 사용하는 방법에 대해 배웁니다. 프로그램을 구조화하는 방법, 함수 오버로딩, 그리고 인라인 함수에 대한 내용을 다룹니다.

8.4.1 함수를 이용한 프로그램 구조화

함수는 코드를 모듈화하고 재사용성을 높여서 프로그램을 체계적으로 구성할 수 있게 해 줍니다. 함수를 통해 비슷한 동작을 하는 코드를 그룹화하여 가독성을 높이고 디버깅을 쉽게 할 수 있습니다.

 

예를 들어, 우리가 3개의 숫자를 더하는 코드를 여러 번 작성해야 한다고 가정해봅시다. 이 경우, 함수를 사용하면 코드의 중복을 피하고 프로그램의 흐름을 쉽게 이해할 수 있습니다.

 

[예제] : C

#include <stdio.h>

int addThreeNumbers(int a, int b, int c) {
    return a + b + c;
}

int main() {
    printf("%d\n", addThreeNumbers(1, 2, 3));
    printf("%d\n", addThreeNumbers(4, 5, 6));
    return 0;
}

 

[예제] : C ++

#include <iostream>

int addThreeNumbers(int a, int b, int c) {
    return a + b + c;
}

int main() {
    std::cout << addThreeNumbers(1, 2, 3) << std::endl;
    std::cout << addThreeNumbers(4, 5, 6) << std::endl;
    return 0;
}

 

8.4.2 함수 오버로딩 (C++ only)

함수 오버로딩은 프로그램의 가독성을 높이고 코드의 재사용성을 향상시킵니다. 같은 이름의 함수를 여러 개 정의하되, 매개변수의 타입이나 개수가 다르면 동일한 이름의 함수를 여러 개 정의할 수 있습니다. 이를 통해 다양한 타입의 인자에 대해 동일한 동작을 수행하는 함수를 정의할 수 있습니다.

 

[예제] : C ++

#include <iostream>

void print(int num) {
    std::cout << "Printing int: " << num << std::endl;
}

void print(double num) {
    std::cout << "Printing double: " << num << std::endl;
}

void print(char c) {
    std::cout << "Printing char: " << c << std::endl;
}

int main() {
    print(5);
    print(5.5);
    print('A');
    return 0;
}

 

8.4.3 인라인 함수 (C++ only)

인라인 함수는 함수 호출의 오버헤드를 줄이기 위한 방법입니다. 함수 호출시, 컴파일러는 함수의 코드를 메모리에 적재하고 제어를 이동시키는 등의 작업을 해야 합니다. 하지만 인라인 함수를 사용하면, 컴파일러는 함수 호출을 함수의 코드로 대체함으로써 이러한 오버헤드를 줄일 수 있습니다.

 

[예제] : C ++

#include <iostream>

inline int cube(int num) {
    return num * num * num;
}

int main() {
    std::cout << "Cube of 3: " << cube(3) << std::endl;
    std::cout << "Cube of 4: " << cube(4) << std::endl;
    return 0;
}

8.5 함수와 변수

함수 내부와 외부에서 사용하는 변수의 차이점과 함수로 변수를 전달하는 방법에 대해 배웁니다.

8.5.1 지역 변수와 전역 변수

지역 변수는 특정 블록 또는 함수 내에서만 사용할 수 있는 변수입니다. 이는 해당 블록 또는 함수가 실행될 때 생성되고, 실행이 완료되면 소멸합니다. 반면에 전역 변수는 프로그램 전체에서 접근할 수 있는 변수로, 프로그램이 시작할 때 생성되고, 프로그램이 종료될 때 소멸합니다. 지역 변수와 전역 변수의 차이점을 보여주는 예제입니다:

 

[예제] 

#include <stdio.h>

int globalVar = 20;  // 전역 변수

void test() {
    int localVar = 10;  // 지역 변수
    localVar++;
    globalVar++;
    printf("Local variable in test: %d \n", localVar);
    printf("Global variable in test: %d \n", globalVar);
}

int main() {
    printf("Global variable in main: %d \n", globalVar);
    test();
    printf("Global variable after test: %d \n", globalVar);
    return 0;
}


이 예제에서, test() 함수가 종료된 후에는 localVar이 소멸하므로 다시 접근할 수 없습니다. 반면에 globalVar는 main() 함수와 test() 함수 모두에서 사용될 수 있습니다.

 

8.5.2 매개변수 전달 방식: 값에 의한 전달과 참조에 의한 전달

함수에 변수를 전달할 때 값에 의한 전달과 참조에 의한 전달 두 가지 방법이 있습니다.

 

값에 의한 전달은 변수의 값을 복사하여 함수에 전달하는 방식입니다. 이 방식을 사용하면 원본 변수는 함수에서 일어나는 변화에 영향을 받지 않습니다.

[예제]

#include <stdio.h>

void changeValue(int value) {  // 값에 의한 전달
    value = 20;
}

int main() {
    int value = 10;
    changeValue(value);
    printf("Value in main: %d \n", value);  // 출력 결과: Value in main: 10
    return 0;
}


이 예제에서, changeValue(value)는 value 변수의 복사본에 작동하기 때문에, 원본 value의 값은 변하지 않습니다.

 

참조에 의한 전달은 변수의 주소를 복사하여 함수에 전달하는 방식입니다. 이 방식을 사용하면 함수 내에서 원본 변수의 값을 변경할 수 있습니다. 하지만 이 방식은 C++에서만 사용 가능합니다.

 

[예제]

#include <iostream>

void changeValue(int &value) {  // 참조에 의한 전달
    value = 20;
}

int main() {
    int value = 10;
    changeValue(value);
    std::cout << "Value in main: " << value << std::endl;  // 출력 결과: Value in main: 20
    return 0;
}

 

이 예제에서 changeValue(value)는 value 변수 자체에 작동하기 때문에, 원본 value의 값이 바뀝니다.


8.6 함수 포인터

함수 포인터는 함수의 주소를 저장하는 변수입니다. 이것은 C/C++ 프로그래밍에서 매우 강력한 도구이며, 다양한 프로그래밍 상황에서 유용하게 사용될 수 있습니다. 예를 들어, 콜백 함수를 사용하거나, 함수를 동적으로 선택하여 호출하거나, 함수 테이블을 구성할 때 함수 포인터를 사용합니다.

8.6.1 함수 포인터의 개념과 활용

함수 포인터는 함수의 반환 타입, 매개변수의 타입 및 개수를 고려하여 선언합니다. 그런 다음 함수의 이름을 통해 함수 포인터에 할당할 수 있습니다.

 

함수 포인터를 선언하고 사용하는 기본 예제를 살펴보겠습니다:

 

[예제]

#include <stdio.h>

int add(int a, int b) { // 함수 선언
    return a + b;
}

int main() {
    int (*funcPtr)(int, int); // 함수 포인터 선언
    funcPtr = add; // 함수의 주소를 포인터에 할당
    int sum = (*funcPtr)(5, 3); // 함수 포인터를 통해 함수 호출
    printf("The sum is: %d", sum);
    return 0;
}

 

이 코드에서 int (*funcPtr)(int, int);는 두 개의 정수를 매개변수로 받아 정수를 반환하는 함수에 대한 포인터를 선언합니다. funcPtr = add;라는 구문은 add 함수의 주소를 funcPtr에 할당합니다. 그리고 (*funcPtr)(5, 3);는 add 함수를 호출하여 두 숫자를 더합니다.

 

또한, 함수 포인터는 배열이나 구조체의 일부로서도 사용할 수 있습니다. 이를 통해 다양한 동작을 수행하는 함수의 집합을 생성하거나, 특정 데이터와 연관된 함수를 함께 저장할 수 있습니다.

 

[예제]

#include <stdio.h>

double add(double a, double b) { return a + b; }
double sub(double a, double b) { return a - b; }

int main() {
    double (*operations[2])(double, double) = {add, sub};
    double a = 5.0, b = 3.0;

    for(int i = 0; i < 2; i++) {
        printf("%f\n", operations[i](a, b));
    }

    return 0;
}

 

이 코드에서는 두 개의 함수 포인터를 가진 배열 operations를 선언하고 add와 sub 함수를 할당합니다. 그런 다음 각 함수를 호출하여 연산을 수행합니다.

 


8.7 람다 함수 (C++ only)

람다 함수는 C++에서 익명 함수(anonymous function)를 생성할 수 있는 방법 중 하나입니다. 이름이 없는 이 함수들은 직접 코드 내에 삽입할 수 있으며, 함수 포인터나 함수 객체를 대체하는 용도로 쓰일 수 있습니다. 이러한 람다 함수는 직관적이고 간결한 코드를 작성하는 데 많은 도움이 됩니다. 

8.7.1 람다 함수의 개념과 활용

람다 함수는 함수의 정의와 함께 이를 참조할 수 있는 핸들을 바로 제공하는 익명 함수입니다. 람다 함수는 표현식으로 구성되며, 이 표현식은 실행 가능한 코드 블록을 생성합니다. 람다 함수는 표현식이 실행될 때 호출되는 함수로서 동작합니다. 

 

람다 함수는 다음과 같은 기본 형식으로 선언합니다:

 

[예제]

[capture](parameters) -> return_type { body }

 

여기서 capture는 람다가 주변 범위의 변수를 어떻게 사용할지를 나타내며, parameters, return_type, body는 일반적인 함수와 같은 의미를 가집니다.

 

다음 예제에서는 std::sort 함수와 람다 함수를 함께 사용하여 벡터를 역순으로 정렬합니다:

 

[예제]

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> nums = {5, 4, 3, 2, 1};

    // 람다 함수를 사용하여 벡터를 역순으로 정렬
    std::sort(nums.begin(), nums.end(), [](int a, int b){
        return a > b;
    });

    // 람다 함수를 사용하여 벡터의 모든 요소를 출력
    std::for_each(nums.begin(), nums.end(), [](int num){
        std::cout << num << " ";
    });

    return 0;
}

 

이 예제에서 std::sort 함수는 첫 번째와 두 번째 인자로 벡터의 시작과 끝을 받고, 세 번째 인자로 람다 함수를 받습니다. 이 람다 함수는 두 개의 정수를 인자로 받아 첫 번째 정수가 두 번째 정수보다 큰지를 판단합니다. 이렇게 함으로써 std::sort 함수는 벡터를 역순으로 정렬합니다.

 


8.8 함수를 사용한 프로그램 예제

함수를 잘 이해하고 활용하면 코드를 보다 효율적이고 깔끔하게 만들 수 있습니다. 이번 장에서는 실제로 함수를 사용해서 간단한 계산기 프로그램과 팩토리얼 계산 프로그램을 작성하는 방법에 대해 알아보겠습니다.

8.8.1 간단한 계산기 프로그램 작성

계산기 프로그램을 작성하기 위해 먼저 사칙연산을 수행하는 함수들을 정의해야 합니다. 이 함수들은 두 개의 숫자를 매개변수로 받고 계산 결과를 반환합니다.

 

[예제]

// C++ 코드

#include<iostream>
using namespace std;

// 함수 선언
double add(double a, double b);
double subtract(double a, double b);
double multiply(double a, double b);
double divide(double a, double b);

int main() {
    double num1, num2;
    char operation;

    cout << "Enter first number: ";
    cin >> num1;
    cout << "Enter operation (+, -, *, /): ";
    cin >> operation;
    cout << "Enter second number: ";
    cin >> num2;

    switch(operation) {
        case '+':
            cout << "Result: " << add(num1, num2) << endl;
            break;
        case '-':
            cout << "Result: " << subtract(num1, num2) << endl;
            break;
        case '*':
            cout << "Result: " << multiply(num1, num2) << endl;
            break;
        case '/':
            cout << "Result: " << divide(num1, num2) << endl;
            break;
        default:
            cout << "Invalid operation!" << endl;
            break;
    }

    return 0;
}

// 함수 정의
double add(double a, double b) {
    return a + b;
}

double subtract(double a, double b) {
    return a - b;
}

double multiply(double a, double b) {
    return a * b;
}

double divide(double a, double b) {
    if(b != 0) {
        return a / b;
    } else {
        cout << "Error! Division by zero is not allowed." << endl;
        exit(1);  // 프로그램 종료
    }
}

 

이 예제에서 add, subtract, multiply, divide 함수는 사칙연산을 수행하며, main 함수에서는 사용자로부터 두 개의 숫자와 연산자를 입력받아 해당 연산을 수행합니다.

 

8.8.2 팩토리얼 계산 프로그램 작성

팩토리얼 계산 프로그램은 함수의 재귀적인 호출을 이해하는 데 도움이 됩니다. 팩토리얼은 양의 정수 n에 대해 1부터 n까지의 모든 정수의 곱을 의미합니다.

 

[예제]

// C++ 코드

#include<iostream>
using namespace std;

// 함수 선언
unsigned long long factorial(unsigned int n);

int main() {
    unsigned int num;
    cout << "Enter a positive integer: ";
    cin >> num;
    cout << "Factorial of " << num << " = " << factorial(num) << endl;
    return 0;
}

// 함수 정의
unsigned long long factorial(unsigned int n) {
    if (n == 0)
       return 1;
    else
       return n * factorial(n - 1);
}


이 예제에서 factorial 함수는 주어진 숫자의 팩토리얼을 계산합니다. 이 함수는 자신을 재귀적으로 호출하여 팩토리얼을 계산합니다.

 

함수를 통해 복잡한 문제를 쉽게 분해하고 해결할 수 있습니다. 실습을 통해 함수의 활용법을 체계적으로 익혀보세요.

 


8.9 함수에 대한 고급 주제

함수는 프로그래밍에서 중요한 도구입니다. 이 섹션에서는 함수와 배열, 함수와 포인터의 관계에 대해 배웁니다. 이들 개념을 이해하면 프로그래밍에 있어 보다 다양한 문제 해결 전략을 마련할 수 있습니다.

8.9.1 함수와 배열

함수는 배열의 원소를 읽고 수정하는 데 사용될 수 있습니다. 다음은 배열의 모든 원소를 제곱하는 함수를 보여줍니다.

 

[예제]

// C++ 코드

#include <iostream>
using namespace std;

void squareArray(int arr[], int size) {
    for (int i = 0; i < size; i++) {
        arr[i] *= arr[i];
    }
}

int main() {
    int numbers[] = {1, 2, 3, 4, 5};
    int size = sizeof(numbers) / sizeof(numbers[0]);
    
    squareArray(numbers, size);
    
    for (int i = 0; i < size; i++) {
        cout << numbers[i] << " ";
    }
    cout << endl;
    
    return 0;
}

 

이 프로그램은 squareArray 함수를 사용하여 배열 numbers의 모든 원소를 제곱합니다.

 

8.9.2 함수와 포인터

포인터는 함수가 원래 변수를 수정하거나, 대규모의 데이터 구조에 접근하도록 해줍니다. 다음 예제는 정수 포인터를 인자로 받아, 그 포인터가 가리키는 정수를 제곱하는 함수를 보여줍니다.

 

[예제]

// C++ 코드
#include <iostream>
using namespace std;

void squarePointer(int* ptr) {
    *ptr *= *ptr;
}

int main() {
    int num = 5;
    
    squarePointer(&num);
    
    cout << num << endl;  // 출력: 25
    
    return 0;
}

 

이 프로그램은 squarePointer 함수를 사용하여 num 변수를 제곱합니다.

 

함수와 배열, 그리고 포인터의 관계를 이해하는 것은 프로그래밍에서 중요한 단계입니다. 이러한 개념을 능숙하게 활용하면, 더 복잡한 문제를 해결하는 데 도움이 됩니다. 따라서 충분히 연습하고, 다양한 문제에 적용해 보세요.

 

 

 

2023.05.15 - [GD's IT Lectures : 기초부터 시리즈/C, C++ 기초부터 ~] - [C/C++ 프로그래밍] 7. 반복문

 

[C/C++ 프로그래밍] 7. 반복문

Chapter 7. 반복문 이 장에서는 반복문이 무엇인지, 그리고 왜 필요한지에 대해 배울 수 있습니다. 그 후, 여러 종류의 반복문이 어떻게 동작하는지, 그리고 어떻게 활용할 수 있는지에 대한 상세한

gdngy.tistory.com

 

반응형

댓글