永发信息网

用C++语言编写计算器(急!)

答案:1  悬赏:0  手机版
解决时间 2021-05-10 07:11
  • 提问者网友:鐵馬踏冰河
  • 2021-05-09 06:39

C++

要求:

1. 不要把所有的语句都写在main()里面。

2. 用最简单的方式来进行编写。

3. 不可以用负数 和 字母。

4. 只允许用 加号 减号 乘号 除号 括号。

What do you want to calculate?

输入:

4 + 5 * 2 – 6 =

输出:

The output should be: 4+5*2-6=8

显示:

4 + 5*2 -6 =

4+10 -6=

14 -6 =

8

最佳答案
  • 五星知识达人网友:刀戟声无边
  • 2021-05-09 06:51

可以参考下别人的。。。写得还可以。。


#include <iostream>
#include <stack>
using namespace std;

void mem();
bool judge(char,char);
void duizhan(stack<float>&,stack<char>&);
float xiaoshu(float,float);
void main()
{
mem();
}

void mem()
{
int used,pr;
float argt;
char c;
stack<float> num;
stack<char> oper;
argt=0;pr=0;used=0;
cout<<endl<<"请输入待求表达式:"<<endl;
while(cin>>c, !cin.eof())

{
if (isdigit(c))
{
used=1;
argt=argt*10+(c-'0');
continue;
} //将输入的数字类字符转换成数字;
if (c=='+'||c=='-'||c=='*'||c=='/'||c=='.')
{
if(used)
{
num.push(argt);
argt=0;
used=0;
} //将转化好的数字压入数字栈;
if (oper.empty()||oper.top()=='(') {oper.push(c);continue;}
//向操作符栈里压入第一个操作符;解决括号问题;
while(!judge(c,oper.top()))
{
duizhan(num,oper);
if (oper.empty()||oper.top()=='(') break;
} //根据运算符号优先级,调整运算顺序,并处理优先运算部分;
oper.push(c);
continue;
}
if (c=='(')
{
pr++;oper.push(c);continue; //括号入栈,作为括号内运算的标志;
}
if (c==')')
{
pr--; //括号结束,整理括号内的运算结果;
if (used) {num.push(argt);argt=0;used=0;}
while(!oper.empty())
{
if (oper.top()=='(') break;
duizhan(num,oper);
}
oper.pop();
continue;
}
if (c=='=') //遇到‘=’号,输出结果;
{
if (pr) {cout<<"括号数目不匹配,请检查并重新输入!"<<endl;return;}
if (used) num.push(argt);
while(!oper.empty()) duizhan(num,oper);
cout<<"表达式的值为: "<<num.top()<<endl;
return;
}
else {cout<<"表达式输入错误,请重新输入!"<<endl;return;}
}

}

bool judge(char s,char t)
{
if ((s=='*'||s=='/')&&(t=='+'||t=='-')) return true;
if (s=='.') return true;
return false;
}

void duizhan(stack<float>& num,stack<char>& oper)
{
float a,b,r;
b=num.top();num.pop();
a=num.top();num.pop();
switch( oper.top() )
{
case ('+'):r= a+b;break;
case ('-'):r= a-b;break;
case ('*'):r= a*b;break;
case ('/'):r= a/b;break;
case ('.'):r=xiaoshu(a,b);
};
num.push(r);
oper.pop();
}

float xiaoshu(float m, float n) //处理小数
{
while (n>=1)
n/=10;
n+=m;
return n;
}

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯