收藏 分销(赏)

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

上传人:人****来 文档编号:4298253 上传时间:2024-09-04 格式:DOC 页数:21 大小:123KB
下载 相关 举报
利用栈求表达式的值-可供小学生作业-并能给出分数.doc_第1页
第1页 / 共21页
利用栈求表达式的值-可供小学生作业-并能给出分数.doc_第2页
第2页 / 共21页
利用栈求表达式的值-可供小学生作业-并能给出分数.doc_第3页
第3页 / 共21页
利用栈求表达式的值-可供小学生作业-并能给出分数.doc_第4页
第4页 / 共21页
利用栈求表达式的值-可供小学生作业-并能给出分数.doc_第5页
第5页 / 共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 &S,char x);char Pop(Stack

2、&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

3、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.da

4、taS.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:co

5、ut对不起,你没能及格,要加油哦!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:chang

6、e(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

7、,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;temp

8、latevoid 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;s1

9、i= ;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失骸?败悒?

10、!?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

11、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;

12、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#includeio

13、streamusing 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+

14、; 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

15、)正确!; else coutsetw(11)错误!; coutendl; cout-n; cout共做了i道题,其中n; cout做对了geshu道题,做错了i-geshu道题.n; int fenshu=geshu*100/i; cout最后成绩为:fenshu分!endl; t.pingjia(fenshu); cout-n; break; case C: cout程序结束,谢谢使用!endl; exit(0); default: cout输入错误,请重新输入!endl; break; coutch; coutendl; ch=toupper(ch); system(pause);return 0;

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服