模拟计算器程序,要求包含加,减,乘,除,括号运算,开平方,绝对值的任何整型表达式进行求值C语言代码
时间: 2024-06-13 19:08:51 浏览: 17
以下是一个模拟计算器程序的C语言代码,可以进行加、减、乘、除、括号运算、开平方、绝对值等整型表达式的求值:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX_EXPR_LEN 1000
int is_digit(char c) {
return c >= '0' && c <= '9';
}
int is_operator(char c) {
return c == '+' || c == '-' || c == '*' || c == '/' || c == '(' || c == ')' || c == 's' || c == 'q' || c == 'a';
}
int priority(char op) {
if (op == '+' || op == '-') {
return 1;
} else if (op == '*' || op == '/') {
return 2;
} else if (op == 's' || op == 'q' || op == 'a') {
return 3;
} else {
return 0;
}
}
int calc(int a, int b, char op) {
if (op == '+') {
return a + b;
} else if (op == '-') {
return a - b;
} else if (op == '*') {
return a * b;
} else if (op == '/') {
return a / b;
} else if (op == 's') {
return sqrt(a);
} else if (op == 'q') {
return pow(a, 2);
} else if (op == 'a') {
return abs(a);
} else {
return 0;
}
}
int eval(char *expr) {
int num_stack[MAX_EXPR_LEN];
char op_stack[MAX_EXPR_LEN];
int num_top = -1;
int op_top = -1;
int i = 0;
while (expr[i] != '\0') {
if (is_digit(expr[i])) {
int num = 0;
while (is_digit(expr[i])) {
num = num * 10 + (expr[i] - '0');
i++;
}
num_stack[++num_top] = num;
} else if (is_operator(expr[i])) {
if (expr[i] == '(') {
op_stack[++op_top] = '(';
i++;
} else if (expr[i] == ')') {
while (op_stack[op_top] != '(') {
int b = num_stack[num_top--];
int a = num_stack[num_top--];
char op = op_stack[op_top--];
num_stack[++num_top] = calc(a, b, op);
}
op_top--;
i++;
} else {
while (op_top >= 0 && op_stack[op_top] != '(' && priority(op_stack[op_top]) >= priority(expr[i])) {
int b = num_stack[num_top--];
int a = num_stack[num_top--];
char op = op_stack[op_top--];
num_stack[++num_top] = calc(a, b, op);
}
op_stack[++op_top] = expr[i];
i++;
}
} else {
i++;
}
}
while (op_top >= 0) {
int b = num_stack[num_top--];
int a = num_stack[num_top--];
char op = op_stack[op_top--];
num_stack[++num_top] = calc(a, b, op);
}
return num_stack[0];
}
int main() {
char expr[MAX_EXPR_LEN];
printf("请输入表达式:");
scanf("%s", expr);
int result = eval(expr);
printf("结果为:%d\n", result);
return 0;
}
```