永发信息网

求c++编写一个四则运算程序 急~!!

答案:2  悬赏:0  手机版
解决时间 2021-02-21 02:14
急 急 可以发到我邮箱 可以发我邮箱yyzyinyizhe@126.com谢了~

要用堆栈 谢谢了 急
最佳答案
输入的表达式后面不需要加'='
比如你求"1+2=?",那么后输入
1+2
就可以了.
//使用栈来实现

#include
#include
using namespace std;
int precede(char op1,char op2)//> 1,= 0,<-1
{
switch(op1)
{
case '+':
if(op2=='+' || op2=='-' || op2==')' || op2=='#')
return 1;
return -1;
case '-':
if(op2=='+' || op2=='-' || op2==')' || op2=='#')
return 1;
return -1;
case '*':
if(op2=='(')
return -1;
return 1;
case '/':
if(op2=='(')
return -1;
return 1;
case '(':
if(op2==')')
return 0;
return -1;
case ')':
return 1;
case '#':
return -1;
default:
break;
}
return 0;
}
int compute(int num1,char op,int num2)
{
int num=0;
switch(op)
{
case '+':
num=num1+num2;
break;
case '-':
num=num1-num2;
break;
case '*':
num=num1*num2;
break;
case '/':
num=num1/num2;
break;
}
return num;
}
int calculator(char str[205])
{
int i,pre,num,num1,num2;
char op1;
bool flag;
stack charsta;
stack intsta;
charsta.push('#');
i=strlen(str);
str[i]='#';
str[i+1]='\0';
i=0,num=0;
flag=false;
while(str[i])
{
if(str[i]>='0' && str[i]<='9')
{
flag=true;
num=num*10+str[i]-'0';
i++;
}
else
{
if(flag)
{
flag=false;
intsta.push(num);
num=0;
}
op1=charsta.top();
if(op1=='#' && str[i]=='#')
break;
pre=precede(op1,str[i]);
switch(pre)
{
case 0:
charsta.pop();
i++;
break;
case 1:
charsta.pop();
num2=intsta.top();
intsta.pop();
num1=intsta.top();
intsta.pop();
intsta.push(compute(num1,op1,num2));
break;
case -1:
charsta.push(str[i]);
i++;
break;
}
}
}
num=intsta.top();
intsta.pop();
return num;
}
int main()
{
char str[205];
while(cin>>str,strcmp(str,"#"))//#退出
printf("%d\n",calculator(str));
return 0;
}
全部回答
#include"stdafx.h" #include #include #include char token; float exp(void); float term(void); float factor(void); void error(void) { fprintf(stderr,"error\n"); exit(1); } void match(char expectedtoken) { if(token==expectedtoken)token=getchar(); else error(); } calculate() { float result; token = getchar(); result = exp(); if(token=='\n') printf("result = %.2f\n",result); else error(); } main() { do { calculate(); }while(1); } float exp(void) { float temp = term(); while((token=='+')||(token=='-')) switch(token) { case '+': match('+'); temp+=term(); break; case '-': match('-'); temp-=term(); break; } return temp; } float term(void) { float temp = factor(); while ((token=='*')||(token=='/')) switch(token) { case '*': match('*'); temp*=factor(); break; case '/': match('/'); temp/=factor(); break; } return temp; } float factor(void) { float temp; if(token=='('){ match('('); temp = exp(); match(')'); } else if(isdigit(token)){ ungetc(token,stdin); scanf("%f",&temp); token = getchar(); } else error(); return temp; }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
大米1元一斤1300斤大米多少钱
〖对联】出句1:诗眼一开皆是景[蝶儿]
英萨依买里地址有知道的么?有点事想过去
【沙丁鱼阅读答案】鲶鱼救活沙丁鱼阅读答案1.
什么是混合硬盘
顶骚地址有知道的么?有点事想过去
怎样快速的看懂厦门地图
oxygen 韩文读法
请问大家"误把冯京当马凉"的另一句是什么?
求一组原创文艺风格的贴吧头衔,在个人贴吧使
大家帮忙看下面料100%涤纶,填充物白鸭绒,充绒
漳州市建联汽车贸易有限公司在哪里啊,我有事
华为p8新机怎么换字体,刚买来的,主题的字体
金马铁艺(天堂中心卫生院东北)地址在哪,我要
西班牙语中 No importa是什么意思?RT
推荐资讯
魔羯座男人在事业上遇到困难的时候怎么安慰他
怎样查看前十天的监控
阜阳有哪家快递公司向外承包加盟的
红米note3照片设为私密后怎么弄给它回去,就
吃什么水果对皮肤好又美白 水果如何帮助自己
欢喜岭大酒店地址有知道的么?有点事想过去
YQ奶茶铺地址有知道的么?有点事想过去
表示“惊讶”的英语单词有哪些
典当行名字大全
海安长润商贸有限公司在哪里啊,我有事要去这
不到一年的6s开不了机显苹果后黑屏,刷机刷到
钱乐畅K南湖旗舰店地址在哪,我要去那里办事
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?