목차

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

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

1. 계산기 예제

1.1. 사칙연산 계산기

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


출력


출력 예시

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;
      }


1.2. 거듭제곱 계산기

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


출력


출력 예시

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;
   }
}


1.3. 입력한 순서대로 계산하기

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


출력


출력 예시

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;
      }
   }
}


1.4. 입력한 순서대로 계산하기 += 거듭제곱

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


출력


출력 예시

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;
      }
   }
}


1.5. 입력한 순서대로 계산하기 += 무한루프

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


출력


출력 예시

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;
      }
   }
}


1.6. 팩토리얼 계산하기

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


출력


출력 예시

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;
   }
}


1.7. 입력한 순서대로 계산하기 += 팩토리얼

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


출력


출력 예시

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;
      }
   }
}