C++课程设计报告

上传人:cl****1 文档编号:436645924 上传时间:2022-12-05 格式:DOCX 页数:17 大小:171.96KB
返回 下载 相关 举报
C++课程设计报告_第1页
第1页 / 共17页
C++课程设计报告_第2页
第2页 / 共17页
C++课程设计报告_第3页
第3页 / 共17页
C++课程设计报告_第4页
第4页 / 共17页
C++课程设计报告_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《C++课程设计报告》由会员分享,可在线阅读,更多相关《C++课程设计报告(17页珍藏版)》请在金锄头文库上搜索。

1、+ lensiA题目:计算器1. 程序功能简介实现计算器功能。用户根据程序提示,输入数字,选择要进行的 运算,可以进行加,减,乘,除,开方、温度单位的换算。2. 课程设计要求(1) 完善计算器程序,改写成可对实数操作。(2) 完善程序,改为多个操作数基本四则运算,遇到 0为止(3) 增加函数、完成四则混合运算,注意算法要考虑优先级,对 应增加主菜单选项。(4) 添加语句,使四则运算具有测试功能,即计算器出题目,并 要求用户计算,同时计算机判断用户对错并打分,要求十题为一个单 元,加减运算时最高为两位数运算,乘除法为两位数乘一位数,除法 是两位数或三位数除以一位数,且没有余数。3. 设计思路将原

2、函数的 int 型数据改为 float 型数据。仿照类设计四则混合运算的程序,四则混合运算的分函数主要有 double eval_exp(char *exp);运算四则运算表达式的主函数,返回结 果、void oopcalc:sizeyunsuan();四则运算调用的主函数、double oopcalc:eval_exp(char *exp)/计算表达式函数并返回结果、 get_token();取表达式函数等。利用类的结构编写一个void test()测试函数,并给出选项选择测 试的内容。并参考资料改写随机数生成器源代码,使之符合类的结构能够被调用,添加有关头文件。4.程序结构图5.添加的主要

3、函数代码添加四则运算主要代码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

4、 &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)/识别乘除号与百分号,方法同加减号 registe

5、r 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;r

6、egister int t;eval_exp5(result); if(*token= A)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

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

8、fault: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(+-

9、*/%A=(), *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) II

10、 c=9 II c=r II c=0)return 1;return 0;void oopcalc:sizeyunsuan()四贝0运算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 按任意键继续;getch();menu();添加的测试主要程序void oopcalc:test()/测试选择程序

11、char input;oopcalc a;system(cls);coutvv*选择你测试的题目的类型*n;cout 1:加法运算n;cout 2:减法运算n;cout 3:除法运算5;cout 4:乘法运算5;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;coutvv是否

12、继续测试其他题目:1是,2否!n;int d=0;cind;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

13、=add(x1,x2);coutvv题目vi+1vv vvxlvv + x2input;if(input=answer1)count1+;coutvv结果正确!n;else coutvv结果错误!nvv 正确答案为:vvanswer1vvn; coutvv你现在的得分为:nvvcount1vvn;void oopcalc:calcsubtest()float answer2=0,input;double x1,x2;for(int i=0,count2=0;iv10;i+)x1=gaussrand()*10;x2=gaussrand()*10;answer2=sub(x1,x2);coutw题目vvi+1vvtvvx1vv - vvx2vv=;cininput;if(input=answer2)count2+;coutvv结果正确!n;else

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 建筑资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号