C++ 스터디 #7: 계산기

시간 2021년 5월 27일 목요일 20:30 ~
장소 Google Meet
참가자

두 수의 사칙연산을 수행하는 프로그램 작성하기


출력

  • 첫 줄에 두 수와 연산자 기호를 입력한다.
  • 입력한대로 사칙연산을 수행하여 계산 결과를 출력한다.
  • 0으로 나누려고 하면 경고 문구를 출력한다.
  • 사칙연산 기호 외의 문자를 입력하면 경고 문구를 출력하며 프로그램을 종료한다.
  • 그전까지는 계속 사칙연산을 수행한다.


출력 예시

1 + 3.5
= 4.5
20 * 2.1
= 42
2 / 0
0으로 나눌 수 없습니다.
1.5 % 6.7
정의되지 않은 연산입니다.


코드

#include <iostream>
using namespace std;

int main() {
   double a, b;
   char c;
   while (true) {
      cin >> a >> c >> b;

      if (c == '+') cout << "= " << a + b << endl;
      else if (c == '-') cout << "= " << a - b << endl;
      else if (c == '*') cout << "= " << a * b << endl;
      else if (c == '/') {
         if (b == 0) cout << "0으로 나눌 수 없습니다." << endl;
         else cout << "= " << a / b << endl;
      }
      else {
         cout << "정의되지 않은 연산입니다.";
         return 0;
      }


지수 연산을 수행하는 함수 작성하기


출력

  • 입력한대로 지수 연산을 수행하여 계산 결과를 출력한다.
  • 지수는 정수만 입력된다.
  • 앞에서 한 예제에 추가하기


출력 예시

3 ^ 4
= 81
2 ^ -3
= 0.125
5.2 ^ 0
= 1


코드

#include <iostream>
using namespace std;

double power(double a, int n) {
   if (n == 0) return 1;
   else if (n < 0) return 1 / power(a, -n);
   else return a * power(a, n - 1);
}
 
int main() {
   double a, b;
   char c;

   while (true) {
      cin >> a >> c >> b;
      if (c == '^') cout << "= " << power(a, (int)b) << endl;
      else return 0;
   }
}


입력한 순서대로 계산하는 프로그램 작성하기


출력

  • 연산자의 우선 순위는 생각하지 않고 입력 순서대로 사칙연산을 수행한다. '='이 입력되면 그때까지의 결과를 출력하고 프로그램을 종료한다.
  • 0으로 나누려고 하면 경고 문구를 출력한다.
  • 사칙연산 기호 외의 문자를 입력하면 경고 문구를 출력한다.


출력 예시

1.5 =
1.5
3 / 2 – 1 * 5 =
2.5
5 / 0 + 3 =
0으로 나눌 수 없습니다.
6 % 4 =
정의되지 않은 연산입니다.


코드

#include <iostream>
using namespace std;

int main() {
   double num = 0, ans = 0;
   char op;
   bool DIVIDED_BY_0 = false;

   cin >> num;
   ans = num;

   while (true)
   {
      cin >> op;
      if (op == '=') {
         if (DIVIDED_BY_0 == true) {
            cout << "0으로 나눌 수 없습니다." << endl;
            DIVIDED_BY_0 = false;
         }
         else cout << ans;
         return 0;
      }
      cin >> num;
      if (op == '+')
         ans += num;
      else if (op == '-')
         ans -= num;
      else if (op == '*')
         ans *= num;
      else if (op == '/') {
         if (num == 0) DIVIDED_BY_0 = true;
         else ans /= num;
      }
      else {
         cout << "정의되지 않은 연산입니다.";
         return 0;
      }
   }
}


입력한 순서대로 계산하는 프로그램 작성하기


출력

  • 연산자의 우선 순위는 생각하지 않고 입력 순서대로 사칙연산과 거듭제곱 계산을 수행한다. '='이 입력되면 그때까지의 결과를 출력하고 프로그램을 종료한다.
  • 0으로 나누려고 하면 경고 문구를 출력한다.
  • 연산 기호 +, -, *, /, ^ 외의 문자를 입력하면 경고 문구를 출력한다.


출력 예시

1 + 2 ^ 3 =
27

3 / 2 – 1 * 5 =
2.5

5 / 0 + 3 =
0으로 나눌 수 없습니다.

6 % 4 =
정의되지 않은 연산입니다.


코드

#include <iostream>
using namespace std;

double power(double a, int n) {
   if (n == 0) return 1;
   else if (n < 0) return 1 / power(a, -n);
   else return a * power(a, n - 1);
}

int main() {
   double num = 0, ans = 0;
   char op;
   bool DIVIDED_BY_0 = false;

   cin >> num;
   ans = num;

   while (true)
   {
      cin >> op;
      if (op == '=') {
         if (DIVIDED_BY_0 == true) {
            cout << "0으로 나눌 수 없습니다." << endl;
            DIVIDED_BY_0 = false;
         }
         else cout << ans;
         return 0;
      }
      cin >> num;
      if (op == '+')
         ans += num;
      else if (op == '-')
         ans -= num;
      else if (op == '*')
         ans *= num;
      else if (op == '/') {
         if (num == 0) DIVIDED_BY_0 = true;
         else ans /= num;
      }
      else if (op == '^')
         ans = power(ans, (int)num);
      else {
         cout << "정의되지 않은 연산입니다.";
         return 0;
      }
   }
}


입력한 순서대로 계산하는 프로그램 작성하기


출력

  • 연산자의 우선 순위는 생각하지 않고 입력 순서대로 사칙연산과 거듭제곱 계산을 수행한다. '='이 입력되면 그때까지의 결과를 출력한다.
  • 0으로 나누려고 하면 경고 문구를 출력한다.
  • 연산 기호 +, -, *, /, ^ 외의 문자를 입력하면 경고 문구를 출력하며 프로그램을 종료한다.
  • 그전까지는 계속 사칙연산을 수행한다.


출력 예시

17 =
17
1 + 2 ^ 3 =
27
3 / 2 – 1 * 5 =
2.5
5 / 0 + 3 =
0으로 나눌 수 없습니다.
6 % 4 =
정의되지 않은 연산입니다.


코드

#include <iostream>
using namespace std;

double power(double a, int n) {
   if (n == 0) return 1;
   else if (n < 0) return 1 / power(a, -n);
   else return a * power(a, n - 1);
}

int main() {
   double num = 0, ans = 0;
   char op;
   bool DIVIDED_BY_0 = false;

   cin >> num;
   ans = num;

   while (true)
   {
      cin >> op;
      if (op == '=') {
         if (DIVIDED_BY_0 == true) {
            cout << "0으로 나눌 수 없습니다." << endl;
            DIVIDED_BY_0 = false;
         }
         else cout << ans << endl;
         
         cin >> num;
         ans = num;
         continue;
      }
      cin >> num;
      if (op == '+')
         ans += num;
      else if (op == '-')
         ans -= num;
      else if (op == '*')
         ans *= num;
      else if (op == '/') {
         if (num == 0) DIVIDED_BY_0 = true;
         else ans /= num;
      }
      else if (op == '^')
         ans = power(ans, (int)num);
      else {
         cout << "정의되지 않은 연산입니다.";
         return 0;
      }
   }
}


팩토리얼을 계산하는 함수를 작성하기


출력

  • 입력한대로 팩토리얼 연산을 수행하여 출력한다.
  • 음이 아닌 정수만 입력된다.


출력 예시

5 ! =
120


코드

#include <iostream>
using namespace std;

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

   while (true) {
      cin >> num >> op;
      if (op == '!') cout << "= " << factorial(num) << endl;
      else return 0;
   }
}


입력한 순서대로 계산하는 프로그램 작성하기


출력

  • 연산자의 우선 순위는 생각하지 않고 입력 순서대로 사칙연산과 거듭제곱 계산, 팩토리얼 계산을 수행한다. '='이 입력되면 그때까지의 결과를 출력한다.
  • 0으로 나누려고 하면 경고 문구를 출력한다.
  • 연산 기호 +, -, *, /, ^, ! 외의 문자를 입력하면 경고 문구를 출력하며 프로그램을 종료한다.
  • 그전까지는 계속 연산을 수행한다.


출력 예시

1.5 =
1.5
1 + 2 ^ 3 =
27
4 / 2 * 3 ! =
720
5 / 0 + 3 =
0으로 나눌 수 없습니다.
6 % 4 =
정의되지 않은 연산입니다.


코드

#include <iostream>
using namespace std;

double power(double a, int n) {
   if (n == 0) return 1;
   else if (n < 0) return 1 / power(a, -n);
   else return a * power(a, n - 1);
}

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

int main() {
   double num, ans = 0;
   char op;
   bool DIVIDED_BY_0 = false;

   cin >> num;
   ans = num;

   while (true)
   {
      cin >> op;
      
      if (op == '=') {
         if (DIVIDED_BY_0 == true) {
            cout << "0으로 나눌 수 없습니다." << endl;
            DIVIDED_BY_0 = false;
         }
         else cout << ans << endl;

         cin >> num;
         ans = num;
         continue;
      }

      if (op == '!') {
         ans = factorial((int)ans);
         continue;
      }

      cin >> num;
      if (op == '+')
         ans += num;
      else if (op == '-')
         ans -= num;
      else if (op == '*')
         ans *= num;
      else if (op == '/') {
         if (num == 0) DIVIDED_BY_0 = true;
         else ans /= num;
      }
      else if (op == '^')
         ans = power(ans, (int)num);
      else {
         cout << "정의되지 않은 연산입니다.";
         return 0;
      }
   }
}

  • activity/public/2021/cpp/210527.txt
  • 마지막으로 수정됨: 4년 전
  • 저자 Algern0n