急 急 可以发到我邮箱 可以发我邮箱yyzyinyizhe@126.com谢了~
要用堆栈 谢谢了 急
求c++编写一个四则运算程序 急~!!
答案:2 悬赏:0 手机版
解决时间 2021-02-21 02:14
- 提问者网友:謫仙
- 2021-02-20 18:10
最佳答案
- 五星知识达人网友:一秋
- 2021-02-20 18:19
输入的表达式后面不需要加'='
比如你求"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;
}
比如你求"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
stack
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;
}
全部回答
- 1楼网友:梦中风几里
- 2021-02-20 18:52
#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; }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯