用栈实现表达式的求值
建立试题库文件,随机产生n个题目;题目涉及加减乘除,带括弧的混合运算;随时可以退出;利用栈求表达式的值,可供学生作业,并能给出分数要求:建立试题库文件,随机产生n个题目;...
建立试题库文件,随机产生n个题目;题目涉及加减乘除,带括弧的混合运算;随时可以退出;
利用栈求表达式的值,可供学生作业,并能给出分数
要求:建立试题库文件,随机产生n个题目;题目涉及加减乘除,带括弧的混合运算;随时可以退出;保留历史分数,能回顾历史,给出与历史分数比较后的评价
谢谢高手们的关注,请路过的高手帮帮忙看看。谢谢大家了!!!! 展开
利用栈求表达式的值,可供学生作业,并能给出分数
要求:建立试题库文件,随机产生n个题目;题目涉及加减乘除,带括弧的混合运算;随时可以退出;保留历史分数,能回顾历史,给出与历史分数比较后的评价
谢谢高手们的关注,请路过的高手帮帮忙看看。谢谢大家了!!!! 展开
展开全部
#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
#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
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询