算术题测试程序课程设计报告

上传人:无*** 文档编号:41575523 上传时间:2021-11-21 格式:DOC 页数:8 大小:101.52KB
收藏 版权申诉 举报 下载
算术题测试程序课程设计报告_第1页
第1页 / 共8页
算术题测试程序课程设计报告_第2页
第2页 / 共8页
算术题测试程序课程设计报告_第3页
第3页 / 共8页
资源描述:

《算术题测试程序课程设计报告》由会员分享,可在线阅读,更多相关《算术题测试程序课程设计报告(8页珍藏版)》请在装配图网上搜索。

1、 课程设计报告 题目:算术题测试程序 学生姓名:学 号:_班 级: _ 指导教师:_ _ 年 月 日一、 需求分析说明1、 设计目的 (1) 掌握栈的存储结构。 (2) 掌握栈基本操作的实现。 (3) 能引用栈解决相关的实际问题。 2、 程序最终需要完成的具体功能(1) 能随机出题,题数由用户输入确定,算术题包括加减乘除四则运算,表达式项数应不限,可以包含括号;(2) 需要进行表达式的合法性验证;(3) 用户交互输入答案;(4) 计算机核对用户答案;(5) 能对用户的测试评分;(6) 实现多用户系统,并对用户的用户名和得分保存到文件,此功能选作。3、 设计要求(1)要求用面向对象程序设计思想实

2、现;(2)系统具有一定的容错性;(3)要求具有较好的交互性。二、 总体设计1、 该程序大致由两大部分构成。第一部分为界面部分,用来实现简单的人机交互,控制程序的整体进程;第二部分为功能实现部分,用来实现各个功能模块。2、 框图说明菜单界面用户输入题数由程序产生随机算式程序对表达式合法性检验用户交互输入答案计算机核对用户答案程序保存用户信息到文件程序对用户的测试评分三、 详细设计1、 随机出题,题数由用户输入确定,算术题包括加减乘除四则运算,表达式项数不限,可以包含括号设计一个表达式类class ss,该类中包含了表达式(字符串型)产生函数string randomExcs()、操作数获取函数c

3、har getOd(bool preIsDiv)以及运算符获取函数char getOp(bool innerIsZero),其中表达式产生函数又用到了随机数产生函数rand()以实现随机产生的表达式项数不固定,括号是否出现以及括号位置随机的功能。该功能用来实现待用户输入题数之后,程序立即随机产生对应数量的表达式供用户测试。2、 表达式的合法性验证此功能包含在上述表达式类当中,该类中包含的操作数和运算符获取函数char getOd(bool preIsDiv)、char getOp(bool innerIsZero)中分别用到了两个bool型参数bool preIsDiv和bool innerI

4、sZero,当获取操作数时必须检验该数之前是否有除号,当获取运算符时必须检验该符号之后是否是0,另外该类之外还定义了一个函数double fune(string st)用来检验括号内的结果是否为0。该功能用来保证随机出现的表达式必须是合法的。3、 用户交互输入答案该功能在测试函数void ceshi()部分实现,该函数当中定义了一个double型变量double youresult当表达式显示在屏幕上等待用户输入答案时,用户便可输入自己的答案(youresult)进行测试。4、 计算机核对用户答案该功能也在测试函数void ceshi()得到实现,该函数中定义了一个double型变量doubl

5、e result当用户输入答案(youresult)后,程序立即判断用户的答案(youresult)是否等于表达式的正确结果result。如果相等则显示“正确”,否则显示“计算错误!”并显示正确值。5、 对用户的测试评分该功能仍依靠测试函数void ceshi()实现,函数中定义一个计数变量float num,并赋初值0,每当用户答对一道题便自加1,最后循环结束时用num除以总题数乘上100便得到用户的最终得分。测试结束后,系统会提示是否继续进行测试,如果想继续输入题数就输入y,否则输入n退出程序。四、 实现部分class ss /表达式类的定义以及各成员函数的实现public: string

6、 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(n<7)bool preIsDiv=false; for(int k=0;k<=n-2;k+)expressionk=getOd(preIsDiv); expression+k=getOp(false); preIsDiv=expressionk=&

7、#39;/'?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(pre

8、IsDiv); 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+)ex

9、pressionj=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)/

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

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

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

13、 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; cout<<&q

14、uot;请输入题数:" cin>>n; for(int i=1;i<=n;i+) suanshi=a.randomExcs(); char p100; memset(p,0,100); strcpy(p,suanshi.c_str(); cout<<suanshi<<"=?" cin>>youresult; if (s.calc(result,p) if(youresult=result) cout<<"正确!"<<endl; num+; else cout<&

15、lt;"错误!正确答案为:"<<result<<endl; score=num/n*100; cout<<endl; cout<<"您的成绩为:"<<score<<endl;五、 程序测试1.首次运行设定题数为2进行算术测试2.输入y继续进行测试,这次输入的题数为33.输入n结束程序4.运行结果分析 (1)每次测试出现的表达式项数不等,括号是否出现和出现的位置符合随机的要求;(2)测试过程中并未出现表达式不合法的情况,表明程序中对表达式合法性检验是正确的;(3)能准确核对用户答案并正

16、确显示用户成绩,但成绩的小数位数保留处理稍显不足。5.改进算法在程序中包含头文件#include<iomanip>,改输出代码为:cout<<"您的成绩为:"<<setprecision(3)<<score<<endl;并再次调试检验六、 总结课程设计的目的是培养应用数据结构设计方法及思想解决实际问题的能力,掌握使用数据结构的设计方法和思想,数据结构是实践性很强的课程。课程设计是加强我们实践能力的一个强有力手段。课程设计要求我们在完成程序设计的同时能够写出比较规范的设计报告。严格实施课程设计这一环节,对于我们基本程序设计素养的培养和软件工作者工作作风的训练,将起到显著的促进作用。在本次课程设计中,我深刻的体会到认真仔细严谨学好数据结构的重要性,在日常学习当中必须学好基础知识,掌握所学课程的理论知识和精髓,加强课外知识的积累,并多上机操作实践才能真正提高自身的编程能力。8

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!