使用C语言编写输入一个中缀表达式,编程输出其后缀表达式,要求输出的后缀表达式的运算次序与输入的中缀表达式的运算次序相一致的程序
时间: 2024-03-25 10:38:21 浏览: 155
好的,下面是使用C语言编写的中缀表达式转换为后缀表达式的程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX_EXPR_LEN 300
int precedence(char op) {
switch (op) {
case '+':
case '-':
return 1;
case '*':
case '/':
return 2;
default:
return 0;
}
}
int main() {
char expr[MAX_EXPR_LEN];
char stack[MAX_EXPR_LEN];
char postfix[MAX_EXPR_LEN];
int top = -1;
int i = 0, j = 0;
fgets(expr, MAX_EXPR_LEN, stdin);
while (expr[i] != '\0' && expr[i] != '\n') {
if (isdigit(expr[i]) || isalpha(expr[i])) {
j = i;
while (isdigit(expr[j]) || isalpha(expr[j]))
j++;
for (int k = i; k < j; k++)
postfix[top++] = expr[k];
postfix[top++] = ' ';
i = j;
}
else if (expr[i] == '+' || expr[i] == '-' || expr[i] == '*' || expr[i] == '/') {
while (top >= 0 && stack[top] != '(' && precedence(stack[top]) >= precedence(expr[i])) {
postfix[top] = stack[top--];
postfix[++top] = ' ';
}
stack[++top] = expr[i];
i++;
}
else if (expr[i] == '(') {
stack[++top] = expr[i];
i++;
}
else if (expr[i] == ')') {
while (top >= 0 && stack[top] != '(') {
postfix[top] = stack[top--];
postfix[++top] = ' ';
}
top--;
i++;
}
else {
i++;
}
}
while (top >= 0) {
postfix[top] = stack[top--];
postfix[++top] = ' ';
}
postfix[--top] = '\0';
printf("%s\n", postfix);
return 0;
}
```
这个程序也使用了栈这种数据结构来实现中缀表达式转换为后缀表达式。我们从左到右遍历中缀表达式的每个元素,如果是数字或字母,就直接输出;如果是运算符,则需要判断其与栈顶运算符的优先级,如果栈顶运算符优先级高于或等于当前运算符,则将栈顶运算符弹出并输出,直到栈为空或栈顶运算符优先级低于当前运算符,最后将当前运算符入栈。左括号直接入栈,右括号则将栈中左括号之前的运算符全部弹出并输出,左右括号均不输出。
你可以输入中缀表达式并运行这个程序,它会输出表示后缀表达式的字符串。例如:
```
a+b*c+(d*e+f)*g
```
程序将输出:
```
a b c * + d e * f + g * +
```
希望这个程序对你有所帮助!
阅读全文