利用栈实现计算器(calculator)一:基本思路及实现

github:https://github.com/AnkangH/CSDN/blob/master/%E5%88%A9%E7%94%A8%E6%A0%88%E5%AE%9E%E7%8E%B0%E8%AE%A1%E7%AE%97%E5%99%A8/01.%E5%9F%BA%E6%9C%AC%E6%80%9D%E8%B7%AF%E5%8F%8A%E5%88%9D%E6%AD%A5%E5%8A%9F%E8%83%BD%E5%AE%9E%E7%8E%B0

1.要求

输入一个数学算术表达式,计算它的值并输出,实现科学计算器。输入为0-9数字,+ -*,以及()括号。
暂时完成了数字0-9的运算,对于大于两位的十进制数,需要将原先的char变为string,并且对字符串进行划分,来确定每个数字大小。如对于“1+2”和“11+22”,基本的运算程序相同,只是需要根据运算符和可能的括号来确定参加计算的数值是多少。

2.设计思路

2.1 改写后缀表达式

对于一个数学算术表达式,如6*(5+(2+3)*8+3),需要根据算术计算符的优先级进行划分,先计算优先级高的,其结果再参与下个计算。上述表达式为中缀记法,而后缀记法为6523+8*+3+*。可以看出后缀记法不含有括号,且计算顺序为从左到右,不需要判断优先级。
基本思路是利用栈将中缀算术表达式改写为后缀算术表达式。然后利用栈求解后缀算术表达式的结果

对于带有括号的中缀表达式,可以利用栈实现中缀表达式到后缀表达式的改写。基本思路是遍历输入字符串,对于每个字符进行判断。
如果是数字,则放到输出表达式中。
如果是运算符‘ + ’ ‘ - ’ ‘ * ’ ‘ ( ’那么根据栈顶元素判断。如当前运算符优先级>栈顶元素,当前运算符入栈。否则栈顶元素出栈,放入输出表达式,直到当前运算符优先级小于栈顶元素或栈空。
如果是运算符‘)’那么将栈顶元素放到输出表达式时,直到栈顶元素为‘&#

  • 24
    点赞
  • 154
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
好的,我来解答你的问题。 下面是一个基于的C语言计算器加法运算实现的示例代码: ```c #include <stdio.h> #include <stdlib.h> #define MAX_SIZE 100 typedef struct stack { int top; // 顶指针 int data[MAX_SIZE]; // 的数组 } Stack; // 初始化 void init(Stack *s) { s->top = -1; } // 判断是否为空 int is_empty(Stack *s) { return s->top == -1; } // 判断是否已满 int is_full(Stack *s) { return s->top == MAX_SIZE - 1; } // 入 void push(Stack *s, int element) { if (is_full(s)) { printf("Stack is full.\n"); exit(1); } s->data[++s->top] = element; } // 出 int pop(Stack *s) { if (is_empty(s)) { printf("Stack is empty.\n"); exit(1); } return s->data[s->top--]; } // 获取顶元素 int get_top(Stack *s) { if (is_empty(s)) { printf("Stack is empty.\n"); exit(1); } return s->data[s->top]; } // 计算器加法运算 int calculator(char *str) { Stack s; init(&s); int i = 0; while (str[i] != '\0') { if (str[i] >= '0' && str[i] <= '9') { // 如果是数字字符,则将其转换为数字压入中 int num = str[i] - '0'; while (str[i + 1] >= '0' && str[i + 1] <= '9') { num = num * 10 + str[i + 1] - '0'; i++; } push(&s, num); } else if (str[i] == '+') { // 如果是加号,则将顶的两个元素弹出相加后再将结果压入中 int num1 = pop(&s); int num2 = pop(&s); push(&s, num1 + num2); } i++; } return get_top(&s); } int main() { char str[100]; printf("Please input the expression: "); scanf("%s", str); int result = calculator(str); printf("Result: %d\n", result); return 0; } ``` 以上就是一个基于的C语言计算器加法运算实现的示例代码,希望能帮助到你。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值