




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计报告 题目:算术题测试程序 学生姓名:学 号:_班 级: _ 指导教师:_ _ 年 月 日一、 需求分析说明1、 设计目的 (1) 掌握栈的存储结构。 (2) 掌握栈基本操作的实现。 (3) 能引用栈解决相关的实际问题。 2、 程序最终需要完成的具体功能(1) 能随机出题,题数由用户输入确定,算术题包括加减乘除四则运算,表达式项数应不限,可以包含括号;(2) 需要进行表达式的合法性验证;(3) 用户交互输入答案;(4) 计算机核对用户答案;(5) 能对用户的测试评分;(6) 实现多用户系统,并对用户的用户名和得分保存到文件,此功能选作。3、 设计要求(1)要求用面向对象程序设计思想实现;(2)系统具有一定的容错性;(3)要求具有较好的交互性。二、 总体设计1、 该程序大致由两大部分构成。第一部分为界面部分,用来实现简单的人机交互,控制程序的整体进程;第二部分为功能实现部分,用来实现各个功能模块。2、 框图说明菜单界面用户输入题数由程序产生随机算式程序对表达式合法性检验用户交互输入答案计算机核对用户答案程序保存用户信息到文件程序对用户的测试评分三、 详细设计1、 随机出题,题数由用户输入确定,算术题包括加减乘除四则运算,表达式项数不限,可以包含括号设计一个表达式类class ss,该类中包含了表达式(字符串型)产生函数string randomexcs()、操作数获取函数char getod(bool preisdiv)以及运算符获取函数char getop(bool inneriszero),其中表达式产生函数又用到了随机数产生函数rand()以实现随机产生的表达式项数不固定,括号是否出现以及括号位置随机的功能。该功能用来实现待用户输入题数之后,程序立即随机产生对应数量的表达式供用户测试。2、 表达式的合法性验证此功能包含在上述表达式类当中,该类中包含的操作数和运算符获取函数char getod(bool preisdiv)、char getop(bool inneriszero)中分别用到了两个bool型参数bool preisdiv和bool inneriszero,当获取操作数时必须检验该数之前是否有除号,当获取运算符时必须检验该符号之后是否是0,另外该类之外还定义了一个函数double fune(string st)用来检验括号内的结果是否为0。该功能用来保证随机出现的表达式必须是合法的。3、 用户交互输入答案该功能在测试函数void ceshi()部分实现,该函数当中定义了一个double型变量double youresult当表达式显示在屏幕上等待用户输入答案时,用户便可输入自己的答案(youresult)进行测试。4、 计算机核对用户答案该功能也在测试函数void ceshi()得到实现,该函数中定义了一个double型变量double result当用户输入答案(youresult)后,程序立即判断用户的答案(youresult)是否等于表达式的正确结果result。如果相等则显示“正确”,否则显示“计算错误!”并显示正确值。5、 对用户的测试评分该功能仍依靠测试函数void ceshi()实现,函数中定义一个计数变量float num,并赋初值0,每当用户答对一道题便自加1,最后循环结束时用num除以总题数乘上100便得到用户的最终得分。测试结束后,系统会提示是否继续进行测试,如果想继续输入题数就输入y,否则输入n退出程序。四、 实现部分class ss /表达式类的定义以及各成员函数的实现public: string randomexcs(); char getop(bool inneriszero); char getod(bool preisdiv);string ss:randomexcs() int n=(1+rand()%4)*2+1; string expression(n, );int left,right;if(n7)bool preisdiv=false; for(int k=0;k=n-2;k+)expressionk=getod(preisdiv); expression+k=getop(false); preisdiv=expressionk=/?true:false; expressionk=getod(preisdiv);else if(n=7)left=2; right=left+4; expressionleft=(; expressionright=); expression(left+right)/2=getop(false); expressionleft+1=getod(false); bool preisdiv=expression(left+right)/2=/?true:false; expressionright-1=getod(preisdiv); string inner(expression,left,right); bool inneriszero=fune(inner)=0?true:false; preisdiv=false;for(int i=0;i=left-2;i+)expressioni=getod(preisdiv); expression+i=getop(false); preisdiv=expressioni=/?true:false;expressionleft-1=getop(inneriszero);for(int j=right+1;j=n-1;j+)expressionj=getop(false); preisdiv=expressionj=/?true:false; expression+j=getod(preisdiv);else left=(1+rand()%2)*2; right=left+4; expressionleft=(; expressionright=); expression(left+right)/2=getop(false); expressionleft+1=getod(false); bool preisdiv=expression(left+right)/2=/?true:false; expressionright-1=getod(preisdiv); string inner(expression,left,right); bool inneriszero=fune(inner)=0?true:false; preisdiv=false;for(int i=0;i=left-2;i+)expressioni=getod(preisdiv); expression+i=getop(false); preisdiv=expressioni=/?true:false;expressionleft-1=getop(inneriszero);for(int j=right+1;j=n-1;j+)expressionj=getop(false); preisdiv=expressionj=/?true:false; expression+j=getod(preisdiv);return expression;char ss:getop(bool inneriszero) char ops=+,-,*,/; return inneriszero?opsrand()%3:opsrand()%4;char ss:getod(bool preisdiv)char ods=1,2,3,4,5,6,7,8,9,0; return preisdiv?odsrand()%9:odsrand()%10;double fune(string st) /检验括号内的结果是否为0int a,b; char c5; memset(c,0,5); strcpy(c,st.c_str(); a=c1; b=c3; switch(c2) case+:return a+b;break; case-:return a-b;break; case*:return a*b;break; default:return a/b;break;void ceshi() /显示表达式、用户输入及核对用户答案srand(unsigned)time(null); ss a; int n; float num=0; calcinfixexp s; double result,youresult,score; string suanshi; coutn; for(int i=1;i=n;i+) suanshi=a.randomexcs(); char p100; memset(p,0,100); strcpy(p,suanshi.c_str(); coutsuanshiyouresult; if (s.calc(result,p) if(youresult=result) cout正确!endl; num+; else cout错误!正确答案为:resultendl; score=num/n*100; coutendl; cout您的成绩为:scoreendl;五、 程序测试1.首次运行设定题数为2进行算术测试2.输入y继续进行测试,这次输入的题数为33.输入n结束程序4.运行结果分析 (1)每次测试出现的表达式项数不等,括号是否出现和出现的位置符合随机的要求;(2)测试过程中并未出现表达式不合法的情况,表明程序中对表达式合法性检验是正确的;(3)能准确核对用户答案并正确显示用户成绩,但成绩的小数位数保留处理稍显不足。5.改进算法在程序中包含头文件#include,改输出代码为:cout您的成绩为:setprecision(3)scoreendl;并再次调试检验六、 总结课程设计的目的是培养应用数据结构设计方法及思想解决实际问题的能力,掌握使用数据结构的设计方法和思想,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年医院临床执业医师职业定期考核技能资格知识考试题与答案
- 2025年中考历史总复习初中历史必考110个重点知识填空汇编
- 培训机构教师活动实施框架
- 护理安全输血培训
- 医院职业防范培训内容
- 路缘机械租赁合同协议
- 避雷装置安装合同协议
- 景区车辆协议书
- 牦牛交易协议书
- 运输公司工作合同协议
- SL631水利水电工程单元工程施工质量验收标准第1部分:土石方工程
- 环网柜基础知识培训课程
- 最实用的考勤签到表(上下班签到表)
- 幼儿园儿童幼儿成长档案可爱模板
- 公积金提取单身声明
- 产业园区物业管理服务交接方案
- 平板电脑样机功能测试报告
- 冷却塔风机安装说明
- 小学五年级英语一般疑问句练习题
- 绿化养护报价表(共8页)
- 本科教学工作审核评估汇报PPT课件
评论
0/150
提交评论