刘艳红-C++语言编写四则运算运算.doc

上传人:豆**** 文档编号:33420620 上传时间:2022-08-11 格式:DOC 页数:8 大小:45.50KB
返回 下载 相关 举报
刘艳红-C++语言编写四则运算运算.doc_第1页
第1页 / 共8页
刘艳红-C++语言编写四则运算运算.doc_第2页
第2页 / 共8页
点击查看更多>>
资源描述

《刘艳红-C++语言编写四则运算运算.doc》由会员分享,可在线阅读,更多相关《刘艳红-C++语言编写四则运算运算.doc(8页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、精品文档,仅供学习与交流,如有侵权请联系网站删除研究生课程论文课程名称 语言应用授课学期 2013 学年至 2014 学年 第 一 学期学院 电子工程学院 专 业 电子与通信 学号 2013011646 姓名 刘 艳 红 任课教师 闭金杰 专 题的带括号四则运算设计交稿日期 201年02月15日 成绩 阅读教师签名 日 期 广西师范大学研究生学院【精品文档】第 6 页目 录摘 要1一、设计任务,目的与要求21.设计内容:22.设计目的:23.设计要求:2二、概要设计31.需求分析:32.设计要求:33.总体设计:3三、运行结果及分析51.程序运行测试:52.测试数据:53.结果及分析6附 录7

2、四则运算的程序:7摘 要 在工资管理软件中,不可避免的要用到公式的定义及求值等问题。对于数学表达式的计算,虽然可以直接对表达式进行扫描并按照优先级逐步计算,但也可以将中缀表达式转换为逆波兰表达式,这样更容易处理。四则运算表达式求值,将四则运算表达式用中缀表达式,然后转换为后缀表达式,并计算结果。问题描述:有理数是一个可以化为一个分数的数,例如2/3,533/920,-12/49都是有理数,而就为无理数。在C+中,并没有预先定义有理数,需要时可以定义一个有理数类,将有理数的分子和分母分别存放在两个整型变量中。对有理数的各种操作都可以用重载运算符来实现。基本要求: 定义并实现一个有理数类,通过重载

3、运算符+、-、*、/对有理数进行算术运算,通过重载运算符=实现判定两个有理数是否相等。写一个优化函数,它的作用是使有理数约去公分母,也即是使保存的有理数分子和分母之间没有公约数(除去1以外)。此外,还要定义一个将有理数转换为实数的函数,再加上构造函数和有理数输出函数。一、设计任务,目的与要求1.设计内容:四则运算显示功能要求: 1) 在屏幕能够手动输入待运算的带有括号的四则运算式子;2) 输入完成后,通过选择可以完成运算式的运算; 3) 将结果显示在屏幕上。 4) 验收时程序能够演示,自己单独做。 5) 输入是一个带有括号的四则运算表达式,输出是计算得出的正确计算结果。例如:输入:123+21

4、3-67*34+345/23*45。2.设计目的:1)复习、巩固C+语言的基础知识,进一步加深对C+语言的理解和掌握。2)课程设计为将课本上的理论知识和实际有机的结合起来,锻炼分析解决实际问题的能力。提高适应实际,实践编程的能力。3.设计要求:1)对系统进行功能模块分析、控制模块分析正确,符合课题要求,实现相应功能;可以加以其他功能或修饰,使程序更加完善、合理。2)系统设计要实用,编程简练,可用,功能全面。3)说明书、流程图要清楚。4)记录设计情况(备查,也为编写设计说明书作好准备)。5)要求采用模块化程序设计方法,要求上机调试通过和按设计报告格式。 6)设计上交内容:设计报告一人一份(按格式

5、书写);源程序文件。二、概要设计1.需求分析:1.四则运算表达式求值,将四则运算表达式用中缀表达式,然后转换为后缀表达式,并计算结果。2.用户通过键盘输入一个中缀表达式,回车表示结束。3.在Dos界面输出后缀表达式。4.测试数据输入:21+23*(12-6)输出:21 23 12 6 -*+2.设计要求:实现带有括号的四则运算。输入是一个带有括号的四则运算表达式,输出是计算得出的正确计算结果。算法的设计: 设有两个有理数a*b和c/d,则有(1)有理数相加 计算式=a*d+b/c;(2)有理数相减 计算式=a*d-b/c;(3)有理数相乘 计算式=a*(b+c-d); (4)有理数相除 计算式

6、=a/d; 输入:123+213-67*34+345/23*45*(34+34-345+245+567)回车,然后程序计算得出结果为:359183。3.总体设计:算法的基本思想:建树是本程序的难点。思路很直观,就是按照每次查找当前表达式区间的最后一次运算的运算符然后以这个运算符为根把区间分成左右进行递归建树。比如1+2*(1+2),最后一次运算是1 + 2*(1+2) 标记为红色的加号,把它作为根节点然后把表达式分为“1”和“2*(1+2)”进行递归,函数返回的是该函数处理区间表达式的根节点。判断最后运算的运算符(即根节点)的方法是找表达式中最右边的不在括号中的+或-,如果没有那就选最右边的不

7、在括号中的*或/。根据此算法设计流程图为:三、运行结果及分析1.程序运行测试:在电脑中打开C+应用程序, 首先进入VC+6.0,将程序代码输入,编译,组建,调试。观察运行结果,和各个功能情况。针对有理数的各种算法,首先要定义一个有理数类,在类中定义两个整型变量作为私有数据,分别存放有理数的分子和分母;其次,要对有理数进行各种不同的操作,如加、减、乘、除、判断两个有理数是否相等等各种关系运算,有理数是通过分数形式来进行各种运算的,有理数的加减乘除,并不是简单的分子与与分子相加减,分母与分母相加减,故要实现它的各种不同的运算,则要针对每种算法进行不同的操作,处理好两个有理数的分子与分母之间的运算;

8、再次,有理数是一个可以转化为分数的数,但它还有实数的形式,所以,要定义一个函数来实现将有理数的分数形式转化为实数形式,以实现其完整性;同时当从键盘输入一个有理数的分子与分母,或者两数进行运算后,有理数之间并不是最优化的形式,分子与分母之间仍可以进行化简,所以,针对这种情况仍需要定义一个函数来使有理数的分数形式化为最简,以实现有理数的最优化。2.测试数据: 在应用程序中,创建若干有理数对象,通过带参数的构造函数使得各有理数对象值各不相同,然后分别进行各类运算,输出运算结果,检验其正确性。算法的时空分析如建树复杂度:每次递归查找根节点的复杂度是,n为当前表达式树的规模(节点数),所以总的开销是按这

9、种规则所建的树中的所有子树的规模之和。其他部分的复杂度:后续遍历的复杂度是,计算后序表达式的复杂度是,由于建树的复杂度要大于其他部分功能的复杂度,所以本实验实现的复杂度即为建树的复杂度。输入和输出的格式:输入:在字符界面上输入一个中缀表达式,回车表示结束。输出:如果该中缀表达式正确,那么在字符界面上输出其后缀表达式,其中后缀表达式中两相邻操作数之间利用空格隔开;如果不正确,在字符界面上输出表达式错误提示。3.结果及分析程序计算得出结果为:359183。是在基于对话框的应用程序中模拟一个计算器,本计算器分为基础模式和拓展模式。其中基础模式可以把十进制转化为二进制十六进制之间的任意进制,可以进行一

10、些常用的函数运算(比如sin、cos、tan、sqrt、ln等),可以用来求一些简单的定积分。拓展模式可以进行十进制下的四则运算(加、减、乘、除)和四则混合运算,还可以支持带“(”,“)”符号的表达式的计算。系统开发平台为Windows 7,程序设计设计语言采用Visual C+6.0,程序运行平台为Windows 98/2000/XP。程序通过调试运行,初步实现了设计目标。附 录四则运算的程序:#include#include#include #includeusing namespace std; char token61; /*存放表达式字符串的数组*/ int n=0; double

11、term(void); /*计算乘除的函数*/ double factor(void); /*处理括号和数字的函数*/ class Apublic:void error(void);void match(char expected);double term(void);double factor(void);double exp(void);void A:error(void) /*报告错误函数*/ coutERROR!n; exit(1); void A:match(char expected) /*检查字符匹配的函数*/ if(tokenn=expected) token+n=getcha

12、r(); else error(); double A:factor(void) double temp; char number61; int i=0; if(tokenn=() match(); temp=exp(); match(); else if(isdigit(tokenn)|tokenn=.) while(isdigit(tokenn)|tokenn=.)/*将字符串转换为浮点数*/ numberi+=tokenn+; tokenn=getchar(); numberi=0; temp=atof(number); else error(); return temp; double

13、 A:term(void) double div; double temp=factor(); while(tokenn=*)|(tokenn=/) switch(tokenn) case*:match(*); temp*=factor(); break; case/:match(/); div=factor(); if(div=0) /*处理除数为零的情况*/ coutThe divisor is zero!n; exit(1); temp/=div; break; return temp; double A:exp(void) /*计算加减的函数*/ double temp=term();

14、 while(tokenn=+)|(tokenn=-) switch(tokenn) case+:match(+); temp+=term(); break; case-:match(-); temp-=term(); break; return temp; main() double result; A a;FILE *data=fopen(61590_4.dat,at); if(data=NULL) data=fopen(61590_4.dat,wt); if(data=NULL) return 0; tokenn=getchar(); result=a.exp(); if(tokenn=n) tokenn=0; couttoken=resultendl; fprintf(data,%s=%gn,token,result); else a.error(); fclose(data); return 0; getchar();

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

当前位置:首页 > 教育专区 > 小学资料

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

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com