输入包含加减乖除和括号的合法表达,求值c语言
答案:2 悬赏:70 手机版
解决时间 2021-03-20 05:59
- 提问者网友:酱爆肉
- 2021-03-19 18:17
输入包含加减乖除和括号的合法表达,求值c语言
最佳答案
- 五星知识达人网友:深街酒徒
- 2021-03-19 19:34
类似于计算器,可计算小数,输出结果保存小数点后两位:
#include
#include
#include
#include
using namespace std;
const int maxn=1000+10;
char a[maxn];
char judge(char a,char b)
{
if(a=='+'||a=='-')
{
if(b=='*'||b=='/'||b=='(')
return '<';
return '>';
}
if(a=='*'||a=='/')
{
if(b=='(')
return '<';
return '>';
}
if(a=='('||a=='=')
{
if((a=='('&&b==')')||(a=='='&&b=='='))
return '=';
return '<';
}
}
double cal(double b,char c,double a)
{
if(c=='+') return a+b;
if(c=='-') return a-b;
if(c=='/') return a/b;
if(c=='*') return a*b;
}
double solve()
{
stackc;
stacknum;
c.push('=');
char s[25],t_c;
int i,j,len=strlen(a),sizes=0;
double num1,num2;
bool flag=0;
for(i=0; i
{
if((a[i]>='0'&&a[i]<='9')||a[i]=='.')
{
s[sizes++]=a[i];
s[sizes]='\0';
flag=1;
continue;
}
if(flag)
{
sizes=0;
num.push(atof(s));
flag=0;
}
t_c=judge(c.top(),a[i]);
if(t_c=='<')
{
c.push(a[i]);
}
else if(t_c=='=')
{
c.pop();
}
else if(t_c=='>')
{
num1=num.top(),num.pop();
num2=num.top(),num.pop();
num.push(cal(num1,c.top(),num2));
c.pop();
i--;
}
}
return num.top();
}
int main()
{
scanf("%s",a);
int len=strlen(a);
a[len]='=',a[len+1]='\0';
printf("%.2lf\n",solve());
return 0;
}输入:5*(1.2+3/5+0.2)-1
输出:9.00
#include
#include
#include
#include
using namespace std;
const int maxn=1000+10;
char a[maxn];
char judge(char a,char b)
{
if(a=='+'||a=='-')
{
if(b=='*'||b=='/'||b=='(')
return '<';
return '>';
}
if(a=='*'||a=='/')
{
if(b=='(')
return '<';
return '>';
}
if(a=='('||a=='=')
{
if((a=='('&&b==')')||(a=='='&&b=='='))
return '=';
return '<';
}
}
double cal(double b,char c,double a)
{
if(c=='+') return a+b;
if(c=='-') return a-b;
if(c=='/') return a/b;
if(c=='*') return a*b;
}
double solve()
{
stack
stack
c.push('=');
char s[25],t_c;
int i,j,len=strlen(a),sizes=0;
double num1,num2;
bool flag=0;
for(i=0; i
if((a[i]>='0'&&a[i]<='9')||a[i]=='.')
{
s[sizes++]=a[i];
s[sizes]='\0';
flag=1;
continue;
}
if(flag)
{
sizes=0;
num.push(atof(s));
flag=0;
}
t_c=judge(c.top(),a[i]);
if(t_c=='<')
{
c.push(a[i]);
}
else if(t_c=='=')
{
c.pop();
}
else if(t_c=='>')
{
num1=num.top(),num.pop();
num2=num.top(),num.pop();
num.push(cal(num1,c.top(),num2));
c.pop();
i--;
}
}
return num.top();
}
int main()
{
scanf("%s",a);
int len=strlen(a);
a[len]='=',a[len+1]='\0';
printf("%.2lf\n",solve());
return 0;
}输入:5*(1.2+3/5+0.2)-1
输出:9.00
全部回答
- 1楼网友:笑迎怀羞
- 2021-03-19 20:54
2+(2-2*2)/2=
这样的吧?括号嵌套就不做了
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯