프로그래밍/C++

C++ 프로그래밍 기초: 데이터 타입, 변수, 연산자, 제어문, 함수

shimdh 2025. 2. 2. 13:10
728x90

1. 데이터 타입과 변수

1.1 데이터 타입

C++에서 데이터 타입은 변수가 저장할 수 있는 값의 종류를 결정합니다. 데이터 타입을 선택할 때는 메모리 효율성과 정확성을 고려해야 합니다. 주요 데이터 타입은 다음과 같습니다:

  • 정수형 (int): 정수를 저장합니다. 일반적으로 4바이트의 메모리를 사용합니다.

    int age = 25; // 나이를 저장하는 변수
  • 부동 소수점형 (float, double): 실수를 저장합니다. float는 4바이트, double은 8바이트를 사용하며, double이 더 높은 정밀도를 제공합니다.

    float weight = 65.5f; // 몸무게를 저장하는 변수 (float 형)
    double height = 175.3; // 키를 저장하는 변수 (double 형)
  • 문자형 (char): 단일 문자를 저장합니다. 작은따옴표(')를 사용하여 값을 할당합니다.

    char initial = 'A'; // 첫 글자를 저장하는 변수
  • 불린형 (bool): 참(true) 또는 거짓(false)을 저장합니다. 조건문에서 많이 사용됩니다.

    bool isStudent = true; // 학생 여부를 저장하는 변수

1.2 변수

변수는 데이터를 저장하는 메모리 공간입니다. 변수를 선언하고 초기화하는 방법은 다음과 같습니다:

#include <iostream>
using namespace std;

int main() {
    int number;          // 변수 선언
    number = 10;        // 값 할당

    float pi = 3.14f;   // 선언과 동시에 초기화
    char grade = 'A';

    cout << "Number: " << number << endl;
    cout << "Pi value: " << pi << endl;
    cout << "Grade: " << grade << endl;

    return 0;
}

1.3 상수

상수는 값이 변경되지 않는 변수입니다. const 키워드를 사용하여 선언하며, 프로그램에서 고정된 값을 사용할 때 유용합니다:

const int MAX_USERS = 100; // 최대 사용자 수를 상수로 정의

상수를 사용하면 코드의 가독성과 유지보수성이 향상됩니다. 예를 들어, 프로그램 전체에서 사용되는 고정값을 상수로 정의하면 나중에 값을 변경해야 할 때 한 곳만 수정하면 됩니다.


2. 연산자

2.1 산술 연산자

산술 연산자는 기본적인 수학적 계산을 수행합니다. C++에서는 다음과 같은 산술 연산자를 제공합니다:

  • 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), 나머지(%)
int a = 10;
int b = 3;
int sum = a + b; // sum은 13
int difference = a - b; // difference는 7
int product = a * b; // product는 30
float quotient = (float)a / b; // quotient는 약 3.33
int remainder = a % b; // remainder는 1

2.2 대입 연산자

대입 연산자는 변수에 값을 할당합니다. 복합 대입 연산자를 사용하면 코드를 더 간결하게 작성할 수 있습니다:

int x = 5;
x += 2; // x는 이제 7 (x = x + 2와 동일)
x *= 3; // x는 이제 21 (x = x * 3과 동일)

2.3 비교 연산자

비교 연산자는 두 값을 비교하고 불리언(true/false) 결과를 반환합니다. 주로 조건문에서 사용됩니다:

if (a > b) {
    std::cout << "a가 b보다 큽니다.";
} else if (a < b) {
    std::cout << "a가 b보다 작습니다.";
} else {
    std::cout << "a와 b가 같습니다.";
}

2.4 논리 연산자

논리 연산자는 조건문에서 여러 조건을 결합하거나 반전시키는 데 사용됩니다:

  • AND (&&): 모든 조건이 참일 때 참
  • OR (||): 하나 이상의 조건이 참일 때 참
  • NOT (!): 조건을 반전
bool isAdult = true;
bool hasPermission = false;

if (isAdult && hasPermission) {
    std::cout << "접근 허용";
} else {
    std::cout << "접근 거부";
}

2.5 비트 연산자

비트 연산자는 이진수(bit)에 대한 직접적인 조작을 가능하게 합니다. 주로 하드웨어 제어나 데이터 압축 등에서 사용됩니다:

unsigned int num1 = 5;      // 이진수로 표현하면 '0101'
unsigned int num2 = 3;      // 이진수로 표현하면 '0011'

unsigned int andResult = num1 & num2; // andResult는 '0001' (1)
unsigned int orResult = num1 | num2;   // orResult는 '0111' (7)
unsigned int xorResult = num1 ^ num2;   // xorResult는 '0110' (6)

3. 제어문

3.1 조건문

조건문은 특정 조건이 참인지 거짓인지에 따라 다른 코드를 실행합니다. C++에서는 if, else if, else, switch 문을 사용할 수 있습니다.

  • if 문: 조건이 참일 때 코드 블록을 실행합니다.

    int score = 85;
    
    if (score >= 60) {
        std::cout << "합격입니다!" << std::endl;
    }
  • else if / else 문: 여러 조건을 검사할 수 있습니다.

    int score = 45;
    
    if (score >= 60) {
        std::cout << "합격입니다!" << std::endl;
    } else if (score >= 40) {
        std::cout << "재시험입니다." << std::endl;
    } else {
        std::cout << "불합격입니다." << std::endl;
    }
  • switch 문: 여러 값 중 하나를 선택하여 해당하는 코드를 실행합니다.

    char grade = 'B';
    
    switch (grade) {
        case 'A':
            std::cout << "우수한 성적입니다!" << std::endl;
            break;
        case 'B':
            std::cout << "양호한 성적입니다." << std::endl;
            break;
        case 'C':
            std::cout << "보통 성적입니다." << std::endl;
            break;
        default:
            std::cout << "성적이 없습니다." << std::endl; 
    }

3.2 반복문

반복문은 특정 코드 블록을 여러 번 실행합니다. C++에서는 for, while, do while 문을 사용할 수 있습니다.

  • for 문: 정해진 횟수만큼 반복합니다.

    for (int i = 0; i < 5; ++i) {
        std::cout << i + 1 << ": 안녕하세요!" << std::endl;
    }
  • while 문: 조건이 참인 동안 계속 반복합니다.

    int count = 0;
    
    while (count < 5) {
        count++;
        std::cout << "카운트: " << count << std::endl;
    }
  • do while 문: 최소 한 번 이상 코드를 실행한 후 조건을 검사합니다.

    int num = -1;
    
    do {
        num++;
        if(num < 3){
            continue; // 다음 루프 진행
        }
        cout << "현재 숫자: " << num << std::endl; 
    } while(num < 5);

4. 함수

4.1 함수의 정의와 사용

함수는 특정 작업을 수행하는 코드 블록입니다. 함수를 사용하면 코드를 재사용하고 가독성을 높일 수 있습니다:

#include <iostream>
using namespace std;

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

int main() {
    int num1 = 5;
    int num2 = 10;
    cout << "Sum: " << add(num1, num2) << endl; 
    return 0;
}

4.2 매개변수 전달 방식

  • 값에 의한 전달: 원본 변수에는 영향 없음

    void increment(int n) {
        n++; 
    }
  • 참조에 의한 전달: 원본 변수도 변경됨

    void increment(int &n) { 
        n++; 
    }

4.3 함수 오버로딩

동일한 이름의 함수를 여러 개 정의할 수 있습니다:

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

int main() {
   cout << "Sum of two numbers: " << add(3, 4) << endl;     // outputs 7 
   cout << "Sum of three numbers: " << add(1, 2, 3) << endl; // outputs 6 
   return 0;
}

4.4 리턴값과 void 형식

함수는 값을 반환하지 않을 수도 있습니다. 이 경우 void 키워드를 사용합니다:

void printMessage() {
   cout << "Hello World!" << endl;
}

int main() {
   printMessage(); // 메시지를 출력하지만 아무것도 반환하지 않음.
   return 0;
}

5. 추가 예제와 실습

5.1 예제 1: 간단한 계산기

다음은 사용자로부터 두 숫자를 입력받아 덧셈, 뺄셈, 곱셈, 나눗셈을 수행하는 간단한 계산기 프로그램입니다:

#include <iostream>
using namespace std;

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

    cout << "첫 번째 숫자를 입력하세요: ";
    cin >> num1;
    cout << "연산자를 입력하세요 (+, -, *, /): ";
    cin >> op;
    cout << "두 번째 숫자를 입력하세요: ";
    cin >> num2;

    switch (op) {
        case '+':
            cout << "결과: " << num1 + num2 << endl;
            break;
        case '-':
            cout << "결과: " << num1 - num2 << endl;
            break;
        case '*':
            cout << "결과: " << num1 * num2 << endl;
            break;
        case '/':
            if (num2 != 0) {
                cout << "결과: " << num1 / num2 << endl;
            } else {
                cout << "0으로 나눌 수 없습니다." << endl;
            }
            break;
        default:
            cout << "잘못된 연산자입니다." << endl;
    }

    return 0;
}

5.2 예제 2: 구구단 출력

다음은 사용자로부터 입력받은 숫자의 구구단을 출력하는 프로그램입니다:

#include <iostream>
using namespace std;

int main() {
    int num;
    cout << "구구단을 출력할 숫자를 입력하세요: ";
    cin >> num;

    for (int i = 1; i <= 9; ++i) {
        cout << num << " * " << i << " = " << num * i << endl;
    }

    return 0;
}

5.3 예제 3: 팩토리얼 계산

다음은 사용자로부터 입력받은 숫자의 팩토리얼을 계산하는 프로그램입니다:

#include <iostream>
using namespace std;

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

int main() {
    int num;
    cout << "팩토리얼을 계산할 숫자를 입력하세요: ";
    cin >> num;

    cout << num << "! = " << factorial(num) << endl;

    return 0;
}

6. 결론

C++의 기본 개념인 데이터 타입, 변수, 연산자, 제어문, 함수를 이해하는 것은 프로그래밍의 기초를 다지는 데 매우 중요합니다. 이러한 개념을 잘 활용하면 더 복잡한 프로그램을 작성하는 데 큰 도움이 될 것입니다. 예제를 통해 직접 코드를 작성해보고, 다양한 상황에 적용해보는 것이 중요합니다. 다음 단계에서는 객체 지향 프로그래밍클래스와 함께 어떻게 함수를 활용할 수 있는지 알아보겠습니다!

728x90