收藏 分销(赏)

C语言编写四则运算.doc

上传人:二*** 文档编号:4484798 上传时间:2024-09-24 格式:DOC 页数:15 大小:45KB 下载积分:5 金币
下载 相关 举报
C语言编写四则运算.doc_第1页
第1页 / 共15页
本文档共15页,全文阅读请下载到手机保存,查看更方便
资源描述
. . C语言编写四那么运算 #include<stdio.h>//计算器 #include<malloc.h> #defineSTACK_SIZE 100 //max size of the stack #defineSTACK_INCREMENT 10 //realloc size typedefstructFStack//stack of int { 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("stack is full!\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("stack is empty!\n"); return 0; } floate = *(s->top - 1); returne; } voidPop(FStack* s) { if (s->top == s->base) { printf("stack is empty!\n"); return; } s->top--; } typedefstructCStack//stack of char { 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("stack is full!\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("stack is empty!\n"); return 0; } chare = *(s->top - 1); returne; } voidPop(CStack* s) { if (s->top == s->base) { printf("stack is empty!\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("\nDevided by zero!"); 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("The expression is:"); gets(exp); if (!Check(exp)) { printf("input error! exit now!\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("\nThe result is:%f\n", GetTop(&fstack)); Pop(&fstack); } . .word..
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 初中其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服