c语言无优先级四则运算计算器,帮朋友改的四则运算计算器

ca56232b3bbedf9a539d07f37fffb99a.gif

3144d8b7615c79d9f638db40d5689d26.gif

a218af6549b45ee526caf607ebff1358.gif

0f8df0e29816ae721419de940fb833d1.gif

帮朋友改的四则运算计算器

只支持正整数。。可以这样测试9*8*8-(9*9-12)*7*7-8*9-8#

好像是对的。。不知道有没有错。。大家看看

#include

#include

#include

#define Stack_Size 50

typedef struct

{

char elem[Stack_Size];

int top;

}OpStack;

typedef struct

{

int elem[Stack_Size];

int top;

}NumStack;

void Push(OpStack *s,char x);

void Pop(OpStack *s,char *x);

void Push(NumStack *s,int x);

void Pop(NumStack *s,int *x);

int Execute(int a,char c,int b);

int ExpEvaluation(NumStack *OVS,OpStack *OPTR);

void GetNumber(char p);

int Cint(char mychar);

int num=0;

void main()

{

int result;

OpStack OPTR;

NumStack OVS;

OVS.top=-1;OPTR.top=-1;

result=ExpEvaluation(&OVS,&OPTR);

printf("The result is %d\n",result);

}

void Push(OpStack *s,char x)

{

s->top++;

s->elem[s->top]=x;

}

void Pop(OpStack *s,char *x)

{

*x=s->elem[s->top];

s->top--;

}

void Push(NumStack *s,int x)

{

s->top++;

s->elem[s->top]=x;

}

void Pop(NumStack *s,int *x)

{

*x=s->elem[s->top];

s->top--;

}

int Execute(int a,char c,int b)

{

switch(c)

{

case '+':return a+b;break;

case '-':return a-b;break;

case '*':;return a*b;break;

case '/':return a/b;break;

}

}

void GetNumber(char p)

{

num=num*10+Cint(p);

}

int Cint(char mychar)

{

return (mychar-48);

}

//栈运算符与读入运算符优先级的比较

char Compare(char x,char y)

{

char priority='

switch(x)

{

case '+':

case '-':if(y=='#'||y=='+'||y=='-'||y==')')priority='>';break;

case '*':

case '/': priority='>';if(y=='(' )priority='

case '(':if(y==')')priority='=';break;

case '#':if(y=='#') priority='=';break;

default:priority='E';

}

return priority;

}

int ExpEvaluation(NumStack *OVS,OpStack *OPTR)

{

int v,flag=0,f1=1,f2=1;

char ch,ch1,c;

int a,b,flag1=1;

Push(OPTR,'#');

printf("\n\nputin a string(stop with #):");

while(ch!='#'||OPTR->elem[OPTR->top]!='#')

{   if(f1&&f2)

ch=getchar();

if(isdigit(ch))

{

GetNumber(ch);

}

else

{

if((ch>='0'&&ch<='9'||ch1>='0'&&ch1<='9')&&!flag)

{

Push(OVS,num);

num=0;

}

switch(Compare(OPTR->elem[OPTR->top],ch))

{

case '

Push(OPTR,ch);

flag=0;

break;

case '>':

Pop(OPTR,&c);

Pop(OVS,&b);

Pop(OVS,&a);

v=Execute(a,c,b);

if(OPTR->elem[OPTR->top]=='-')

{

v=-1*v;

OPTR->elem[OPTR->top]='+';

}

Push(OVS,v);

if(ch!='#'&&ch!=')')

{

Push(OPTR,ch);

flag=0;

}

else

{

f1=0;

flag=1;

}

//printf("%d %c %d  %d\n",a,c,b,v);

break;

case '=':

Pop(OPTR,&c);

if(c=='('&&ch==')')

{

f1=1;

flag=1;

}

break;

default:printf("Wrong Express!");exit(0);

}

}

ch1=ch;

}

return(v);

}

搜索更多相关主题的帖子:

计算器 运算 朋友

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值