




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计报告Visual C+ 课程设计题目:计算器题目:计算器1.程序功能简介实现计算器功能。用户根据程序提示,输入数字,选择要进行的运算,可以进行加,减,乘,除,开方、温度单位的换算。2.课程设计要求(1)完善计算器程序,改写成可对实数操作。(2)完善程序,改为多个操作数基本四则运算,遇到0为止(3)增加函数、完成四则混合运算,注意算法要考虑优先级,对应增加主菜单选项。(4)添加语句,使四则运算具有测试功能,即计算器出题目,并要求用户计算,同时计算机判断用户对错并打分,要求十题为一个单元,加减运算时最高为两位数运算,乘除法为两位数乘一位数,除法是两位数或三位数除以一位数,且没有余数。3.设计思路将原函数的int型数据改为float型数据。仿照类设计四则混合运算的程序,四则混合运算的分函数主要有double eval_exp(char *exp);/运算四则运算表达式的主函数,返回结果 、 void oopcalc:sizeyunsuan();/四则运算调用的主函数、double oopcalc:eval_exp(char *exp)/计算表达式函数并返回结果、get_token();/取表达式函数等。利用类的结构编写一个void test()/测试函数,并给出选项选择测试的内容。并参考资料改写随机数生成器源代码,使之符合类的结构能够被调用,添加有关头文件。4.程序结构图开始输入选择加法运算除法运算乘法运算四则预算减法运算华氏转摄氏摄氏转华氏测试退方根结束加法测试减法测试除法测试乘法测试105.添加的主要函数代码添加四则运算主要代码oopcalc:parser() exp_ptr = NULL;/ 将exp_prt赋值为空指针double oopcalc:eval_exp(char *exp)/计算表达式函数并返回结果 double result; exp_ptr = exp;/将指针指向表达式 get_token();/取表达式函数 if(!*token)/取得链表为空时,显示错误警告,并返回0值 serror(2); return 0.0; eval_exp2(result); if(*token) serror(0); return result;void oopcalc:eval_exp2(double &result)/识别加减符号 register char op; double temp; eval_exp3(result); while(op = *token) = + | op = -)/判断指针指向的符号 get_token(); eval_exp3(temp); switch(op) /通过switch语句实现判断 case -: result = result - temp; break; case +: result = result + temp; break; void oopcalc:eval_exp3(double &result)/识别乘除号与百分号,方法同加减号 register char op; double temp; eval_exp4(result); while(op = *token) = * | op = / | op = %) get_token(); eval_exp4(temp); switch(op) case *: result = result * temp; break; case /: result = result / temp; break; case %: result = (int) result % (int) temp; break; void oopcalc:eval_exp4(double &result) double temp, ex; register int t; eval_exp5(result); if(*token= ) get_token(); eval_exp4(temp); ex = result; if(temp=0.0) result = 1.0; return; for(t=(int)temp-1; t0; -t) result = result * (double)ex; void oopcalc:eval_exp5(double &result) register char op; op = 0; if(tok_type = DELIMITER) & *token=+ | *token = -) op = *token; get_token(); eval_exp6(result); if(op=-) result = -result;void oopcalc:eval_exp6(double &result) if(*token = () get_token(); eval_exp2(result); if(*token != ) serror(1); get_token(); else atom(result);void oopcalc:atom(double &result) switch(tok_type) case NUMBER: result = atof(token); get_token(); return; default: serror(0); void oopcalc:serror(int error)/输入空时显示输入错误 static char *e= /将一组字符串赋值给指针 Syntax Error, Unbalanced Parentheses, 目前没有表达式 ; cout eerror endl;/输出字符串void oopcalc:get_token()/ register char *temp; tok_type = 0; temp = token; *temp = 0; if(!*exp_ptr) return; while(isspace(*exp_ptr) +exp_ptr; if(strchr(+-*/%=(), *exp_ptr) tok_type = DELIMITER; *temp+ = *exp_ptr+; else if(isalpha(*exp_ptr) while(!isdelim(*exp_ptr) *temp+ = *exp_ptr+; tok_type = VARIABLE; else if(isdigit(*exp_ptr) while(!isdelim(*exp_ptr) *temp+ = *exp_ptr+; tok_type = NUMBER; *temp = 0;int oopcalc:isdelim(char c) if(strchr( +-/*%=(), c) | c=9 | c=r | c=0) return 1; return 0;void oopcalc:sizeyunsuan()/四则运算 char expstr80; cout 输入0使计算终止。n; oopcalc ob; for(;) cout 输入表达式: ; cin.getline(expstr, 79);/保存输入的表达式 if(*expstr=0) break;/判断输入是否为空 cout 结果是: ob.eval_exp(expstr) nn; ; /* return 0;*/ cout 按任意键继续n; getch(); menu(); 添加的测试主要程序void oopcalc:test()/测试选择程序 char input; oopcalc a;system(cls);cout*选择你测试的题目的类型*n;cout 1: 加法运算n; cout 2: 减法运算n; cout 3: 除法运算n; cout 4: 乘法运算n; cout 选择: ; cout input;switch(input) case 1: a.calcaddtest(); break; case 2: a.calcsubtest();break; case 3: a.calcdivtest();break;case 4: a.calcmulttest();break;default: a.badinput2();break;coutd;if(d=1)system(cls); a.test() ;cout 按任意键继续n;getch(); menu();void oopcalc:badinput2()cout 错误输入!n;cout 按任意键继续n;system(cls);getch();test();void oopcalc:calcaddtest() float answer1=0,input=0; double x1,x2; for(int i=0,count1=0;i10;i+) x1=gaussrand()*10; x2=gaussrand()*10; answer1=add(x1,x2); cout题目i+1 x1 + x2input; if(input=answer1) count1+;cout结果正确!n; else cout结果错误!n正确答案为:answer1n; cout你现在的得分为: ncount1n;void oopcalc:calcsubtest()float answer2=0,input;double x1,x2;for(int i=0,count2=0;i10;i+)x1=gaussrand()*10; x2=gaussrand()*10;answer2=sub(x1,x2);cout题目i+1tx1 - x2input;if(input=answer2)count2+;cout结果正确!n;else cout结果错误!n正确答案为:answer2n;cout你现在的得分为: ncount2n;void oopcalc:calcdivtest()float answer3,input;double x1,x2;for(int i=0,count3=0;i10;i+)x1=gaussrand()*10; x2=gaussrand()*10;answer3=div(x1*x2),x2);cout题目i+1tx1*x2 / x2input;if(input=answer3)count3+;cout结果正确!n;else cout结果错误!n正确答案为:answer3n;cout你现在的得分为: ncount3n;void oopcalc:calcmulttest()float answer4,input;double x1,x2;for(int i=0,count4=0;i10;i+) x1=gaussrand()*10; x2=gaussrand()*10;answer4=mult(x1,x2);cout题目i+1tx1 * x2input;if(input=answer4)count4+;cout结果正确!n;else cout结果错误!n正确答案为:answer4n;cout你现在的得分为: ncount4n;6.程序测试打开程序显示如下:选择1并输入一个加法算式,显示如下:再按任意键返回菜单栏:输入一个四则运算式78+5*(58-45)-12/3:再输入0返回菜单:温度之间的转换:求方根:测试四则运算(举例加法)输入9并选择:选择1:最后选择2“否”,退出测试,按任意键返回菜单:测试完毕。7.总结此次通过对计算器程序的设计:首先,我对自身的知识掌握度加大了,以前只是单纯的课本掌握,现在通过编写,修改,测试程序,对c+中的一些知识更加了解了,特别是类的使用,以前没有真正去接触过,当然,对类的运用,对多态性也更加了解了。当然编辑过程中也遇到了很多问题,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 旅游管理案例研究练习题
- 学科交叉融合促进应用型人才综合素质发展
- 零售电商行业销售趋势统计表
- 汽车工程维修技术知识点解析
- 2025年文化传播与互联网的综合能力考核考试卷及答案
- 2025年现代诗歌鉴赏能力考试试卷及答案
- 2025年数理逻辑与数学思维考试试题及答案
- 2025年审计学基础理论与实务能力提高测试卷及答案
- 2025年人工智能伦理与社会影响知识测试卷及答案
- 2025年绿色经济与可持续发展考试卷及答案
- 公安警情处置流程
- 大型展会展台搭建管理细则(3篇)
- 2024-2030年全球及中国锂云母行业发展动态及投资前景预测报告
- 《国际中文教材评价标准》
- 城市更新项目造价咨询服务方案
- 消防工程火灾自动报警及联动控制系统安装施工方案
- 2024年江西省初中学业水平考试地理试题含答案
- 《理想国》导读学习通超星期末考试答案章节答案2024年
- 四川省南充市语文小升初试卷及解答参考(2024-2025学年)
- GB/T 44302-2024碳纤维增强塑料和金属组合件拉伸搭接剪切强度的测定
- 叙事疗法课件
评论
0/150
提交评论