OneHPUkihtonercoder。。#include"stdio.h"#include"stdlib.h"#include"string.h"#include"math.h"#definetrue1#definefalse0#defineOPSETSIZE8typedefintStatus;unsignedcharPrior[8][8]={//运算符优先级表//'+''-''*''/''('')''#''^'/*'+'*/'>','>','','','>','>','','>','','>','>','>','','>','',/*'#'*/''};typedefstructStackChar{charc;structStackChar*next;}SC;//StackChar类型的结点SCtypedefstructStackFloat{floatf;structStackFloat*next;}SF;//StackFloat类型的结点SFSC*Push(SC*s,charc)//SC类型的指针Push,返回p{SC*p=(SC*)malloc(sizeof(SC));p->c=c;p->next=s;returnp;}SF*Push(SF*s,floatf)//SF类型的指针Push,返回p{SF*p=(SF*)malloc(sizeof(SF));p->f=f;p->next=s;returnp;}SC*Pop(SC*s)//SC类型的指针Pop{SC*q=s;s=s->next;free(q);returns;}SF*Pop(SF*s)//SF类型的指针Pop{SF*q=s;s=s->next;free(q);returns;}floatOperate(floata,unsignedchartheta,floatb)//计算函数Operate{switch(theta){case'+':returna+b;case'-':returna-b;case'*':returna*b;case'/':returna/b;case'^':returnpow(a,b);default:return0;}}charOPSET[OPSETSIZE]={'+','-','*','/','(',')','#','^'};StatusIn(charTest,char*TestOp){intFind=false;for(inti=0;ic,*c)){case''://退栈并将运算结果入栈theta=OPTR->c;OPTR=Pop(OPTR);b=OPND->f;OPND=Pop(OPND);a=OPND->f;OPND=Pop(OPND);OPND=Push(OPND,Operate(a,theta,b));break;}//switch}}//whilereturnOPND->f;}//EvaluateExpressionintmain(void){chars[128];puts("请输入表达式:");gets(s);puts("该表达式的值为:");printf("%s\b=%g\n",s,EvaluateExpression(s));system("pause");return0;} |