C++ 第一阶段项目一:实现简易计算器
目录
一、项目目标
二、功能需求
1. 基本功能
2. 扩展功能(选做)
三、实现思路
1. 主程序流程图
2. 关键步骤
四、代码实现
五、代码说明
1. 输入验证
2. 异常处理
3. 模块化设计
六、运行示例
七、扩展建议
八、总结
一、项目目标
实现一个命令行简易计算器,支持以下功能:
- 四则运算(加、减、乘、除)
- 用户交互(输入操作数和操作符)
- 错误处理(除零错误、无效输入)
- 循环运行(用户可选择继续或退出)
二、功能需求
1. 基本功能
- 用户输入两个数字和一个运算符(
+
,-
,*
,/
) - 程序计算结果并输出
- 支持连续计算(用户可选择是否继续)
2. 扩展功能(选做)
- 输入验证(防止非数字输入)
- 支持更多运算(如幂运算
^
、取模%
) - 使用函数封装逻辑
三、实现思路
1. 主程序流程图
开始↓
显示菜单↓
获取用户输入(操作数1、操作符、操作数2)↓
执行计算↓
显示结果↓
询问是否继续↓
结束 or 循环
2. 关键步骤
- 输入处理:使用
cin
获取用户输入,注意处理输入错误。 - 错误检查:检查除零错误和无效操作符。
- 循环控制:使用
do-while
循环保持程序运行。
四、代码实现
#include <iostream>
#include <limits> // 用于输入验证
using namespace std;// 函数声明
void displayMenu();
double getNumber(const string& prompt);
char getOperator();
void calculate(double num1, char op, double num2);
bool confirmContinue();int main() {char choice = 'y';do {displayMenu();double num1 = getNumber("请输入第一个数字: ");char op = getOperator();double num2 = getNumber("请输入第二个数字: ");calculate(num1, op, num2);choice = confirmContinue();} while (choice == 'y' || choice == 'Y');cout << "感谢使用!再见!" << endl;return 0;
}// 显示菜单
void displayMenu() {cout << "简易计算器\n";cout << "支持的运算符: +, -, *, /\n";
}// 获取数字(带输入验证)
double getNumber(const string& prompt) {double num;while (true) {cout << prompt;if (cin >> num) {break;} else {cin.clear(); // 清除错误标志cin.ignore(numeric_limits<streamsize>::max(), '\n'); // 忽略无效输入cout << "输入错误!请输入一个数字。\n";}}return num;
}// 获取操作符
char getOperator() {char op;while (true) {cout << "请输入操作符 (+, -, *, /): ";cin >> op;if (op == '+' || op == '-' || op == '*' || op == '/') {break;} else {cout << "无效的操作符!请重新输入。\n";}}return op;
}// 执行计算
void calculate(double num1, char op, double num2) {try {switch (op) {case '+':cout << "结果: " << num1 + num2 << endl;break;case '-':cout << "结果: " << num1 - num2 << endl;break;case '*':cout << "结果: " << num1 * num2 << endl;break;case '/':if (num2 == 0) {throw runtime_error("除数不能为零!");}cout << "结果: " << num1 / num2 << endl;break;default:cout << "未知错误!" << endl;}} catch (const exception& e) {cerr << "错误: " << e.what() << endl;}
}// 确认是否继续
bool confirmContinue() {char ch;while (true) {cout << "是否继续计算?(y/n): ";cin >> ch;if (ch == 'y' || ch == 'Y' || ch == 'n' || ch == 'N') {return (ch == 'y' || ch == 'Y');} else {cout << "请输入 y 或 n。\n";}}
}
五、代码说明
1. 输入验证
- 使用
cin.fail()
检测输入错误。 - 使用
cin.clear()
和cin.ignore()
清理输入流。
2. 异常处理
- 使用
try-catch
捕获除零错误。 - 抛出
runtime_error
提供错误信息。
3. 模块化设计
- 将功能拆分为独立函数,提高代码可读性和复用性。
六、运行示例
简易计算器
支持的运算符: +, -, *, /
请输入第一个数字: 10
请输入操作符 (+, -, *, /): *
请输入第二个数字: 5
结果: 50
是否继续计算?(y/n): y
请输入第一个数字: 20
请输入操作符 (+, -, *, /): /
请输入第二个数字: 0
错误: 除数不能为零!
是否继续计算?(y/n): n
感谢使用!再见!
七、扩展建议
-
添加更多运算:
case '^': // 幂运算cout << "结果: " << pow(num1, num2) << endl;break;
-
使用函数指针或 Lambda 表达式:
using Operation = double (*)(double, double); map<char, Operation> operations = {{'+', [](double a, double b) { return a + b; }},{'-', [](double a, double b) { return a - b; }} };
-
面向对象设计:
class Calculator { public:void run(); private:double add(double a, double b);double subtract(double a, double b); };
八、总结
通过本项目,你将掌握:
- 基本输入输出和用户交互
- 条件判断与循环控制
- 函数的封装与调用
- 异常处理和输入验证
- 模块化编程思想
这是一个非常适合 C++ 初学者的实践项目,建议多调试并尝试扩展功能!