欢迎来到天天文库
浏览记录
ID:40589509
大小:63.00 KB
页数:18页
时间:2019-08-04
《中缀表达式(c++)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、/*模拟小学生在线算术考试系统(C++实现)*实现的要求:*1.操作数个数随机指定*2.操作数随机生成*3.操作符随机选择*4.利用中缀表达式堆栈求值法求出正确答案*5.判断用户输入答案并计算分值*--------------------------------------*程序是帮别人写的课程设计时间比较紧迫就没有用链表实现堆栈*也没有将中缀表达式转换为后缀表达式后再求值*------------------------------------------*程序逻辑还算清楚,有详细的注释。*在vs2010,vs2008下可
2、以正常运行(vc6.0就不用试了不能运行的,不是程序有错误,而是*vc6.0对局部变量的要求不一样,所以不能运行)*-------------------------------------------------------------*2013-1-9By:LiWei*/#include#include#include#includeusingnamespacestd;#defineMax_Size50//定义最多保存的题目数量template3、ssT>classOp_Stack{public:Op_Stack();voidPush(Ta);//进栈操作TPOP();//出栈操作boolisNull();TTop();private:inttop;TData[19];};templateOp_Stack::Op_Stack(){top=-1;}templatevoidOp_Stack::Push(Ta){top++;Data[top]=a;}templateTOp_Stack::POP(){Ttemp4、;temp=Data[top];top--;returntemp;}templateboolOp_Stack::isNull(){if(-1==top){returnfalse;}}templateTOp_Stack::Top(){if(-1==top){return-1;}else{returnData[top];}}classOP_Questions{public:OP_Questions();int*Produce_Rand(intbegin,intend,intcount)5、;//产生指定范围内的随机数,返回指向数组的指针voidProduce_Questions();//生成题目voidprint();//打印题目intscore();//计算题目voidshow_score();//输出用户成绩voidmenu();//private:intquestions[30],num;//保存生成的题目,操作数的个数Op_Stacknumber;//保存操作数,用于中缀表达式求值Op_Stackop;//保存操作符,用于中缀表达式求值intfinalscore;//总成绩};OP6、_Questions::OP_Questions()//构造函数{num=0;finalscore=0;//初始化分数和操作数个数}int*OP_Questions::Produce_Rand(intbegin,intend,intcount)//生成所需的随机数{int*p=newint[10];srand((unsigned)time(0));for(inti=0;i<=count-1;i++){p[i]=rand()%(end-begin+1)+begin;//取得begin到end范围内的随机数}returnp;//7、返回数组首地址}voidOP_Questions::Produce_Questions(){/*生成随机题目思路:*1,操作数个数随机生成*2,操作符随机选择*3,操作数随机生成*/int*p,index;index=0;p=Produce_Rand(2,5,1);//随机确定需要的操作数的个数num=p[0];//记录需要几个操作数p=Produce_Rand(1,10,num);//取得操作数,为方便计算操作数范围在1—10之间for(inti=1;i<=2*num-1;i+=2)//将操作数保存在数组中(中缀表达式),8、奇数位置放操作数{questions[i]=*(p+index);index++;//记录位置}p=Produce_Rand(1,4,num-1);/*取得操作符*/index=0;/*返回的数字表示操作符代号*/for(inti=2;i<=2*num-1;i+=2)/*1001,1002
3、ssT>classOp_Stack{public:Op_Stack();voidPush(Ta);//进栈操作TPOP();//出栈操作boolisNull();TTop();private:inttop;TData[19];};templateOp_Stack::Op_Stack(){top=-1;}templatevoidOp_Stack::Push(Ta){top++;Data[top]=a;}templateTOp_Stack::POP(){Ttemp
4、;temp=Data[top];top--;returntemp;}templateboolOp_Stack::isNull(){if(-1==top){returnfalse;}}templateTOp_Stack::Top(){if(-1==top){return-1;}else{returnData[top];}}classOP_Questions{public:OP_Questions();int*Produce_Rand(intbegin,intend,intcount)
5、;//产生指定范围内的随机数,返回指向数组的指针voidProduce_Questions();//生成题目voidprint();//打印题目intscore();//计算题目voidshow_score();//输出用户成绩voidmenu();//private:intquestions[30],num;//保存生成的题目,操作数的个数Op_Stacknumber;//保存操作数,用于中缀表达式求值Op_Stackop;//保存操作符,用于中缀表达式求值intfinalscore;//总成绩};OP
6、_Questions::OP_Questions()//构造函数{num=0;finalscore=0;//初始化分数和操作数个数}int*OP_Questions::Produce_Rand(intbegin,intend,intcount)//生成所需的随机数{int*p=newint[10];srand((unsigned)time(0));for(inti=0;i<=count-1;i++){p[i]=rand()%(end-begin+1)+begin;//取得begin到end范围内的随机数}returnp;//
7、返回数组首地址}voidOP_Questions::Produce_Questions(){/*生成随机题目思路:*1,操作数个数随机生成*2,操作符随机选择*3,操作数随机生成*/int*p,index;index=0;p=Produce_Rand(2,5,1);//随机确定需要的操作数的个数num=p[0];//记录需要几个操作数p=Produce_Rand(1,10,num);//取得操作数,为方便计算操作数范围在1—10之间for(inti=1;i<=2*num-1;i+=2)//将操作数保存在数组中(中缀表达式),
8、奇数位置放操作数{questions[i]=*(p+index);index++;//记录位置}p=Produce_Rand(1,4,num-1);/*取得操作符*/index=0;/*返回的数字表示操作符代号*/for(inti=2;i<=2*num-1;i+=2)/*1001,1002
此文档下载收益归作者所有