用c语言编写一个程序编写函数int add(char s[]);计算字符串形式的逆波兰表达式(即两个操作数在前,运算符在后)。例如:23+4*则计算(2+3)*4,又如234+*则计算2*(3+4)。要求在主函数中输入这样的字符串,调用add函数计算表达式的值。
时间: 2024-03-10 15:45:12 浏览: 124
好的,以下是用 C 语言编写的程序,可以计算字符串形式的逆波兰表达式:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX_SIZE 100
int stack[MAX_SIZE];
int top = -1;
void push(int x) {
if (top == MAX_SIZE - 1) {
printf("Stack overflow\n");
exit(1);
}
stack[++top] = x;
}
int pop() {
if (top == -1) {
printf("Stack underflow\n");
exit(1);
}
return stack[top--];
}
int add(char s[]) {
int i, x, y;
for (i = 0; s[i] != '\0'; i++) {
if (isdigit(s[i])) {
push(s[i] - '0');
} else {
x = pop();
y = pop();
switch(s[i]) {
case '+':
push(x + y);
break;
case '-':
push(y - x);
break;
case '*':
push(x * y);
break;
case '/':
push(y / x);
break;
default:
printf("Invalid operator\n");
exit(1);
}
}
}
return pop();
}
int main() {
char s[MAX_SIZE];
printf("Enter the reverse Polish expression: ");
scanf("%s", s);
int result = add(s);
printf("The result is: %d\n", result);
return 0;
}
```
程序的主要思路是使用栈来实现逆波兰表达式的计算。遍历字符串中的每个字符,如果是数字,则将其转换为整数并入栈;如果是运算符,则从栈中取出两个数进行计算,并将结果入栈。最后栈中只剩下一个元素,即为表达式的值。
在主函数中,首先输入逆波兰表达式,然后调用add函数计算表达式的值,最后输出结果即可。
需要注意的是,如果输入的表达式不合法,程序会输出错误信息并退出。
阅读全文