- 0
- 0
- 约1.94千字
- 约 24页
- 2026-03-12 发布于广西
- 举报
第04课;学习目标;知识讲授;一、波兰表达式和逆波兰表达式;一、波兰表达式和逆波兰表达式;一、波兰表达式和逆波兰表达式;一、波兰表达式和逆波兰表达式;一、波兰表达式和逆波兰表达式;【问题描述】读入一个中缀达式,操作数和操作符都以空格分隔,以@符号结束。将这个表达式转为后缀表达式(逆波兰表达式)。
【输入】一行,若干个操作数或操作符组成的中缀表达式,以@结尾。保证输入合法。
【输出】逆波兰表达式。(操作数、操作符之间以一个空格分隔)
【样例输入】3/2@
【样例输出】32/
;二、将表达式转为逆波兰表达式;#includebits/stdc++.h
usingnamespacestd;
strings1[101];
strings2[101];
inttop1,top2;
voidM_D(){//不处理括号。
stringbuf;
while(1){
cinbuf;
if(buf==@)break;
if(buf==*||buf==/){
stringt;
cint;
s1[top1]+=(+t++buf);
}
elses1[++top1]=buf;
}
};voidA_M(){//不处理括号。
for(inti=1;i=top1;i++){
if(s1[i]==+||s1[i]==-){
s2[top2]+=(+s1[i+1]++s1[i]);
++i;
}
elses2[++top2]=s1[i];
}
}
intmain(){
M_D();//读入并处理乘除法;
A_M();
couts2[top2];
return0;
};二、将表达式转为逆波兰表达式;课堂练习;1、后缀表达式求值;1、后缀表达式求值;1、后缀表达式求值;2、[NOIP2013普及组]表达式求值;#includebits/stdc++.h
usingnamespacestd;
structnode{//连运算符一起存起来,方便计算;
inttype;
intnum;
charop;
};
nodes1[100000];
inttop1;
intmain(){
intbuf=0;
chart;
intflag=0;
while(1){
t=getchar();
if(t=0t=9){
buf=(buf*10+t-0)%10000;
flag=1;
}
;else{
if(flag){
++top;
s[top].type=2;
s[top].num=buf;
buf=0;
flag=0;
}
while(top=3s[top].type==2s[top-1].type==1s[top-2].type==2(s[top-1].op==*)){
intx,a=s[top-2].num,b=s[top].num;
if(s[top-1].op==*)x=(a*b)%10000;
s[top-2].type=2;
s[top-2].num=x;
top-=2;
}//第一次扫描处理掉乘法
if(t==+||t==*){
++top;
s[top].type=1;
s[top].op=t;
}
elsebreak;
}
};for(inti=1;i=top;i++){//处理掉加法;
s1[++top1]=s[i];
while(top1=3s1[top1].type==2s1[top1-1].type==1s1[top1-2].type==2(s1[top1-1].op==+)){
intx,a=s1[top1-2].num,b=s1[top1].num;
if(s1[top1-1].op==+)x=(a+b)%10000;
elsex=(a/b)%10000;
s1[top1-2].type=2;
s1[top1-2].num=x;
top1-=2;
}
}
couts1[top1].num;
return0;
};小结;作业;同学们加油
原创力文档

文档评论(0)