C语言源代码实现用算法优先法对算数表达式求值
时间: 2024-05-12 11:13:28 浏览: 85
以下是使用算法优先法对算数表达式求值的C语言源代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
// 定义运算符栈和操作数栈
char op_stack[100];
int num_stack[100];
int op_top = -1;
int num_top = -1;
// 获取运算符优先级
int priority(char op) {
switch (op) {
case '+':
case '-':
return 1;
case '*':
case '/':
return 2;
default:
return 0;
}
}
// 计算表达式
int calculate(int a, int b, char op) {
switch (op) {
case '+':
return a + b;
case '-':
return a - b;
case '*':
return a * b;
case '/':
return a / b;
default:
return 0;
}
}
// 将字符转换为整数
int char_to_int(char c) {
return c - '0';
}
// 从操作数栈中弹出两个数,从运算符栈中弹出一个运算符进行计算
void eval() {
int b = num_stack[num_top--];
int a = num_stack[num_top--];
char op = op_stack[op_top--];
num_stack[++num_top] = calculate(a, b, op);
}
// 对输入的算数表达式进行求值
int evaluate(char* exp) {
int num = 0;
int i = 0;
while (exp[i] != '\0') {
if (isdigit(exp[i])) { // 数字
num = num * 10 + char_to_int(exp[i]);
} else { // 运算符
if (num != 0) { // 将数字入栈
num_stack[++num_top] = num;
num = 0;
}
while (op_top >= 0 && priority(op_stack[op_top]) >= priority(exp[i])) {
eval(); // 按优先级计算
}
op_stack[++op_top] = exp[i]; // 运算符入栈
}
i++;
}
if (num != 0) { // 将最后一个数字入栈
num_stack[++num_top] = num;
}
while (op_top >= 0) { // 计算剩余的表达式
eval();
}
return num_stack[num_top];
}
int main() {
char exp[100];
printf("请输入算数表达式:");
scanf("%s", exp);
int result = evaluate(exp);
printf("计算结果为:%d\n", result);
return 0;
}
```
使用该程序,可以输入一个算数表达式,程序将返回计算结果。例如,输入表达式"3+4*5-6/2",程序将返回17。
阅读全文