C语言编写四则运算#includestdio.h//计算器#includemalloc.h#defineSTACK_SIZE100//maxsizeofthestack#defineSTACK_INCREMENT10//reallocsizetypedefstructFStack//stackofint{float*base;float*top;intstacksize;}FStack;voidInit(FStack*s){s-base=(float*)malloc(STACK_SIZE*sizeof(FStack));if(!s-base){printf(overflow!\n);return;}s-top=s-base;s-stacksize=STACK_SIZE;}boolisEmpty(FStack*s){if(s-top==s-base){returntrue;}else{returnfalse;}}voidPush(FStack*s,floate){if(s-top-s-base=s-stacksize){printf(stackisfull!\nrealloc%d\n,STACK_INCREMENT);s-base=(float*)realloc(s-base,(s-stacksize+sizeof(FStack)));if(!s-base){printf(overflow!\n);return;}s-top=s-base+s-stacksize;s-stacksize+=STACK_INCREMENT;}*(s-top)=e;(s-top)++;}floatGetTop(FStack*s){if(s-top==s-base){printf(stackisempty!\n);return0;}floate=*(s-top-1);returne;}voidPop(FStack*s){if(s-top==s-base){printf(stackisempty!\n);return;}s-top--;}typedefstructCStack//stackofchar{char*base;char*top;intstacksize;}CStack;voidInit(CStack*s){s-base=(char*)malloc(STACK_SIZE*sizeof(CStack));if(!s-base){printf(overflow!\n);return;}s-top=s-base;s-stacksize=STACK_SIZE;}boolisEmpty(CStack*s){if(s-top==s-base){returntrue;}else{returnfalse;}}voidPush(CStack*s,inte){if(s-top-s-base=s-stacksize){printf(stackisfull!\nrealloc%d\n,STACK_INCREMENT);s-base=(char*)realloc(s-base,(s-stacksize+sizeof(CStack)));if(!s-base){printf(overflow!\n);return;}s-top=s-base+s-stacksize;s-stacksize+=STACK_INCREMENT;}*(s-top)=e;(s-top)++;}charGetTop(CStack*s){if(s-top==s-base){printf(stackisempty!\n);return0;}chare=*(s-top-1);returne;}voidPop(CStack*s){if(s-top==s-base){printf(stackisempty!\n);return;}s-top--;}boolisOper(charch){if(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='%'){returntrue;}else{returnfalse;}}intPriority(charch){intp;switch(ch){case'(':p=0;break;case'+':case'-':p=1;break;case'*':case'/':case'%':p=2;break;}returnp;}floatCalculate(floatf1,floatf2,charoper){floatf3;switch(oper){case'+':f3=f1+f2;break;case'-':f3=f1-f2;break;case'*':f3=f1*f2;break;case'%':f3=(float)((int)f1%(int)f2);break;case'/':if(f2==0){printf(\nDevidedbyzero!);exit(1);}else{f3=f1/f2;}break;}returnf3;}floatStrtoFloat(char*str,int*pos){floatfRes;inti=*pos;intk;charn[50];for(k=0;str[i]='0'&&str[i]='9'||str[i]=='.';i++,k++){n[k]=str[i];}n[k]='\0';*pos=i;fRes=atof(n);returnfRes;}boolCheck(char*str){inti=0;while(str[i]!='\0'){if(str[i]!='+'&&str[i]!='-'&&str[i]!='*'&&str[i]!='/'&&str[i]!='%'&&str[i]!='.'&&str[i]!='('&&str[i]!=')'&&(str[i]'0'||str[i]'9')){returnfalse;}i++;}returntrue;}voidmain(){charexp[100];inti;floatf,f1,f2;charoper;FStackfstack;CStackcstack;Init(&fstack);Init(&cstack);printf(Theexpressionis:);gets(exp);if(!Check(exp)){printf(inputerror!exitnow!\n);exit(1);}for(i=0;exp[i]!='\0'&&exp[i]!=-52;i++){if(!isOper(exp[i])){f=StrtoFloat(exp,&i);Push(&fstack,f);}if(isOper(exp[i])){if(!isEmpty(&cstack)){while(!isEmpty(&cstack)&&Priority(exp[i])=Priority(GetTop(&cstack))){oper=GetTop(&cstack);Pop(&cstack);f2=GetTop(&fstack);Pop(&fstack);f1=GetTop(&fstack);Pop(&fstack);f=Calculate(f1,f2,oper);Push(&fstack,f);}Push(&cstack,exp[i]);}else{Push(&cstack,exp[i]);}}elseif(exp[i]=='('){Push(&cstack,exp[i]);}elseif(exp[i]==')'){while(GetTop(&cstack)!='('&&!isEmpty(&cstack)){oper=GetTop(&cstack);Pop(&cstack);f2=GetTop(&fstack);Pop(&fstack);f1=GetTop(&fstack);Pop(&fstack);f=Calculate(f1,f2,oper);Push(&fstack,f);}Pop(&cstack);}}while(!isEmpty(&cstack)){oper=GetTop(&cstack);Pop(&cstack);f2=GetTop(&fstack);Pop(&fstack);f1=GetTop(&fstack);Pop(&fstack);f=Calculate(f1,f2,oper);Push(&fstack,f);}printf(\nTheresultis:%f\n,GetTop(&fstack));Pop(&fstack);}
本文标题:C语言编写四则运算
链接地址:https://www.777doc.com/doc-7027821 .html