icon

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


프로그램 개요

 이번 실습에서는 기본적인 사칙연산을 수행하는 간단한 계산기 프로그램을 작성해보겠습니다.

 이 프로그램을 통해 지금까지 학습한 C++의 기본 개념들을 실제로 적용해볼 수 있습니다.

 프로그램의 주요 기능은 다음과 같습니다.

  • 두 개의 숫자 입력 받기
  • 연산자 입력 받기 +, -, *, /
  • 선택된 연산 수행
  • 결과 출력
  • 사용자 선택에 따라 프로그램 반복 실행

프로그램 설계

 프로그램을 구현하기 전에 먼저 전체적인 구조를 설계해보겠습니다.

사용자 입력

  • 두 개의 숫자 (부동소수점 사용)
  • 연산자 (문자)

연산 수행

  • switch 문을 사용하여 연산자에 따른 적절한 연산 수행
  • 나눗셈의 경우 0으로 나누는 상황 처리

결과 출력

  • 계산 결과를 화면에 출력

프로그램 반복

  • 사용자가 원할 경우 새로운 계산 수행

코드 구현

 이제 설계를 바탕으로 실제 C++ 코드를 작성해보겠습니다.

#include <iostream>
#include <limits>
 
int main() {
    char continueCalculation;
    do {
        double num1, num2, result;
        char operation;
 
        // 첫 번째 숫자 입력
        std::cout << "첫 번째 숫자를 입력하세요: ";
        while(!(std::cin >> num1)) {
            std::cout << "올바른 숫자를 입력해주세요: ";
            std::cin.clear();
            std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        }
 
        // 두 번째 숫자 입력
        std::cout << "두 번째 숫자를 입력하세요: ";
        while(!(std::cin >> num2)) {
            std::cout << "올바른 숫자를 입력해주세요: ";
            std::cin.clear();
            std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        }
 
        // 연산자 입력
        std::cout << "연산자를 입력하세요 (+, -, *, /): ";
        std::cin >> operation;
 
        // 연산 수행
        switch(operation) {
            case '+':
                result = num1 + num2;
                break;
            case '-':
                result = num1 - num2;
                break;
            case '*':
                result = num1 * num2;
                break;
            case '/':
                if(num2 != 0) {
                    result = num1 / num2;
                } else {
                    std::cout << "오류: 0으로 나눌 수 없습니다." << std::endl;
                    continue;
                }
                break;
            default:
                std::cout << "오류: 잘못된 연산자입니다." << std::endl;
                continue;
        }
 
        // 결과 출력
        std::cout << "결과: " << result << std::endl;
 
        // 계속 여부 확인
        std::cout << "계속하시겠습니까? (y/n): ";
        std::cin >> continueCalculation;
    } while(continueCalculation == 'y' || continueCalculation == 'Y');
 
    return 0;
}

주요 개념 설명

#include <iostream>

 입출력 기능을 사용하기 위한 헤더 파일입니다.

#include <limits>

 숫자 타입의 한계값을 다루기 위한 헤더 파일입니다. 입력 버퍼를 지우는 데 사용됩니다.

double 타입 사용

 부동소수점 연산을 위해 double 타입을 사용했습니다.

do-while 루프

 최소한 한 번은 실행되는 루프로, 사용자가 계속할지 여부를 묻는 데 사용됩니다.

switch

 연산자에 따라 다른 연산을 수행하기 위해 사용됩니다.

예외 처리

 0으로 나누는 경우와 잘못된 연산자 입력에 대한 처리를 포함했습니다.

입력 유효성 검사

 while 루프를 사용하여 올바른 숫자 입력을 보장합니다.

프로그램 실행 및 테스트

 프로그램을 컴파일하고 실행한 후, 다음과 같은 테스트 케이스로 프로그램을 검증해보세요.

기본 연산

 10 + 5, 20 - 7, 6 * 8, 15 / 3

소수점 연산

 3.14 * 2, 10 / 3

예외 상황

 5 / 0 (0으로 나누기)

잘못된 입력

 문자 입력, 잘못된 연산자 입력

코드 개선 방안

 이 기본 버전의 계산기는 잘 작동하지만, 다음과 같은 방법으로 개선할 수 있습니다.

함수 분리

 연산 로직을 별도의 함수로 분리하여 코드의 가독성과 재사용성을 높입니다.

예외 처리 개선

 try-catch 문을 사용하여 더 체계적인 예외 처리를 구현합니다.

사용자 정의 함수 추가

 제곱, 제곱근, 로그 등의 고급 연산을 추가합니다.

메모리 기능

 이전 계산 결과를 저장하고 다음 계산에 사용할 수 있는 기능을 추가합니다.

연습 문제

  1. 현재 프로그램에 제곱 연산^을 추가해보세요.
  2. 계산 기록을 저장하고 출력하는 기능을 구현해보세요.
  3. 연산 함수를 별도의 함수로 분리하여 프로그램을 리팩토링해보세요.
  4. 사용자가 입력한 수식을 문자열로 받아 계산하는 기능을 구현해보세요. 예 : "3 + 4 * 2"
  5. 프로그램에 메모리 기능을 추가해보세요. M+, M-, MR, MC

 참고자료