Lab 4-2: 計算機四則運算 (40%)
- 輸入:
- 要執行的計算功能,分別如下:
- 加 (
+
) - 減 (
-
) - 乘 (
*
) - 除 (
/
)
- 加 (
- 兩個以 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;
}