c语言编写四则运算.docx

上传人:b****5 文档编号:4515873 上传时间:2022-12-01 格式:DOCX 页数:10 大小:15.88KB
下载 相关 举报
c语言编写四则运算.docx_第1页
第1页 / 共10页
c语言编写四则运算.docx_第2页
第2页 / 共10页
c语言编写四则运算.docx_第3页
第3页 / 共10页
c语言编写四则运算.docx_第4页
第4页 / 共10页
c语言编写四则运算.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

c语言编写四则运算.docx

《c语言编写四则运算.docx》由会员分享,可在线阅读,更多相关《c语言编写四则运算.docx(10页珍藏版)》请在冰豆网上搜索。

c语言编写四则运算.docx

c语言编写四则运算

C语言编写四那么运算

#include//计算器

#include

#defineSTACK_SIZE100//maxsizeofthestack

#defineSTACK_INCREMENT10//reallocsize

typedefstructFStack//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);

}

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

当前位置:首页 > 高中教育 > 高中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1