假定算数表达式的值均为非负整数常数,不包含变量、小 数和字符常量。 试设计一个算术四则运算表达式求值的简单计算器。 基本要求: 1、 操作数均为非负整数常数,操作符仅为+、-、、/; 2、 编写 main 函数进行测试
时间: 2023-11-08 10:03:56 浏览: 133
好的,让我来回答你的问题。根据你的要求,我可以设计一个简单计算器的代码,如下所示:
```
#include <iostream>
#include <stack>
#include <ctype.h>
using namespace std;
int calc(char op, int num1, int num2) {
switch(op) {
case '+':
return num1 + num2;
break;
case '-':
return num1 - num2;
break;
case '*':
return num1 * num2;
break;
case '/':
return num1 / num2;
break;
default:
return 0;
}
}
int main() {
stack<int> nums; // 存放操作数
stack<char> ops; // 存放操作符
string expression;
cout << "请输入算数表达式:" << endl;
cin >> expression;
for(int i = 0; i < expression.size(); i++) {
if(isdigit(expression[i])) { // 如果是数字,则入栈
int num = expression[i] - '0'; // 将字符型数字转换为整型数字
nums.push(num);
} else if(expression[i] == '+' || expression[i] == '-') { // 如果是加减号
while(!ops.empty()) {
int num2 = nums.top();
nums.pop();
int num1 = nums.top();
nums.pop();
char op = ops.top();
ops.pop();
int result = calc(op, num1, num2);
nums.push(result);
}
ops.push(expression[i]);
} else if(expression[i] == '*' || expression[i] == '/') { // 如果是乘除号
while(!ops.empty() && (ops.top() == '*' || ops.top() == '/')) {
int num2 = nums.top();
nums.pop();
int num1 = nums.top();
nums.pop();
char op = ops.top();
ops.pop();
int result = calc(op, num1, num2);
nums.push(result);
}
ops.push(expression[i]);
}
}
// 处理剩余的运算符和操作数
while(!ops.empty()) {
int num2 = nums.top();
nums.pop();
int num1 = nums.top();
nums.pop();
char op = ops.top();
ops.pop();
int result = calc(op, num1, num2);
nums.push(result);
}
// 输出结果
cout << "计算结果为:" << nums.top() << endl;
return 0;
}
```
你可以运行这个代码,输入一个算术表达式进行测试。注意,该代码假定所有的操作数都是非负整数常数,操作符仅限于加减乘除,并且不包含空格等其他字符。如果表达式不符合这些要求,代码可能会出错。
阅读全文