刘艳红C语言编写四则运算运算

上传人:人*** 文档编号:425394454 上传时间:2024-02-18 格式:DOC 页数:15 大小:188KB
返回 下载 相关 举报
刘艳红C语言编写四则运算运算_第1页
第1页 / 共15页
刘艳红C语言编写四则运算运算_第2页
第2页 / 共15页
刘艳红C语言编写四则运算运算_第3页
第3页 / 共15页
刘艳红C语言编写四则运算运算_第4页
第4页 / 共15页
刘艳红C语言编写四则运算运算_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《刘艳红C语言编写四则运算运算》由会员分享,可在线阅读,更多相关《刘艳红C语言编写四则运算运算(15页珍藏版)》请在金锄头文库上搜索。

1、研究生课程论文课程名称 语言应用授课学期 年至 年 第 一 学期学院 电子工程学院 专 业 电子与通信 学号 011646 姓名 刘 艳 红 任课教师 闭金杰 专 题的带括号四则运算设计交稿日期 201年02月15日 成绩 阅读教师签名 日 期 广西师范大学研究生学院目 录摘 要1一、设计任务,目的与规定21.设计内容:22.设计目的:23.设计规定:2二、概要设计31.需求分析:32.设计规定:33.总体设计:3三、运营成果及分析51.程序运营测试:52.测试数据:53.成果及分析6附 录7四则运算的程序:7摘 要 在工资管理软件中,不可避免的要用到公式的定义及求值等问题。对于数学体现式的计

2、算,虽然可以直接对体现式进行扫描并按照优先级逐渐计算,但也可以将中缀体现式转换为逆波兰体现式,这样更容易解决。四则运算体现式求值,将四则运算体现式用中缀体现式,然后转换为后缀体现式,并计算成果。问题描述:有理数是一种可以化为一种分数的数,例如2/3,533/920,-12/49都是有理数,而就为无理数。在C+中,并没有预先定义有理数,需要时可以定义一种有理数类,将有理数的分子和分母分别寄存在两个整型变量中。对有理数的多种操作都可以用重载运算符来实现。基本规定: 定义并实现一种有理数类,通过重载运算符+、-、*、/对有理数进行算术运算,通过重载运算符=实现鉴定两个有理数与否相等。写一种优化函数,

3、它的作用是使有理数约去公分母,也即是使保存的有理数分子和分母之间没有公约数(除去1以外)。此外,还要定义一种将有理数转换为实数的函数,再加上构造函数和有理数输出函数。一、设计任务,目的与规定1.设计内容:四则运算显示功能规定: 1) 在屏幕可以手动输入待运算的带有括号的四则运算式子;2) 输入完毕后,通过选择可以完毕运算式的运算; 3) 将成果显示在屏幕上。 4) 验收时程序可以演示,自己单独做。 5) 输入是一种带有括号的四则运算体现式,输出是计算得出的对的计算成果。例如:输入:123+213-67*34+345/23*45。2.设计目的:1)复习、巩固C+语言的基本知识,进一步加深对C+语

4、言的理解和掌握。2)课程设计为将课本上的理论知识和实际有机的结合起来,锻炼分析解决实际问题的能力。提高适应实际,实践编程的能力。3.设计规定:1)对系统进行功能模块分析、控制模块分析对的,符合课题规定,实现相应功能;可以加以其她功能或修饰,使程序更加完善、合理。2)系统设计要实用,编程简洁,可用,功能全面。3)阐明书、流程图要清晰。4)记录设计状况(备查,也为编写设计阐明书作好准备)。5)规定采用模块化程序设计措施,规定上机调试通过和按设计报告格式。 6)设计上交内容:设计报告一人一份(按格式书写);源程序文献。二、概要设计1.需求分析:1.四则运算体现式求值,将四则运算体现式用中缀体现式,然

5、后转换为后缀体现式,并计算成果。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)有理数相除 计算式=a/d; 输入:123+213-67*34+345/23*45*(34+34-345+245+567

6、)回车,然后程序计算得出成果为:359183。3.总体设计:算法的基本思想:建树是本程序的难点。思路很直观,就是按照每次查找目前体现式区间的最后一次运算的运算符然后以这个运算符为根把区间提成左右进行递归建树。例如1+2*(1+2),最后一次运算是1 + 2*(1+2) 标记为红色的加号,把它作为根节点然后把体现式分为“1”和“2*(1+2)”进行递归,函数返回的是该函数解决区间体现式的根节点。判断最后运算的运算符(即根节点)的措施是找体现式中最右边的不在括号中的+或-,如果没有那就选最右边的不在括号中的*或/。根据此算法设计流程图为:三、运营成果及分析1.程序运营测试:在电脑中打开C+应用程序

7、, 一方面进入VC+6.0,将程序代码输入,编译,组建,调试。观测运营成果,和各个功能状况。针对有理数的多种算法,一方面要定义一种有理数类,在类中定义两个整型变量作为私有数据,分别寄存有理数的分子和分母;另一方面,要对有理数进行多种不同的操作,如加、减、乘、除、判断两个有理数与否相等等多种关系运算,有理数是通过度数形式来进行多种运算的,有理数的加减乘除,并不是简朴的分子与与分子相加减,分母与分母相加减,故要实现它的多种不同的运算,则要针对每种算法进行不同的操作,解决好两个有理数的分子与分母之间的运算;再次,有理数是一种可以转化为分数的数,但它尚有实数的形式,因此,要定义一种函数来实现将有理数的

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

9、杂度是,由于建树的复杂度要不小于其她部分功能的复杂度,因此本实验实现的复杂度即为建树的复杂度。输入和输出的格式:输入:在字符界面上输入一种中缀体现式,回车表达结束。输出:如果该中缀体现式对的,那么在字符界面上输出其后缀体现式,其中后缀体现式中两相邻操作数之间运用空格隔开;如果不对的,在字符界面上输出体现式错误提示。3.成果及分析程序计算得出成果为:359183。是在基于对话框的应用程序中模拟一种计算器,本计算器分为基本模式和拓展模式。其中基本模式可以把十进制转化为二进制十六进制之间的任意进制,可以进行某些常用的函数运算(例如sin、cos、tan、sqrt、ln等),可以用来求某些简朴的定积分

10、。拓展模式可以进行十进制下的四则运算(加、减、乘、除)和四则混合运算,还可以支持带“(”,“)”符号的体现式的计算。系统开发平台为Windows 7,程序设计设计语言采用Visual C+6.0,程序运营平台为Windows 98/XP。程序通过调试运营,初步实现了设计目的。附 录四则运算的程序:#include#include#include #includeusing namespace std; char token61; /*寄存体现式字符串的数组*/ int n=0; double term(void); /*计算乘除的函数*/ double factor(void); /*解决括号

11、和数字的函数*/ 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=getchar(); else error(); double A:factor(void) double tem

12、p; 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 A:term(void) double div; double temp=factor(); whi

13、le(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(); while(tokenn=+)|(tokenn=-) switch(tokenn) case+:match(+); temp+=term(); break; case-:match(-); temp-=term(); break; return temp; main() double result;

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

当前位置:首页 > 资格认证/考试 > 自考

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