c 用栈编写一个四则运算计算器 支持括号
用栈编写四则运算器
包括两个栈,运算符栈和操作数栈,采用数组方式
自左向右扫描表达式,凡是遇到操作数一律进操作数栈。
当遇到运算符时,如果他的优先级比运算符栈栈顶元素的优先级高就入栈。反之,取出栈顶运算符和操作数栈顶的两个连续操作数运算,并将结果存入操作数栈,然后继续比较该运算符与栈顶的运算符的优先级。
后缀表达式规则:从左到右遍历中缀表达式的每个数字和符号,若是数字就输出,即成为后缀表达式的一部分;
若是符号,则判断其与栈顶符号的优先级,是右括号或优先级低于找顶符号(乘除优先加减)
则栈顶元素依次出栈并输出,并将当前符号进栈,一直到最终输出后缀表达式为止。
数据栈和操作符栈压栈函数
主函数:
循环判断输入的数是否是数字 存入一个存放数字的数组
判断输入是否为'(',不是即将数字压入栈内
再循环判断操作符的优先级 flag去标志优先级
flag 决定操作符的压栈和操作数的处理
flag = 0 表示操作符压栈
flag = -1 进行操作符处理
compare函数:
先判断栈顶和当前操作符+-*/的优先级返回0 表示操作符压栈 返回-1进行操作符处理 返回1是对()进行处理
接着判断栈是否为空和栈顶是否为(
判断括号里面是否运算完
calculator_date函数:
从数据栈中取出两个操作数进行数据处理
每次操作之后更新数据栈和操作符栈
得到的值结果再压入数据栈
跑板子的Makefile文件编译(交叉编译器用的arm-himix200-linux-)