代码仅供作业小组人员使用
以下链接为经小组成员完成改善得到的中间结果各版本
(终稿)C++实现科学计算器主函数代码(含调用函数)_m0_57453166的博客-CSDN博客
(初稿)C++实现科学计算器主函数代码(含调用函数)_Honeyseaaa的博客-CSDN博客
(非完成版)C++实现科学计算器主函数代码,(不含调用函数)_克蕾尔的博客-CSDN博客
#include#include #include using namespace std; void judge(double *p) { double h = *p; while (h > pow(10, 308)) { cout << "运算超限,请进入下一次运算" << endl; break; } } int key1() { //三角函数预处理 int k1; cout << "请问是否需要对该数字进行预处理,如不需要请输入0:" << endl; cout << "1.sin 2.cos 3.tan " << endl; cin >> k1; while (k1 != 1 && k1 != 2 && k1 != 3 && k1 != 0) { cout << "请重新输入" << endl; cin >> k1; } switch (k1) { case 1: return 1; break; case 2: return 2; break; case 3: return 3; break; default: return 0; break; } } void key2(double* cal, int a) { double c = *cal; switch (a) {//所有涉及cal的都用c来表示 case 1: cout << "sin" << c; c = sin(c);//sinc break; case 2: cout << "cos" << c; c = cos(c);//cosc break; case 3: cout << "tan" << c; c = tan(c);//tanc break; case 0: c = c; cout << c; break; } *cal = c; } int keys(double* cal) { int b1; double b2, c; c = *cal; cout << "请输入您所需要的运算符或运算方式前的编号,其中第8个是结束运算:" << endl; cout << "************************************" << endl; cout << "* 1. + 2. — 3. × 4. ÷ *" << endl; cout << "* 5.n√ 6. ^n 7.1/X 8. FIN *" << endl; cout << "************************************" << endl; cout << "注:第五,第六个运算方式中的n为你下一个输入的数字,第七个倒数运算为对前面运算的结果进行倒数运算" << endl; cin >> b1; while (b1 != 1 && b1 != 2 && b1 != 3 && b1 != 4 && b1 != 5 && b1 != 6 && b1 != 7 && b1 != 8) { cout << "请重新输入" << endl; cin >> b1; } if (b1 == 8) { *cal = c; return 1; } int a = key1(); cout << "请输入下一个数:" << endl; cin >> b2; while (b1 != 8) { switch (b1) { case 1: cout << c; cout << " + "; key2(&b2, a); c += b2; judge(&c); cout << " = " << c; break; case 2: cout << c; cout << " - "; key2(&b2, a); c -= b2; judge(&c); cout << " = " << c; break; case 3: cout << c; cout << " × "; key2(&b2, a); c *= b2; judge(&c); cout << " = " << c; break; case 4: cout << c; cout << " ÷ "; key2(&b2, a); c /= b2; judge(&c); cout << " = " << c; break; case 5: cout << c; cout << "^(1/"; key2(&b2, a); cout << ")"; c = pow(c, 1 / b2); judge(&c); cout << " = " << c; break; case 6: cout << c; cout << "^" ; key2(&b2, a); c = pow(c, b2); judge(&c); cout << " = " << c; break; case 7: key2(&b2, a); cout << "/"; cout << c; c = b2 / c; judge(&c); cout << " = " << c; break; default: break; } *cal = c; cout << endl; return 0; } return 0; } int key3(double* p) { int b1; double b2, c; c = *p; cout << "请输入你所需要的运算符或运算方式前的编号,其中第8个是结束运算:" << endl; cout << "************************************" << endl; cout << "* 1. + 2. — 3. × 4. ÷ *" << endl; cout << "* 5.n√ 6. ^n 7.1/X 8. FIN *" << endl; cout << "************************************" << endl; cout << "注:第五,第六个运算方式中的n为你下一个输入的数字,第七个倒数运算为对前面运算的结果进行倒数运算" << endl; cin >> b1; while (b1 != 1 && b1 != 2 && b1 != 3 && b1 != 4 && b1 != 5 && b1 != 6 && b1 != 7 && b1 != 8) { cout << "请重新输入" << endl; cin >> b1; } if (b1 == 8) { *p = c; return 1; } cout << "请输入下一个数" << endl; cin >> b2; while (b2 > pow(10, 308) || b2 < pow(10, -308)) { cout << "输入超限,请重新输入" << endl; cin >> b2; } while (b1 != 8) { switch (b1) { case 1: cout << c; c += b2; cout << " + " << b2; judge(&c); cout << " = " << c; break; case 2: cout << c; c -= b2; cout << " - " << b2; judge(&c); cout << " = " << c; break; case 3: cout << c; c *= b2; cout << " × " << b2; judge(&c); cout << " = " << c; break; case 4: cout << c; c /= b2; cout << " ÷ " << b2; judge(&c); cout << " = " << c; break; case 5: cout << c; cout << "^(1/" << b2<<")"; c = pow(c, 1 / b2); judge(&c); cout << " = " << c; break; case 6: cout << c; cout << "^" << b2; c = pow(c, b2); judge(&c); cout << " = " << c; break; case 7: cout << b2; cout << "/"; cout << c; c = b2 / c; judge(&c); cout << " = " << c; break; default: break; } *p = c; cout << endl; return 0; } return 0; } void abn(double* cal) { double p = *cal; int a = key1(); cout << "请输入数字:" << endl; cin >> p; while (p > pow(10, 308)) { cout << "输入超限,请重新输入" << endl; cin >> p; } key2(&p, a); cout << " = "; cout << p << endl; int n = 0; while (n == 0) { n = keys(&p); } cout << p << endl; } void nor(double* cal) { double p = *cal; cout << "请输入数字:" << endl; cin >> p; int n = 0; while (n == 0) { n = key3(&p); } cout << p << endl; } int Narcissus(int n) { //判断水仙花数 int a, b, c, m; a = n / 100; b = (n % 100) / 10; c = n % 10; m = a * a * a + b * b * b + c * c * c; if (n == m) cout << n << "是水仙花数" << endl; else cout << n << "不是水仙花数" << endl; return 0; } int Divisor(int a, int b) { //计算最大公因数 int x = 0; cout << "请输入您想要判断的第一个数:" << endl; cin >> a; cout << "请输入您想要判断的第二个数:" << endl; cin >> b; for (x = a; x >= 1; x--) { if (a % x == 0 && b % x == 0) { cout << a << "和" << b << "的最大公因数是" << x << endl; break; } } return 0; } int Multiple(int a, int b) { //计算最小公倍数 int y; cout << "请输入您想要判断的第一个数:" << endl; cin >> a; cout << "请输入您想要判断的第二个数:" << endl; cin >> b; for (y = a; y <= a * b; y++) { if (y % a == 0 && y % b == 0) { cout << a << "和" << b << "的最小公倍数是" << y << endl; break; } } return 0; } bool isPrime(int n) { //判断素数 int i; if (n == 1) { return false; } else { for (i = 2; i <= sqrt(n); i++) { if ((n % i) == 0) return false; } } return true; } void tools() { //工具 int a; cout << "请选择您需要的工具" << endl; cout << "1. 水仙花数" << endl; cout << "2. 最大公因数" << endl; cout << "3. 最小公倍数" << endl; cout << "4. 素数" << endl; cout << "5. 阶乘(20以内)" << endl; cin >> a; int n = 0, m = 0; switch (a) { case 1: cout << "请输入您想要判断的数字(3位数):"; cin >> n; while (n >= 1000 || n <= 100) { cout << "您的数值非法,请重新输入一个三位数" << endl; cin >> n; } Narcissus(n); break; case 2: Divisor(n, m); break; case 3: Multiple(n, m); break; case 4: bool isFlag; cout << "请输入您想要判断的数字:"; cin >> n; isFlag = isPrime(n); if (isFlag) { cout << n << "是素数" << endl; } else { cout << n << "不是素数" << endl; } break; case 5: long long n; long long result = 1; cout << "请输入您想要计算的数字" << endl; cin >> n; while (n <=0 || n >=20) { cout << "您的数值非法,请重新输入" << endl; cin >> n; } for (int i = 1; i <= n; i++) { result *= i; } cout << n << "的阶乘为" << n << "!=" << result << endl; break; } } void calculation() { //计算 double cal = 0; cout << "如果您的运算涉及三角函数,请输入1,若不涉及,请输入2:" << endl; int b; cin >> b; while (b != 1 && b != 2) { cout << "请重新输入" << endl; cin >> b; } switch (b) { case 1: abn(&cal); break; case 2: nor(&cal); break; } } int main() { //工具or计算 while (1) { int a1 = 0; cout << "欢迎使用科学计算器!请选择您需要的功能" << endl; cout << "本计算器精确度最大到小数点后第五位" << endl; cout << "最大值为10^308,最小值为10^-308" << endl; cout << "1.工具" << endl; cout << "2.计算" << endl; cin >> a1; while (a1 != 1 && a1 != 2) { cout << "请重新输入" << endl; cin >> a1; } if (a1 == 1) { tools(); } else if (a1 == 2) { calculation(); } } }



