Lab 4-2: 計算機四則運算 (40%)

  • 輸入:
    1. 要執行的計算功能,分別如下:
      1. 加 (+)
      2. 減 (-)
      3. 乘 (*)
      4. 除 (/)
    2. 兩個以 10 為底的實數,以科學記號格式輸入。
      • 實數的正負號 (sign),正負號輸入大於等於 0 為正數,小於 0 為負數。
      • 實數的尾數 (mantissa),尾數部分固定 9 位數字,第一位不為 0,數值為輸入數字乘以\( \frac{1}{100,000,000} \),。
      • 實數的指數部分 (exponent),指數部分為 -38 至 +38。
      • 第二個實數為任意非 0 的數字。
  • 輸出:所選擇的運算子字元 (i.e. +, -, *, /)及兩實數的運算結果,以科學記號表示,有效位數為 15 位。
  • 檔名:lab4_2_<學號>.cpp (e.g. lab4_2_106062802.cpp)

程式需提示使用者輸入需要的運算功能,輸出該運算功能的運算子字元。

Simple scientific calculator
1) plus (+)
2) minus (-)
3) multiplication (*)
4) division (/)
Please select the operator: <1-4>
You selected: <+, -, *, />
Input real number (a), sign: <sign a>
Input real number (a), mantissa: <mantissa a>
Input real number (a), exponent: <exponent a>
Input real number (b), sign: <sign b>
Input real number (b), mantissa: <mantissa b>
Input real number (b), exponent: <exponent b>
The real number (a) is: <output real number a>
The real number (b) is: <output real number b>
(a) <+, -, *, /> (b) = <result>

Example:

$ ./a.out
Simple scientific calculator
1) plus (+)
2) minus (-)
3) multiplication (*)
4) division (/)
Please select the operator: 3
You selected: *
Input real number (a), sign: -100
Input real number (a), mantissa: 123456789
Input real number (a), exponent: 10
Input real number (b), sign: -10
Input real number (b), mantissa: 123456788
Input real number (b), exponent: 10
The real number (a) is: -1.23456789e+10
The real number (b) is: -1.23456788e+10
(a) * (b) = 1.52415786267337e+20

Reference Code:

Credit: 張晉赫 (110021109)

#include <iomanip>
#include <iostream>
#include <math.h>
using namespace std;

int main()
{
    int selection;
    cout << "Simple scientific calculator \n"
         << "1) plus (+) \n"
         << "2) minus (-) \n"
         << "3) multiplication (*) \n"
         << "4) division (/) \n";
    cout << "Please select the operator: ";
    cin >> selection;
    switch (selection)
    {
    case 1:
        cout << "You selected: +" << endl;
        break;
    case 2:
        cout << "You selected: -" << endl;
        break;
    case 3:
        cout << "You selected: *" << endl;
        break;
    case 4:
        cout << "You selected: /" << endl;
        break;
    }

    int sign_a, exponent_a, sign_b, exponent_b;
    double mantissa_a, mantissa_b;

    cout << "Input real number (a), sign: ";
    cin >> sign_a;
    cout << "Input real number (a), mantissa: ";
    cin >> mantissa_a;
    cout << "Input real number (a), exponent: ";
    cin >> exponent_a;

    cout << "Input real number (b), sign: ";
    cin >> sign_b;
    cout << "Input real number (b), mantissa: ";
    cin >> mantissa_b;
    cout << "Input real number (b), exponent: ";
    cin >> exponent_b;

    mantissa_a = mantissa_a / 100000000;
    mantissa_b = mantissa_b / 100000000;

    double num_a = pow(10, exponent_a);
    double number_a = mantissa_a * num_a;
    if (sign_a >= 0)
    {
        cout << "The real number (a) is: " << setprecision(8) << scientific << number_a << endl;
    }
    else
    {
        number_a = -number_a;
        cout << "The real number (a) is: " << setprecision(8) << scientific << number_a << endl;
    }

    double num_b = pow(10, exponent_b);
    double number_b = mantissa_b * num_b;
    if (sign_b >= 0)
    {
        cout << "The real number (b) is: " << setprecision(8) << scientific << number_b << endl;
    }
    else
    {
        number_b = -number_b;
        cout << "The real number (b) is: " << setprecision(8) << scientific << number_b << endl;
    }

    switch (selection)
    {
    case 1:
        cout << "(a) + (b) = " << setprecision(14) << number_a + number_b << endl;
        break;
    case 2:
        cout << "(a) - (b) = " << setprecision(14) << number_a - number_b << endl;
        break;
    case 3:
        cout << "(a) * (b) = " << setprecision(14) << number_a * number_b << endl;
        break;
    case 4:
        cout << "(a) / (b) = " << setprecision(14) << number_a / number_b << endl;
        break;
    }

    return 0;
}