c语言表达式计算中缀转后缀,中缀表达式转后缀表达式并计算结果(c语言版)

《中缀表达式转后缀表达式并计算结果(c语言版)》由会员分享,可在线阅读,更多相关《中缀表达式转后缀表达式并计算结果(c语言版)(8页珍藏版)》请在技术文库上搜索。

1、中缀表达式转后缀表达式中缀表达式转后缀表达式 中缀表达式转后缀表达式的规则。 1.遇到操作数:直接输入到后缀表达式栈 2.遇到运算符,直接入操作符栈 3.遇到左括号:直接将其入栈 4.遇到右括号:执行出栈操作,并将出栈的元素输出,直到弹出栈的是左括号,左括号不 输出。 5.遇到其他运算符:加减乘除:弹出所有优先级大于或者等于该运算符的栈顶元素,然后 将该运算符入栈 6.最终将操作符栈中的元素依次出栈,输出到后缀表达式栈。 以下是自己写的代码。亲测没有问题。 (模拟一个计算器,可以带括号,中间可以空格,只 支持整数输入,但是输出结果精确到小数后 6 位) #include “stdio.h“ #。

2、define MAX_LEN 100 typedef struct cal unsigned char isOper;/是否是操作数 1,操作符 0.操作数 double Num;/值。或者是操作符的 ASCII 值 STRUCT_CAL; #define IS_NUM 0x00 #define IS_OPER0x01 STRUCT_CAL stackCalMAX_LEN; STRUCT_CAL stackCalBackMAX_LEN; unsigned char topCal; char stackOperMAX_LEN; unsigned char topOper; /* * 堆栈初始化 。

3、*/ void stackInit(void) int i; for(i=0;i=MAX_LEN)return; stackCaltopCal.Num = num; stackCaltopCal.isOper= isOper; topCal+; /* * 操作符出栈 */ char stackOperPop(void) if(topOper = 0)return 0; return stackOper-topOper; /* * 操作符入栈 */ void stackOperPush(char oper) if(topOper =MAX_LEN)return; stackOpertopOper。

4、+ = oper; /* *比较两个 sour sour1 的优先级 *1 sour = sour1 直接入操作符栈 *0 sour =0 ) num2 = stackCalPop()-Num; switch(char)stackCalBacki.Num) case +: stackCalPush(num2+num1, IS_NUM); break; case -: stackCalPush(num2-num1, IS_NUM); break; case *: stackCalPush(num2*num1, IS_NUM); break; case /: stackCalPush(int)nu。

5、m2/num1, IS_NUM); break; default : break; else stackCalPush(stackCalBacki.Num, IS_NUM); i+; if(i=tmpTop) break; printf(“nThe result is : %fn“, stackCal0.Num); stackInit(); int main(void) char inputMAX_LEN; stackInit(); while(1) printf(“Please input calculate Expression :n“); gets(input); StrToCal(input); /dispCalc(); suffixExpression(); return 0; 。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您编写一个函数,实现中缀表达式转后缀表达式,并计算最后的结果。以下是一个示例代码: ```python def infix_to_postfix(expression): # 定义运算符的优先级 precedence = {'+': 1, '-': 1, '*': 2, '/': 2} postfix = [] # 存储后缀表达式 stack = [] # 运算符栈 for char in expression: if char.isdigit(): postfix.append(char) elif char in '+-*/': while stack and stack[-1] != '(' and precedence[char] <= precedence.get(stack[-1], 0): postfix.append(stack.pop()) stack.append(char) elif char == '(': stack.append(char) elif char == ')': while stack and stack[-1] != '(': postfix.append(stack.pop()) stack.pop() # 弹出左括号 while stack: postfix.append(stack.pop()) return postfix def evaluate_postfix(postfix): stack = [] for char in postfix: if char.isdigit(): stack.append(int(char)) elif char in '+-*/': num2 = stack.pop() num1 = stack.pop() if char == '+': stack.append(num1 + num2) elif char == '-': stack.append(num1 - num2) elif char == '*': stack.append(num1 * num2) elif char == '/': stack.append(num1 / num2) return stack[0] def calculate(expression): postfix = infix_to_postfix(expression) result = evaluate_postfix(postfix) return result ``` 您可以调用 `calculate` 函数,并将中缀表达式作为参数传入。函数将返回计算结果。例如: ```python expression = "3 + 4 * 2 / ( 1 - 5 )" result = calculate(expression) print(result) # 输出结果为 1.0 ``` 请注意,以上代码只支持单个数字的计算,如果需要支持多位数的计算,需要对输入表达式进行解析和拼接。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值