算术表达式求值 编程判断输入的包含括号和加、减、乘、除运算的整数表达式是否合法,如果不合法,给出错误提示信息;如果合法,则进一步判断计算结果是否正确,如果正确给出100分,不正确给出0分。
时间: 2024-04-15 15:27:26 浏览: 23
要实现算术表达式求值,可以按照以下步骤进行:
1. 创建一个栈,用于存储运算符和操作数。
2. 遍历表达式的每个字符:
- 如果字符是数字,则将其转换为整数并将其压入栈中。
- 如果字符是运算符(+、-、*、/),则将其压入栈中。
- 如果字符是左括号('('),则将其压入栈中。
- 如果字符是右括号(')'),则从栈中弹出运算符和操作数,并执行相应的运算,直到遇到左括号为止。将运算结果压入栈中。
3. 遍历完整个表达式后,栈中应该只剩下一个操作数,即最终的计算结果。
4. 如果栈中元素不止一个或者栈为空,则表达式不合法。
5. 将栈中剩下的操作数弹出,并与预期的结果进行比较,如果相等则给出100分,否则给出0分。
以下是一个示例的Java代码实现:
```java
import java.util.Stack;
public class ArithmeticExpressionEvaluator {
public static boolean isValidExpression(String expression) {
Stack<Character> stack = new Stack<>();
for (char c : expression.toCharArray()) {
if (c == '(') {
stack.push(c);
} else if (c == ')') {
if (stack.isEmpty() || stack.peek() != '(') {
return false;
}
stack.pop();
}
}
return stack.isEmpty();
}
public static int evaluateExpression(String expression) {
Stack<Integer> stack = new Stack<>();
for (char c : expression.toCharArray()) {
if (Character.isDigit(c)) {
stack.push(Character.getNumericValue(c));
} else if (c == '+' || c == '-' || c == '*' || c == '/') {
if (stack.size() < 2) {
return 0;
}
int operand2 = stack.pop();
int operand1 = stack.pop();
int result = 0;
switch (c) {
case '+':
result = operand1 + operand2;
break;
case '-':
result = operand1 - operand2;
break;
case '*':
result = operand1 * operand2;
break;
case '/':
result = operand1 / operand2;
break;
}
stack.push(result);
}
}
if (stack.size() != 1) {
return 0;
}
return stack.pop();
}
public static void main(String[] args) {
String expression = "(4+3)*2";
if (!isValidExpression(expression)) {
System.out.println("表达式不合法");
return;
}
int expected = 14; // 预期的结果
int result = evaluateExpression(expression);
if (result == expected) {
System.out.println("100分");
} else {
System.out.println("0分");
}
}
}
```
注意:这只是一个简单的示例代码,仅考虑了整数的加、减、乘、除运算,没有考虑运算符优先级和括号的优先级。在实际的应用中,可能需要更复杂的算法来处理更复杂的表达式。