用栈实现表达式的求值

建立试题库文件,随机产生n个题目;题目涉及加减乘除,带括弧的混合运算;随时可以退出;利用栈求表达式的值,可供学生作业,并能给出分数要求:建立试题库文件,随机产生n个题目;... 建立试题库文件,随机产生n个题目;题目涉及加减乘除,带括弧的混合运算;随时可以退出;
利用栈求表达式的值,可供学生作业,并能给出分数
要求:建立试题库文件,随机产生n个题目;题目涉及加减乘除,带括弧的混合运算;随时可以退出;保留历史分数,能回顾历史,给出与历史分数比较后的评价
谢谢高手们的关注,请路过的高手帮帮忙看看。谢谢大家了!!!!
展开
 我来答
核动力机器人
2008-02-26 · 超过40用户采纳过TA的回答
知道小有建树答主
回答量:197
采纳率:0%
帮助的人:95万
展开全部
#include <iostream>
#include <cstdlib>
#include <cctype>

int addsubt();
int multdiv();
int number();
void error();

static char expr[81];
static int pos;

int main()
{
int ans;

do
{
pos=0;
std::cout<<"enter expression (0 to quit):"<<std::endl;
std::cin>>expr;

ans=addsubt();
if(expr[pos]!='\0')
error();
if(ans!=0)
std::cout<<ans<<std::endl;
}
while(ans!=0);

return 0;
}

int addsubt()
{
int rtn=multdiv();
while(expr[pos]=='+'||expr[pos]=='-')
{
int op=expr[pos++];
int opr2=multdiv();
if(op=='+')
rtn+=opr2;
else rtn-=opr2;
}
return rtn;
}

int multdiv()
{
int rtn=number();
while(expr[pos]=='*'||expr[pos]=='/')
{
int op=expr[pos++];
int opr2=number();

if(op=='*')
rtn*=opr2;
else rtn/=opr2;
}
return rtn;
}

int number()
{
int rtn;
if(expr[pos]=='(')
{
pos++;
rtn=addsubt();
if(expr[pos++]!=')')
error();
return rtn;
}

if(!isdigit(expr[pos]))
error();
rtn=atol(expr+pos);
while(isdigit(expr[pos]))
pos++;
return rtn;
}

void error()
{
std::cout<<'\r';
while(pos--)
std::cout<<' ';
std::cout<<"^ syntax error"<<std::endl<<'\a';
exit(-1);
}
自己参考吧

http://hi.baidu.com/ccsdu%5Fxx/blog/item/e53930f75b103826720eec06.html
海洋——2008
2008-02-26 · 超过29用户采纳过TA的回答
知道答主
回答量:121
采纳率:0%
帮助的人:0
展开全部
自己想啊。这么简单的问题还跑到这里来问???
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式