C语言表达式计算器
为了方便了解流程,在程序中把计算过程也输出了.而且栈操作的实现部分也是自己实现的.bLhn-e.O.rv程序用两个栈,optr寄存运算符,opnd寄存操作数和运算结果.输入的表达式以等号结束,例如:2*(1+2)=
/**************表达式计算器************/ OwZu X\'[
#include <stdio.h>
#include <stdlib.h>Y"j2K6f N.Ka
#include <string.h>(H,W1e/p5AGN `2r
#include <conio.h>iN N jYt'mUU!QE
#include <malloc.h>
#define STACK_SIZE 100
#define APPEND_SIZE 10VD\#A(H
struct SNode{1w*B k.aUL&U_
float data; /*存放操作数或者计算结果*/3Rw^|kyx$Cw
char ch; /*存放运算符*/
};
struct Stack{
SNode *top;
SNode *base;Q`(o[6IKf
int size;q5r1M`8jD3Y
};
)F/QE*d#e6v
/*栈操作函数*/
int InitStack(Stack &S); /*创建栈*/"f"I2N:tp+V(k(Q
int DestroyStack(Stack &S); /*销毁栈*/8B6O#] xI W_Lh
int ClearStack(Stack &S); /*清空栈*/v*x5Sa3Jx6X
int GetTop(Stack S, SNode &e); /*取出栈顶结点并返回节点值*/
int Push(Stack &S,SNode e); /*将结点e压入栈*/U Cv~zw3H
int Pop(Stack &S,SNode &e); /*删除栈顶结点并返回其节点值*/
/*表达式计算器相关函数*/{$_B,o#jh4m AR/z8[
char get_precede(char s,char c); /*判断运算符s和c的优先级*/@4HMdf%f~9h%{-KX
int isOpr(char c); /*判断输入的字符是不是运算符,是则返回0,否返回1*/1OehgMl ~
float operate(float x, char opr, float y); /*计算x和y经过运算符opr计算后的结果*/ fb\]6T
float compute(); /*表达式结算器主函数*/
char *killzero(float result); /*去掉结果后面的0*/