利用栈求表达式的值,可供小学生作业,并能给出分数.doc_第1页
利用栈求表达式的值,可供小学生作业,并能给出分数.doc_第2页
利用栈求表达式的值,可供小学生作业,并能给出分数.doc_第3页
利用栈求表达式的值,可供小学生作业,并能给出分数.doc_第4页
利用栈求表达式的值,可供小学生作业,并能给出分数.doc_第5页
免费预览已结束,剩余16页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/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 &S,char x);char Pop(Stack &S,char x);void Push2(Stack2 &S,float x);float Pop2(Stack2 &S,float x);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();Stack2 setStack2();/1.cpp#include#include1.h#include#include#include#includeusing namespace std;templatevoid link:Push(Stack &S,char x)if(S.top=49)cout栈已满!?endl;elseS.top+;S.dataS.top=x;templatechar link: Pop(Stack &S,char x)if(S.top=-1)cout栈空!endl;x=S.dataS.top;S.top-;return x;templatevoid link:Push2(Stack2 &S,float x)if(S.top=49)cout栈已满!endl;elseS.top+;S.dataS.top=x;templatefloat link:Pop2(Stack2 &S,float x)if(S.top=-1)cout栈空!endl;x=S.dataS.top;S.top-;return x;templatevoid link:pingjia(int m)switch(m/10)case 0:case 1:case 2:case 3:case 4:case 5:cout对不起,你没能及格,要加油哦!n;break;case 6:case 7:cout恭喜您及格了,但离高分还有距离哦!n;break;case 8:case 9:cout哇,您居然得了这么高的分数,真棒!n;break;case 10:coutOH MY GOD!,您竟然考了满分!n;break;templateint link:In(char c) /判断字符是否为运算符?int m=0,i;char OP7=+,-,*,/,(,),#;for(i=0;i7;i+)if(c=OPi)m+;if(m=0)return 0;elsereturn 1;templateint 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 ): 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 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;in;i+)si=0;templatevoid link:isStay(char s1,int n1,char s2,int n2) /把一个表达式分成几段int i=0,j=0;while(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&si=9|s0=-)j+;i+;if(i=j)x=atoi(s);return x;elsereturn -1;templatevoid link:xitiku(char a,int n) /创建习题库int TIME,T;Ti t100=0;char ch30=0;int i;ifstream file(TextFile1.txt,ios_base:in);if(!file)cout打洙?开a习题琣库a文?件t失骸?败悒?!?endl;exit(0);i=0;while(!file.eof()file.getline(ch,50);strcpy(ti.chh,ch);i+;srand(time(0);TIME=rand()%7;T=TIME;int j=0;while(tT.chhj!=#)couttT.chhj;j+;cout=;strcpy(a,tT.chh);file.close();templatefloat 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(shu);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);Push2(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;cout-表达式求值-n;int i=0,j,geshu=0,n,m,jieguo100,daan100;char ch,c6=0; coutch; coutendl; while(ch) switch(ch) case A: cout-现在开始做题-nn; n=int(t.Expression()+0.5); coutc; m=t.isInt(c,6); while(m!=-1) if(m=-1111) coutn输入错误,请重新输入您的答案!; coutc; m=t.isInt(c,6); else i+; jieguoi-1=m; daani-1=n; if(m=n) geshu+; coutendl; n=int(t.Expression()+0.5); coutc; m=t.isInt(c,6); cout-nn; break; case B: if(i=0) cout成绩单为空!nn; else cout *您的成绩单* nn; cout-n; cout题号 你的答案 正确答案 结论n; for(j=0;ji;j+) coutsetw(2)j+1; coutsetw(11)jieguoj; coutsetw(11)daanj; if(jieguoj=daanj) coutsetw(11)正确!; else coutsetw(11)错误!; coutendl; cout-n; cout共做了i道题,其中n; cout做对了geshu道题,做错了i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论