C语言编写四则运算.doc

上传人:scccc 文档编号:11536398 上传时间:2021-08-14 格式:DOC 页数:8 大小:55KB
返回 下载 相关 举报
C语言编写四则运算.doc_第1页
第1页 / 共8页
C语言编写四则运算.doc_第2页
第2页 / 共8页
C语言编写四则运算.doc_第3页
第3页 / 共8页
C语言编写四则运算.doc_第4页
第4页 / 共8页
C语言编写四则运算.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《C语言编写四则运算.doc》由会员分享,可在线阅读,更多相关《C语言编写四则运算.doc(8页珍藏版)》请在三一文库上搜索。

1、C语言编写四则运算#include /计算器#include #define STACK_SIZE100/max size of the stack#define STACK_INCREMENT10/realloc sizetypedef struct FStack /stack of intfloat* base;float* top;int stacksize;FStack;void Init(FStack* s)s-base = (float*)malloc(STACK_SIZE * sizeof(FStack);if (!s-base)printf(overflow!n);return

2、;s-top = s-base;s-stacksize = STACK_SIZE;bool isEmpty(FStack* s)if (s-top = s-base)return true;elsereturn false;void Push(FStack* s, float e)if (s-top - s-base = s-stacksize)printf(stack is full!nrealloc %dn, STACK_INCREMENT);s-base = (float*)realloc(s-base, (s-stacksize + sizeof(FStack);if (!s-base

3、)printf(overflow!n);return;s-top = s-base + s-stacksize;s-stacksize += STACK_INCREMENT;*(s-top) = e;(s-top)+;float GetTop(FStack* s)if (s-top = s-base)printf(stack is empty!n);return 0;float e = *(s-top - 1);return e;void Pop(FStack* s)if (s-top = s-base)printf(stack is empty!n);return;s-top-;typede

4、f struct CStack /stack of charchar* base;char* top;int stacksize;CStack;void Init(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;bool isEmpty(CStack* s)if (s-top = s-base)return true;elsereturn false;void Pus

5、h(CStack* s, int e)if (s-top - s-base = s-stacksize)printf(stack is full!nrealloc %dn, 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)+;char GetTop(CS

6、tack* s)if (s-top = s-base)printf(stack is empty!n);return 0;char e = *(s-top - 1);return e;void Pop(CStack* s)if (s-top = s-base)printf(stack is empty!n);return;s-top-;bool isOper(char ch)if (ch = + | ch = - | ch = * | ch = / | ch = %)return true;elsereturn false;int Priority(char ch)int p;switch(c

7、h)case (:p = 0;break;case +:case -:p = 1;break;case *:case /:case %:p = 2;break;return p;float Calculate(float f1, float f2, char oper)float f3;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)prin

8、tf(nDevided by zero!);exit(1);elsef3 = f1 / f2;break;return f3;float StrtoFloat(char* str, int* pos)float fRes;int i = *pos;int k;char n50;for (k = 0; stri = 0 & stri = 9 | stri = .; i+, k+)nk = stri;nk = 0;*pos = i;fRes = atof(n);return fRes;bool Check(char* str)int i = 0;while (stri != 0)if (stri

9、!= + & stri != - & stri != * & stri != / & stri != % & stri != . & stri != ( & stri != ) & (stri 9)return false;i+;return true;void main()char exp100;int i;float f, f1, f2;char oper;FStack fstack;CStack cstack;Init(&fstack);Init(&cstack);printf(The expression is:);gets(exp);if (!Check(exp)printf(inp

10、ut error! exit now!n);exit(1);for (i = 0; expi != 0 & expi != -52; i+)if (!isOper(expi)f = StrtoFloat(exp, &i);Push(&fstack, f);if (isOper(expi)if (!isEmpty(&cstack)while (!isEmpty(&cstack) & Priority(expi) = Priority(GetTop(&cstack)oper = GetTop(&cstack);Pop(&cstack);f2 = GetTop(&fstack);Pop(&fstac

11、k);f1 = GetTop(&fstack);Pop(&fstack);f = Calculate(f1, f2, oper);Push(&fstack, f);Push(&cstack, expi);elsePush(&cstack, expi);else if (expi = ()Push(&cstack, expi);else if (expi = )while (GetTop(&cstack) != ( & !isEmpty(&cstack)oper = GetTop(&cstack);Pop(&cstack);f2 = GetTop(&fstack);Pop(&fstack);f1

12、 = 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(nThe result is:%fn, GetTop(&fstack);Pop(&fstack);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1