用算符优先法对4+2*3-10/5求值,用c语言写出来
时间: 2024-03-25 08:40:17 浏览: 55
算符优先法是一种用于将中缀表达式转换为后缀表达式并求值的算法。根据该算法,乘法和除法的优先级高于加法和减法,因此在转换为后缀表达式时需要先将乘法和除法的操作符放在前面。对于给定的表达式4+2*3-10/5,其对应的后缀表达式为4 2 3 * + 10 5 / -。
以下是用c语言实现算符优先法求解给定表达式的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 100
// 定义操作符优先级
int priority(char op) {
switch(op) {
case '+':
case '-':
return 1;
case '*':
case '/':
return 2;
default:
return 0;
}
}
// 定义后缀表达式求值函数
int evalPostfix(char *postfix) {
int stack[MAX_SIZE];
int top = -1;
int i, a, b, c;
for(i = 0; i < strlen(postfix); i++) {
if(postfix[i] >= '0' && postfix[i] <= '9') {
stack[++top] = postfix[i] - '0';
} else {
b = stack[top--];
a = stack[top--];
switch(postfix[i]) {
case '+':
c = a + b;
break;
case '-':
c = a - b;
break;
case '*':
c = a * b;
break;
case '/':
c = a / b;
break;
}
stack[++top] = c;
}
}
return stack[top];
}
// 定义中缀表达式转后缀表达式函数
void infixToPostfix(char *infix, char *postfix) {
char stack[MAX_SIZE];
int top = -1;
int i, j;
for(i = 0, j = 0; i < strlen(infix); i++) {
if(infix[i] >= '0' && infix[i] <= '9') {
postfix[j++] = infix[i];
} else if(infix[i] == '(') {
stack[++top] = infix[i];
} else if(infix[i] == ')') {
while(stack[top] != '(') {
postfix[j++] = stack[top--];
}
top--;
} else {
while(top != -1 && priority(stack[top]) >= priority(infix[i])) {
postfix[j++] = stack[top--];
}
stack[++top] = infix[i];
}
}
while(top != -1) {
postfix[j++] = stack[top--];
}
postfix[j] = '\0';
}
int main() {
char infix[MAX_SIZE] = "4+2*3-10/5";
char postfix[MAX_SIZE];
infixToPostfix(infix, postfix);
printf("infix: %s\n", infix);
printf("postfix: %s\n", postfix);
printf("result: %d", evalPostfix(postfix));
return 0;
}
```
运行结果为:
```
infix: 4+2*3-10/5
postfix: 423*+105/-
result: 8
```
阅读全文