C++ 스터디 #7: 계산기
시간 | 2021년 5월 27일 목요일 20:30 ~ |
장소 | Google Meet |
참가자 |
1. 계산기 예제
1.1. 사칙연산 계산기
두 수의 사칙연산을 수행하는 프로그램 작성하기
출력
- 첫 줄에 두 수와 연산자 기호를 입력한다.
- 입력한대로 사칙연산을 수행하여 계산 결과를 출력한다.
- 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; }
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. 입력한 순서대로 계산하기
입력한 순서대로 계산하는 프로그램 작성하기
출력
- 연산자의 우선 순위는 생각하지 않고 입력 순서대로 사칙연산을 수행한다. '='이 입력되면 그때까지의 결과를 출력하고 프로그램을 종료한다.
- 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; } } }
1.4. 입력한 순서대로 계산하기 += 거듭제곱
입력한 순서대로 계산하는 프로그램 작성하기
출력
- 연산자의 우선 순위는 생각하지 않고 입력 순서대로 사칙연산과 거듭제곱 계산을 수행한다. '='이 입력되면 그때까지의 결과를 출력하고 프로그램을 종료한다.
- 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; } } }
1.5. 입력한 순서대로 계산하기 += 무한루프
입력한 순서대로 계산하는 프로그램 작성하기
출력
- 연산자의 우선 순위는 생각하지 않고 입력 순서대로 사칙연산과 거듭제곱 계산을 수행한다. '='이 입력되면 그때까지의 결과를 출력한다.
- 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; } } }
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. 입력한 순서대로 계산하기 += 팩토리얼
입력한 순서대로 계산하는 프로그램 작성하기
출력
- 연산자의 우선 순위는 생각하지 않고 입력 순서대로 사칙연산과 거듭제곱 계산, 팩토리얼 계산을 수행한다. '='이 입력되면 그때까지의 결과를 출력한다.
- 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; } } }