1、 printf(overflow!n);return; top = s-base;stacksize = STACK_SIZE;boolisEmpty(FStack* s)if (s-top = s-returntrue;elsereturnfalse;voidPush(FStack* s, floate)top - s-base = s-stacksize)stack is full!nrealloc %dn, STACK_INCREMENT);base = (float*)realloc(s-base, (s-stacksize + sizeof(FStack); base + s-sta
2、cksize;stacksize += STACK_INCREMENT; *(s-top) = e; (s-top)+;floatGetTop(FStack* s)stack is empty!return 0;floate = *(s-top - 1);returne;voidPop(FStack* s)top-;typedefstructCStack/stack of charchar* base;char* top;CStack;voidInit(CStack* s)base = (char*)malloc(STACK_SIZE * sizeof(CStack);boolisEmpty(
3、CStack* s)voidPush(CStack* s, inte)base = (char*)realloc(s-stacksize + sizeof(CStack);charGetTop(CStack* s)chare = *(s-voidPop(CStack* s)boolisOper(charch)if (ch = + | ch = -*/%)intPriority(charch)intp;switch(ch)case(:p = 0;break;p = 1;p = 2;returnp;floatCalculate(floatf1, floatf2, charoper)floatf3;
4、switch(oper)f3 = f1 + f2;f3 = f1 - f2;f3 = f1 * f2;f3 = (float)(int)f1 % (int)f2);if (f2 = 0)nDevided by zero!exit(1);f3 = f1 / f2;returnf3;floatStrtoFloat(char* str, int* pos)floatfRes;inti = *pos;intk;charn50;for (k = 0; stri = 0 & stri 9 | stri = .; i+, k+)nk = stri;nk = 0 *pos = i;fRes = atof(n)
5、;returnfRes;boolCheck(char* str)inti = 0;while (stri !if (stri ! stri !) (stri )i+;voidmain()charexp100;inti;floatf, f1, f2;charoper;FStackfstack;CStackcstack;Init(&fstack);cstack);The expression is:gets(exp);Check(exp)input error! exit now!for (i = 0; expi != -52; i+)isOper(expi)f = StrtoFloat(exp, &i);Push(&fstack, f);if (isOper(expi)isEmpty(&cstack) while (!cstack) & Priority(expi) = Priority(GetTop(&cstack) oper = GetTop(&Pop(&f2 = GetTop(&f1 = GetTop(&f = Calculate(f1, f2, oper); cstack, expi); elseif (expi = while (GetTop(&cstack) ! !nThe result is:%fn, GetTop(&fstack);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1