分析题目, 大多数都是常规操作, 较为特殊的有:
- 程序需有一定的容错性, 当用户输入非法字符时, 提示用户重新输入。
- 绝对值的实现
- e^x的实现
- 首先是 第一点 这里通过cin.fail()流判断是否合法
- cin.fail()来判断当前的输入的类型和预期的是否相同,如不同cin.fail()返回true
// 输入验证if (cin.fail() || choice < 1 || choice > 9) {cin.clear(); // 清除错误标志cin.ignore(numeric_limits<streamsize>::max(), '\n'); cout << "输入字符非法, 请重新输入" << endl;continue; // 重新开始循环}
- 然后是绝对值的实现, 这里使用
abs()
函数,abs()
函数可以对 int 型 求绝对值,fabs()
则可对 浮点数 求绝对值 - 最后是 e^x的实现, 这里使用
exp(n)
函数, 括号内只有一个参数n
, 该参数的意义为 e 的n
次方
需要注意的是, exp()
函数 和 abs()
函数均在 cmath
库中
最后是完整代码:
#include<iostream>
using namespace std;
#include<iomanip>
#include <cmath>void startMenu()
{cout << "欢迎使用简易计算器!\n1. 加法\n2. 减法\n3. 乘法\n4. 除法\n5. 绝对值\n6. 平方根\n7. e^x\n8. x^y\n9. 退出\n请选择操作(1 - 9):" << endl;
}int main()
{int choice,a,b;double x, y;cout << setiosflags(ios::fixed) << setprecision(2);while (true){startMenu();cin >> choice;// 输入验证if (cin.fail() || choice < 1 || choice > 9) {cin.clear(); // 清除错误标志cin.ignore(numeric_limits<streamsize>::max(), '\n'); cout << "输入字符非法, 请重新输入" << endl;continue; // 重新开始循环}switch (choice){case 1:{cout << "请输入需要求 和 的两个数" << endl;cin >> x >> y;cout << x + y << endl;break;}case 2:{cout << "请输入需要求 差 的两个数" << endl;cin >> x >> y;cout << x - y << endl;break;}case 3:{cout << "请输入需要求 积 的两个数" << endl;cin >> x >> y;cout << x * y << endl;break;}case 4:{cout << "请输入需要求 商 的两个数" << endl;while (true){cin >> x >> y;if (y == 0){cout << "除数不能为0" << endl;continue;;}elsebreak;}cout << x / y << endl;break;}case 5:{cout << "请输入需要求 绝对值 的数" << endl;cin >> a;cout << abs(a) << endl;break;}case 6:{cout << "请输入需要求 平方根 的数" << endl;while (true){cin >> a;if (a < 0){cout << "开方数不能为负数" << endl;continue;}elsebreak;}cout << pow(a, 0.5) << endl;break;}case 7:{cout << "请输入需要求 e^x 的数" << endl;cin >> a;cout << exp(a) << endl;break;}case 8:{cout << "请输入需要求 x^y 的两个数" << endl;cin >> a>>b;cout << pow(a, b) << endl;break;}case 9:return 0;}
}system("pause");return 0;
}