c语言代码利用栈求表达式的值能够完成加减乘除及带括号的四则混合整数运算,程序中包含int make_str()和int push_num等功能函数
时间: 2024-02-18 22:04:43 浏览: 85
好的,我可以为您提供一个利用栈求表达式值的C语言代码。代码中包含了make_str和push_num等功能函数。
```
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX_SIZE 100
int stack[MAX_SIZE];
int top = -1;
int push(int val) {
if (top == MAX_SIZE - 1) {
printf("Stack overflow");
exit(1);
}
stack[++top] = val;
return val;
}
int pop() {
if (top == -1) {
printf("Stack underflow");
exit(1);
}
return stack[top--];
}
int is_operator(char c) {
return (c == '+' || c == '-' || c == '*' || c == '/');
}
int make_str(char *str, int *i, char *expr) {
int j = 0;
while (isdigit(expr[*i])) {
str[j++] = expr[*i];
(*i)++;
}
str[j] = '\0';
return atoi(str);
}
int push_num(char *str) {
int num = atoi(str);
return push(num);
}
int evaluate(char *expr) {
int i = 0;
char str[10];
while (expr[i] != '\0') {
if (isdigit(expr[i])) {
int num = make_str(str, &i, expr);
push(num);
}
else if (is_operator(expr[i])) {
int op2 = pop();
int op1 = pop();
int result;
switch (expr[i]) {
case '+': result = op1 + op2; break;
case '-': result = op1 - op2; break;
case '*': result = op1 * op2; break;
case '/': result = op1 / op2; break;
}
push(result);
}
i++;
}
return pop();
}
int main() {
char expr[MAX_SIZE];
printf("Enter an expression: ");
fgets(expr, MAX_SIZE, stdin);
int result = evaluate(expr);
printf("Result: %d\n", result);
return 0;
}
```
该代码可以处理带括号的四则混合整数运算。您可以使用fgets函数从标准输入读取表达式,并调用evaluate函数计算表达式的值。
阅读全文