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

上传人:文库蛋蛋多 文档编号:4150405 上传时间:2023-04-07 格式:DOC 页数:8 大小:76KB
返回 下载 相关 举报
算术题测试程序课程设计报告.doc_第1页
第1页 / 共8页
算术题测试程序课程设计报告.doc_第2页
第2页 / 共8页
算术题测试程序课程设计报告.doc_第3页
第3页 / 共8页
算术题测试程序课程设计报告.doc_第4页
第4页 / 共8页
算术题测试程序课程设计报告.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《算术题测试程序课程设计报告.doc》由会员分享,可在线阅读,更多相关《算术题测试程序课程设计报告.doc(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(n7)bool preIsDiv=false; for(int k=0;k=n-2;k+)expressionk=getOd(preIsDiv); expression+k=getOp(false); preIsDiv=expressionk=/?true:false; expre

7、ssionk=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 innerI

8、sZero=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=ge

9、tOd(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 innerIsZe

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

11、(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,s

12、t.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=

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

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备2025010119号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000987号