C语言编写四则运算_第1页
C语言编写四则运算_第2页
C语言编写四则运算_第3页
C语言编写四则运算_第4页
C语言编写四则运算_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言编写四则运算#include<stdio.h>//计算器#include<malloc.h>#defineSTACK_SIZEﻩﻩ100ﻩ//maxsizeofthestack#defineSTACK_INCREMENTﻩ10ﻩ//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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论