应用逆波兰式解决四则运算,用C语言编写一个程序实现四则运算。 程序运行时输入算术表达式, 运算符包括 +, -, *, /, (, ) , 输出表达式的值。
时间: 2023-09-18 20:06:42 浏览: 123
好的,这是一个不错的问题。以下是一个简单的实现逆波兰式求解四则运算的 C 语言程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define STACK_SIZE 100
double stack[STACK_SIZE];
int top = 0;
void push(double value) {
if (top >= STACK_SIZE) {
fprintf(stderr, "Stack overflow\n");
exit(EXIT_FAILURE);
}
stack[top++] = value;
}
double pop() {
if (top <= 0) {
fprintf(stderr, "Stack underflow\n");
exit(EXIT_FAILURE);
}
return stack[--top];
}
int is_operator(char c) {
return c == '+' || c == '-' || c == '*' || c == '/';
}
double evaluate(char *expression) {
char *p = expression;
while (*p != '\0') {
if (isdigit(*p)) {
double value = atof(p);
push(value);
while (isdigit(*p) || *p == '.') {
p++;
}
} else if (is_operator(*p)) {
double b = pop();
double a = pop();
switch (*p) {
case '+':
push(a + b);
break;
case '-':
push(a - b);
break;
case '*':
push(a * b);
break;
case '/':
push(a / b);
break;
}
p++;
} else {
p++;
}
}
return pop();
}
int main() {
char expression[1024];
printf("Enter an arithmetic expression in RPN: ");
fgets(expression, 1024, stdin);
printf("Result: %g\n", evaluate(expression));
return 0;
}
```
这个程序使用栈来实现逆波兰式求解,先将数字压入栈中,遇到操作符时取出栈顶的两个数字进行运算,再将结果压入栈中,最后栈中只剩一个数字,即为表达式的值。
注意:这个程序并没有对表达式的合法性进行完整的检查,如果表达式非法会导致程序崩溃。对于实际应用中的四则运算,还需要考虑括号的优先级和结合性等问题,这里只是提供一个简单的实现作为参考。
阅读全文