四则运算c语言带括号,C语言简单计算器,实现四则运算,可带括号

用链表实现四则运算

/*

1、只能进行整数运算,

2、可以有括号的嵌套,如(a+b*(c+d)-e)-f,

但对(a+((b+c)+d*e)-f)形如的算式无法计算

*/

#include

#include

#include

#include

using namespace std;

struct Element

{

double data;

char sign;

char bracket_left;

char bracket_right;

Element *next;

};

int check(char *s)

{

int count_bracket=0;

int i=0;

while(i

{

if(s[i]=='(') count_bracket++;

else if(s[i]==')') count_bracket--;

if(count_bracket<0)

return 0;

if(!(s[i]>='0'&&s[i]<='9'||s[i]==')'||s[i]=='('||s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/'))

return 0;

i++;

}

if(count_bracket) return 0;

return 1;

}

void create_expression(char *s,Element *head)

{

Element *p=head;

p->next=(Element *)malloc(sizeof(Element));

p=p->next,p->next=NULL;

p->bracket_left=p->bracket_right='\0';

p->sign='\0',p->data=0;

int x=0;

while(x

{

if(s[x]>='0'&&s[x]<='9')

{

while(s[x]>='0'&&s[x]<='9'&&s[x]!='\0')

p->data*=10,p->data+=s[x++]-'0';

x--;

}

else if(s[x]=='+'||s[x]=='-'||s[x]=='*'||s[x]=='/')

{

p->next=(Element *)malloc(sizeof(Element));

if(!p->next)

{

cout<

exit(0);

}

p=p->next,p->next=NULL;

p->bracket_left=p->bracket_right='\0';

p->sign=s[x],p->data=0;

}

else if(s[x]==')')

{

p->bracket_right=')';

p->bracket_left='\0';

}

else if(s[x]=='(')

{

p->bracket_left='(';

p->bracket_right='\0';

}

x++;

}

p=head->next;

while(p->next) p=p->next;

p->next=(Element *)malloc(sizeof(Element));

p=p->next;

p->data=0,p->sign='+',p->next=NULL;

p->bracket_left=p->bracket_right='\0';

}

/*double chang_int(char *s)

{

double sum=0;

int x=0,mark=0;

while(x

{

if(s[x]=='.')

{

mark=1;

break;

}

sum*=10,sum+=s[x]-'0';

x++;

}

if(mark)

{

double m=0;

for(int i=strlen(s)-1;i>x;i--)

m+=s[i]-'0',m/=10;

sum+=m;

}

return sum;

}*/

double calculate(Element *start,Element *end)

{

Element *p=start;

while(p!=end)

{

if(p->next->sign=='*')

{

p->data*=p->next->data;

p->next=p->next->next;

p=start;continue;

}

else if(p->next->sign=='/')

{

p->data/=p->next->data*1.0;

p->next=p->next->next;

p=start;continu

e;

}

p=p->next;

}

double sum=start->data;

start=start->next;

while(start!=end)

{

if(start->sign=='+') sum+=start->data;

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值