利用栈求表达式的值,可供小学生作业,并能给出分数.doc

上传人:飞*** 文档编号:30652384 上传时间:2018-01-31 格式:DOC 页数:21 大小:123KB
返回 下载 相关 举报
利用栈求表达式的值,可供小学生作业,并能给出分数.doc_第1页
第1页 / 共21页
利用栈求表达式的值,可供小学生作业,并能给出分数.doc_第2页
第2页 / 共21页
利用栈求表达式的值,可供小学生作业,并能给出分数.doc_第3页
第3页 / 共21页
利用栈求表达式的值,可供小学生作业,并能给出分数.doc_第4页
第4页 / 共21页
利用栈求表达式的值,可供小学生作业,并能给出分数.doc_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《利用栈求表达式的值,可供小学生作业,并能给出分数.doc》由会员分享,可在线阅读,更多相关《利用栈求表达式的值,可供小学生作业,并能给出分数.doc(21页珍藏版)》请在金锄头文库上搜索。

1、/1.h#include#include#include#include#includeusing namespace std;/templatestruct Ti /定义一个结构体,用于存储题习题库中的每一道台?题目char chh30;templatestruct Stack /定义栈,其中数据元素为字符型 T data50;int top;templatestruct Stack2 /定义栈,其中数据元素为整型 float data50; int top;templateclass linkpublic:void Push(Stack char Pop(Stack void Push2(

2、Stack2 float Pop2(Stack2 void pingjia(int m) ;int In(char c);int change(char x);int Precede(int a,int b);float Operate(float a,char c,float b);void toEmpty(char s,int n);void isStay(char s1,int n1,char s2,int n2);int isInt(char s,int n);void xitiku(char a,int n);float Expression();Stack setStack();S

3、tack2 setStack2();/1.cpp#include#include1.h#include#include#include#includeusing namespace std;templatevoid link:Push(Stack &S,char x)if(S.top=49)coutchar link: Pop(Stack &S,char x)if(S.top=-1)coutvoid link:Push2(Stack2 &S,float x)if(S.top=49)coutfloat link:Pop2(Stack2 &S,float x)if(S.top=-1)coutvoi

4、d link:pingjia(int m)switch(m/10)case 0:case 1:case 2:case 3:case 4:case 5:coutint link:In(char c) /判断字符是否为运算符?int m=0,i;char OP7=+,-,*,/,(,),#;for(i=0;iint link:change(char x) /将运算符转换成为数字int a;switch(x)case +: a=0;break;case -: a=1;break;case *: a=2;break;case /: a=3;break;case (: a=4;break;case ):

5、 a=5;break;case #: a=6;break;return a;templateint link: Precede(int a,int b) /比括较运算符之间的优先级int A;int token77=1,1,-1,-1,-1,1,1,1,1,-1,-1,-1,1,1,1,1,1,1,-1,1,1,1,1,1,1,-1,1,1,-1,-1,-1,-1,-1,0,2,1,1,1,1,2,1,1,-1,-1,-1,-1,-1,2,0;switch(tokenab)case -1:A=-1;break;case 0:A= 0;break;case 1:A= 1;break;return

6、 A;templatefloat link:Operate(float a,char c,float b) /对两个数进行四则运算float s;switch(c)case+:s=a+b;break;case-:s=a-b;break;case*:s=a*b;break;case/:s=a/b;break;return s;templatevoid link:toEmpty(char s,int n) /把一个数组置空int i;for(i=0;ivoid link:isStay(char s1,int n1,char s2,int n2) /把一个表达式分成几段int i=0,j=0;whi

7、le(s1i= )if(s1i= )i+;if(s1i=0)exit(0);while(s1i!=0)if(In(s1i+1)!=In(s1i)|In(s1i+1)*In(s1i)=1|s1i=0)s2j=s1i;s1i= ;break;if(In(s1i+1)=In(s1i)s2j=s1i;s1i= ;i+;j+;templateint link:isInt(char s,int n)int i=0,j=0,x;while(si!= &si!=0)if(si=0&sivoid link:xitiku(char a,int n) /创建习题库int TIME,T;Ti t100=0;char

8、ch30=0;int i;ifstream file(TextFile1.txt,ios_base:in);if(!file)coutfloat link:Expression() /试题测试char x=0,theta=0;char s30=0,shu5=0;float a=0,b=0,n;int i,j;Stack R;Stack2 D;R=setStack();Push(R,#);D=setStack2();xitiku(s,30);isStay(s,30,shu,5);while(shu0!=#|R.dataR.top!=#)if(In(shu0)=0)float S1=atoi(sh

9、u);Push2(D,S1);toEmpty(shu,5);isStay(s,30,shu,5);elsei=change(R.dataR.top);j=change(shu0);switch(Precede(i,j)case -1:Push(R,shu0);toEmpty(shu,5);isStay(s,30,shu,5);break;case 0:Pop(R,x);toEmpty(shu,5);isStay(s,30,shu,5);break;case 1:theta=Pop(R,theta);b=Pop2(D,b);a=Pop2(D,a);n=Operate(a,theta,b);Pus

10、h2(D,n);break;return n;templateStack2 link:setStack2()Stack2 s;s.top=-1;return s;templateStack link:setStack()Stack s;s.top=-1;return s;/main.cpp#include1.cpp#includeiostreamusing namespace std;int main()link t;coutch;coutc;m=t.isInt(c,6);while(m!=-1) if(m=-1111)coutc;m=t.isInt(c,6);elsei+;jieguoi-1=m;daani-1=n;if(m=n)geshu+;coutc;m=t.isInt(c,6); coutch;coutendl;ch=toupper(ch); system(pause);return 0;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号