c语言用栈实现计算器加法运算,(转)利用栈实现模拟计算器
时间: 2023-08-02 22:38:49 浏览: 46
好的,我来回答你的问题。
首先,我们需要定义一个栈结构来存储数字和运算符。这个栈可以使用数组来实现,同时需要定义栈顶指针。
然后,我们可以通过读入用户输入的表达式,逐个字符进行处理。当读入的字符是数字时,直接将其入栈。当读入的字符是运算符时,从栈中弹出两个数进行计算,然后将计算结果入栈。
具体的实现过程可以参考下面的代码:
```c
#include <stdio.h>
#define MAXSIZE 100
typedef struct {
int top;
int data[MAXSIZE];
} Stack;
void initStack(Stack *s) {
s->top = -1;
}
void push(Stack *s, int x) {
s->top++;
s->data[s->top] = x;
}
int pop(Stack *s) {
int x = s->data[s->top];
s->top--;
return x;
}
int isEmpty(Stack *s) {
return s->top == -1;
}
int main() {
Stack s;
initStack(&s);
char c;
int num = 0;
int flag = 0;
while ((c = getchar()) != '\n') {
if (c >= '0' && c <= '9') {
num = num * 10 + c - '0';
flag = 1;
} else if (flag) {
push(&s, num);
num = 0;
flag = 0;
}
if (c == '+') {
int a = pop(&s);
int b = pop(&s);
push(&s, a + b);
}
}
printf("%d\n", pop(&s));
return 0;
}
```
在这个代码中,我们定义了一个栈结构,包括初始化、入栈、出栈、判断栈空等基本操作。然后,我们读入用户输入的表达式,逐个字符进行处理。当读入的字符是数字时,将其保存在一个变量中,等到下一个字符不是数字时,将这个变量入栈。当读入的字符是运算符时,从栈中弹出两个数进行计算,然后将计算结果入栈。最后,输出栈顶元素即为计算结果。
当然,这个代码只能处理加法运算,如果需要支持更多的运算符,需要进行相应的修改。
相关推荐
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)