四则运算实验报告

合集下载

实验一复数四则运算.doc

实验一复数四则运算.doc

实验一复数四则运算一、实验目的本次实验的主要目的在于帮助读者熟悉抽象数据类型的表示和实现方法。

抽象数据类型需借助固有数据类型来表示和实现,即利用高级程序设计语言中已存在的数据类型来说明新的结构,用已经实现的操作来组合新的操作,具体实现细节则依赖于所用语言的功能.通过本次实习还可以帮助读者复习高级语言的使用方法.二、实验内容设计一个可进行复数运算的演示程序。

要求实现下列六种基本运算:1)由输入的实部和虚部生成一个复数;2)两个复数求和;3)两个复数求差;4)两个复数求积,5)从已知复数中分离出实部;6)从已知复数中分离出虚部。

运算结果以相应的复数或实数的表示形式显示。

三、实验仪器、设备及材料586以上微机四、实验原理复数在计算机中的表示及复数的四则运算规则.五、实验步骤1。

问题分析和任务定义;2。

数据类型和系统设计;3. 编码实现和静态检查;4。

上机准备和上机调试;5.总结和整理实验报告。

六、实验报告要求实验报告开头就给出题目、班级、姓名、学号和完成日期,并包括以下七个内容:1. 需求分析;2.概要设计;3.详细设计;4. 调试分析;5。

经验和体会等;6。

测试结果;7.附录。

七、实验注意事项实验前先预习,完成问题分析和任务定义的工作。

实验二集合的并、交和差运算一、实验目的本次实验的主要目的在于帮助学生熟练掌握线性表的基本操作在两种存储结构上的实现,其中以各种链表的操作和应用作为重点内容.二、实验内容编制一个能演示执行集合的并、交和差运算的程序。

三、实验仪器、设备及材料586以上微机四、实验原理利用链表的基本运算(插入、删除、查找及合并等)实现集合的基本运算。

五、实验步骤1。

问题分析和任务定义;2.数据类型和系统设计;3。

编码实现和静态检查;4。

上机准备和上机调试;5。

总结和整理实验报告。

六、实验报告要求实验报告开头就给出题目、班级、姓名、学号和完成日期,并包括以下七个内容:1.需求分析;2。

概要设计;3.详细设计;4.调试分析;5. 经验和体会等;6.测试结果;7. 附录。

【7A版】四则运算表达式求值实验报告

【7A版】四则运算表达式求值实验报告

HUNANUNIVERSITY课程实习报告题目:四则运算表达式求值学生姓名:学生学号:专业班级:指导老师:完成日期:一、需求分析四则运算表达式求值,将四则运算表达式用中缀表达式表示,然后转换为后缀表达式,并计算结果。

本程序要求利用二叉树后序遍历来实现表达式的转换,同时可以使用实验2的结果来求解后缀表达式的值。

在字符界面上输入一个中缀表达式,回车表示结束。

如果该中缀表达式正确,那么在字符界面上输出其后缀表达式,其中后缀表达式中两相邻操作数之间利用空格隔开;如果不正确,在字符界面上输出表达式错误提示。

测试数据输入:21+23G(12-6)输出:2123126-G+二、详细设计输入和输出的格式输入本程序可以将输入的四则运算表达式(中缀表达式)转换为后缀表达式输出后缀表达式为://输出结果的位置表达式的值为://输出结果的位置三、调试分析本次实验的难点主要是在建立二叉树的问题上。

关于如何把中缀表达式存入二叉树中,我参考了网上的一些方法,成功实现了目标,但是却遇到了一个问题,那就是不能处理小数,甚至两位或两位以上的整数。

因为如果采用字符数组来存储操作数,运算符合一位整数还可以处理,但对于两位数就就会出问题,最后我改进采用字符串数组来存储操作数,成功解决了问题。

另外在处理输入的非法表达式问题中,我也费了很大功夫,但总体问题不大。

四、测试结果五、用户使用说明(可选)1、运行程序时提示输入四则运算表达式本程序可以将中缀表达式转化为后缀表达式,并计算结果请输入四则运算表达式:输出后缀表达式为:表达式的值为:程序源代码(c++)#include<iostream>#include<string>#include<stack>#include<iomanip>constintMaG=100;usingnamespacestd;classNode{public:charch[MaG];//考虑到数值有时会是两位数,所以使用字符串数组NodeGlChild;NodeGrChild;Node(){strcpy(ch,"");lChild=rChild=NULL;}~Node(){if(lChild!=NULL)deletelChild;if(rChild!=NULL)deleterChild;}};staticintcount=0;staticchararray[MaG];//保存原始的中缀表达式staticcharstr[2GMaG];//保存后序遍历出来的字符串,为表达式求值提供方便staticintk=0;chargetOp(NodeGtemp);//temp指针保存每个结点,返回的是运算符NodeGcrtTree(NodeGroot);//传入根结点指针,返回根结点指针voidoutput(NodeGroot);//获得处理后的字符串boolisError(char);//判断字符是否有问题voiddeal();//对字符数组进行处理doublevalue(string);//计算后缀表达式,得到其结果。

长整数四则运算 实验报告

长整数四则运算 实验报告

“数据结构”课程设计报告长整数四则运算学生姓名:吴成杰徐文良指导教师:陈少军所在系:电子信息系所学专业:计算机科学与技术年级:2010计算机(1)班目录第1章需求分析 (1)1.1选题要求 (1)1.2选题背景和意义 (1)1.3选题目标 (2)1.4组员分配任务 (2)第2章概要分析 (2)2.1系统数据流图 (2)2.2原始数据 (3)2.3输出数据 (3)2.4对数据的处理 (3)2.5数据结构(存储方式) (4)2.6模块分析 (4)第3章详细设计 (4)第4章系统说明书 (11)第5章系统测试 (12)项目总结 (16)参考文献 (17)第1章需求分析1.1选题要求1、实现一个任意长度的整数进行四则运算的演示程序(1) 运算过程分步骤显示(2) 完成含有加法和减法的四则运算(3) 完成含有乘法和除法的四则运算(4) 包含括号的四则运算2、2个人对应完成2个人各自的任务1.2选题背景和意义(1)选题背景操作系统老师曾经布置我们做一道斐波拉契数列和求30的阶乘,但是计算的结果很大,还不知道该做样的存储,老师告诉我们需要用高精度数的知识能将计算的结果存储起来,数据结构老师也曾经布置过一个实验题,是计算长整数的加法的,但是长整数的位数是固定的。

于是我们试想计算任意长度的整数是不是能把所有的四则运算问题解决。

(2)选题意义我们选的这个课题能计算任意的四则运算,比如:1234567+7654321=8888888987654321-123456789=86419754123*456=5608884/42=2586-25*15+8*(9*2-144/12)=586-375+8*(18-12)=586-375+8*6=586-355+48=211+48=2591.3选题目标实现一个任意长度的整数进行四则运算的演示程序(1) 运算过程分步骤显示(2) 完成含有加法和减法的四则运算(3) 完成含有乘法和除法的四则运算(4) 包含括号的四则运算1.4组员分配任务我们组有两个成员,分别为吴成杰和徐文良,一个负责写主函数、函数整体的框架和写转换函数函数和对输入的字符进行处理,一个负责写出栈函数和写处理函数和拼接,程序出现错误,两个人一起在一起互相商量,修改。

实验报告长整数四则运算

实验报告长整数四则运算

实验报告:长整数四则运算实验者:唐怡04120082 题目:设计一个实现任意长的整数进行加法运算的演示程序一.需求分析1.本演示程序中,长整数为任意长的带符号的长整数的输入及求加法后输出的长整数形式为每四位一组,组间用逗号隔开,输入以“回车符”为结束标志。

2.程度执行的命令包括:1)构造整数1,2)构造整数2,3)做加法运算,4)结束3.测试数据(1)0;0;应输出“0”(2)-2345,6789;-7654,3211;应输出“-1,0000,0000”(3)-9999,9999;1,0000,0000,0000;应输出“9999,0000,0001”(4)1,0001,0001;-1,0001,0001;应输出“0”(5)1,0001,0001;-1,0001,0000;应输出“1”(6)-9999,9999,9999;-9999,9999,9999;应输出“-1,9999,9999,9998”(7)1,0000,9999,9999;1;应输出“1,0001,0000,0000”。

二.概要设计为实现上述程序功能,应以有序表实现长整数的存储,为此,需要抽象数据类型:有序表1.有序表的抽象数据类型定义为:ADT Dulinklist{数据对象:D={ai|ai为带符号整数,1,2,…,n,n>=0}数据关系:R1={<ai-1,ai>|ai-1,ai属于集合D,ai-1<ai,i=2,…..,n}基本操作:InitDulinklist(&)操作结果:构造一个空的有序表LDestroyDulinklist(&)初始条件:有序表L已存在操作结果:销毁有序表LDulinklistLength(L)初始条件:有序表L已存在操作结果:返回有序表L的长度DulinklistEmpty(L)初始条件:有序表L已存在操作结果:若有序表L为空表,则返回TUER,否则返回FALSEGetElem(L,pos)初始条件:有序表L已存在操作结果:若干1〈=POS〈=LENGTH(L),则返回有序表L中第POS个数据元素。

c语言四则运算实验报告

c语言四则运算实验报告

深圳大学实验报告课程名称: ________ C 语言实验 ________________实验名称: 100以内的四则运算游戏 _________学 院: ___________ 信息工程学院 ______________指导教师 ______________ 张金凤 __________________报告人: 王文杰 组号:]7 ________学号 2013130073 实验地点 教学楼D506实验时间: 2014 年 4 月 16 日提交时间: ___________ 2014.5.9 ____________________课程编号 1300050027一、实验目的一、学习和掌握c语言函数的泄义与调用:二、进一步掌握随机数、选择结构、循环控制、交互式输入输出等程序设计方法:三、进一步掌握c语言中的数组左义和引用方法:四、学习和掌握根据流程图进行模块化程序设计的思想*二、实验要求产生1到4之间的随机数,决定4则运算的符号,再产生两个0到99的随机数进行运算,并记录下做的题数以及正确的数目,当做题者输入n或N时退出程序并显示出完成题数及正确率。

int num2); int五、对流程图的简要说明:#include <std io. h> #include <stdlib. h> #include Htime. h" #include <conio. h> void max_min(int a, int b); randN1N2(int rN1f int rN2 ); rand0per4(); randL/ntlOO ();addLmt100(int num1vsubLmt100(int num1fmulLmt100(int num1fdivLmt100(int num1f/*主函数的功能如下:在主函数中调用上面定义的五个函数,在屏幕上随机循环出一道 100以内的四则运算题。

小学四则运算实验报告

小学四则运算实验报告

石家庄经济学院“高级语言程序设计”课程实习报告班级:试点2班姓名:贺迎春学号:410109030221日期:2011-10-19目录1.实习目的 (3)2.实习题目与程序功能 (3)3.算法设计 (3)4. 主要数据结构和标识符及其说明 (4)5. 程序运行实例 (5)6. 源程序清单 (6)7. 实习体会 (9)1.实习目的(1)掌握分支语句、循环语句的基本语法、语义。

(2)熟练使用if语句、case语句进行分支结构的程序设计、熟练使用for语句、repeat语句、while语句进行循环结构的程序设计。

(3)掌握嵌套的分支、循环结构。

(4)掌握基本的程序调试技能。

能够使用Trace Into、step over步进追踪,断点等控制程序的运行步骤,能够使用Watch监视表达式的值,并且点击project点击options点击compiler点击optimization把代码优化去掉,这样件事变量的之就能显示出来、添加条件断点等等。

(5)能够合理的设计程序的测试用例并验证程序的有效性能。

2.实习题目与程序功能实习题目:小学生的加减乘除以及混合运算的自动出题及评分系统。

功能描述:系统首先会给出提示信息,根据提示信息,当n=1时,系统会自动出10道十以内的加法练习题目并自动评分;当n=2时,系统会自动出10道十以内的减法练习题目并自动评分;当n=3时,系统会自动出10道十以内的乘法练习题目并自动评分;当n=4时,系统会自动出10道十以内的除法练习题目并自动评分;当n=5时,系统会自动出10道十以内的混合运算题目并自动评分;当n=6时,结束练习,退出系统;性能要求:要保证程序有足够的健壮性。

3.算法设计(1)分析①此系统的使用对象使小学生,所以加法、减法、乘法以及除法都是10以内的整数,并没有涉及到小数的问题。

小学生并未学习负数,所以当减法自动出题时,把答案为负数的情况删掉;而除法,则是利用10以内的整数相乘采用逆思维的方法来生成的。

C语言实验报告四则运算

C语言实验报告四则运算

《C语言》课内实验报告学生姓名:及学号:学院:班级:课程名称:C语言实验题目:实验二选择结构程序设计指导教师姓名及职称:年月日一、实验目的1.掌握逻辑表达式和if语句、嵌套的if语句、switch语句和break语句的格式、语义。

2.掌握选择结构程序设计方法。

二、实验内容编写程序实现两个数的四则运算,要求从键盘输入进行运算的两个数字以及相应的运算符('+'、'-'、'*'、'/'),程序给出算数表达式及运算结果。

(如下图所示,要求使用if语句和switch语句两种方法实现)三、实验结果1、流程图2、源程序(1)使用if语句#include <stdio.h>void main(){float a,b;char c;printf("please input two numbers:");scanf("%f%f",&a,&b);getchar();printf("\nplease input the operator:");//fflush(stdin);scanf("%c",&c);printf("\n");if(c=='+')printf("%10.2f+%10.2f=%10.2f\n",a,b,a+b);else if (c=='-')printf("%10.2f-%10.2f=%10.2f\n",a,b,a-b);else if (c=='*')printf("%10.2f*%10.2f=%10.2f\n",a,b,a*b);else if (c=='/')printf("%10.2f/%10.2f=%10.2f\n",a,b,a/b);elseprintf("Input error!\n");}(2)使用switch语句#include <stdio.h>void main(){float a,b;char c;printf("please input two numbers:");scanf("%f%f",&a,&b); //输入a,b的值getchar();printf("\nplease input the operator:"); //输入操作符scanf("%c",&c);printf("\n");switch(c) //判断输入操作符{case '+': //若操作符为'+',输出a+b printf("%10.2f+%10.2f=%10.2f\n",a,b,a+b);break;case '-': //若操作符为'-',输出a-b printf("%10.2f-%10.2f=%10.2f\n",a,b,a-b);break;case '*': //若操作符为'*',输出a*b printf("%10.2f*%10.2f=%10.2f\n",a,b,a*b);break;case '/': //若操作符为'/',输出a/b printf("%10.2f/%10.2f=%10.2f\n",a,b,a/b);break;default:printf("Input error!\n");}}2、运行结果输入12、13以及+,得到结果如下:输入12、13以及-,得到结果如下:输入12、13以及*,得到结果如下:输入12、13以及/,得到结果如下:输入12、13以及a,得到结果如下:3、结果分析题目要求编程实现两个数的四则运算,因此只需判断输入的操作符为四则运算中的哪一个,编程时可以使用if语句或者switch语句实现判断过程。

数据结构c语言版算术四则混合运算实验报告

数据结构c语言版算术四则混合运算实验报告

数据结构c语言版算术四则混合运算实验报告一、引言在计算机科学领域,算术四则运算是最基本的运算之一。

本实验旨在通过使用C语言编写程序,实现算术四则运算的混合运算功能。

通过该实验,我们可以提高对数据结构的理解,并掌握在C语言中实现算术四则混合运算的方法。

二、实验目的1. 理解算术四则运算的基本原理;2. 掌握数据结构在算术四则运算中的应用;3. 使用C语言编写程序,实现算术四则混合运算功能。

三、实验方法1. 首先,我们需要定义并实现一个栈数据结构,用于存储运算符和操作数;2. 然后,通过读取用户输入的表达式,将其中的运算符和操作数依次入栈;3. 在入栈的过程中,我们需要判断运算符的优先级,以确保正确的运算顺序;4. 最后,通过出栈的方式,按照正确的运算顺序进行运算,并输出结果。

四、实验步骤1. 定义并实现栈数据结构,包括入栈、出栈等基本操作;2. 读取用户输入的表达式,并将其中的运算符和操作数依次入栈;3. 根据运算符的优先级,确定出栈的顺序,并进行相应的运算;4. 将运算结果入栈,继续进行下一轮的运算,直到表达式中的所有运算符和操作数都被处理完毕;5. 最后,将最终的运算结果出栈,并输出。

五、实验结果通过本实验,我们成功实现了算术四则混合运算的功能。

经过多组测试,程序能够正确处理各种复杂的运算表达式,并给出正确的结果。

六、实验总结通过本次实验,我们进一步加深了对数据结构的理解,并成功将其应用于算术四则混合运算中。

我们掌握了C语言中实现算术四则混合运算的方法,并通过编写程序实现了该功能。

通过本次实验,我们不仅提高了对数据结构的应用能力,还提升了编程能力和问题解决能力。

在今后的学习和工作中,我们将继续深入研究数据结构和算法,不断提升自己的编程技术,为解决实际问题提供更好的解决方案。

七、致谢感谢指导老师对本实验的支持和指导,感谢实验室的同学们在实验过程中给予的帮助和建议。

本次实验的顺利完成离不开你们的支持与帮助。

实验四小学生四则运算需求分析结对报告

实验四小学生四则运算需求分析结对报告

实验四⼩学⽣四则运算需求分析结对报告任务⼀:实践软件需求获取⽅式(1)在线咨询⽼师层⾯:特意找到了母校的⽼师,由于双⽅地处较远所以采⽤电话等⽅式进⾏的咨询。

(2)实地访问学⽣层⾯:询问了⼏位⼩学⽣,主要是家教的时候顺便访问的。

(3)调查问卷1.⽤户⾓⾊本次调查中,学⽣和家长⼈数基本上相同,⽼师相⽐于其他两个⼈数较少。

2.学⽣所在年级(包括教师的学⽣、家长的孩⼦)在本次调查中⼀年级的学⽣占⼤多数,其他年级的⼈数基本上⼀致。

3.学⽣通常使⽤电脑及是否使⽤四则运算的系统情况:通过调查发现⼤多数⼩学⽣在⽇常⽣活中还是会使⽤电脑,并且能够接受四则运算这类软件,说明⼩学⽣四则运算的软件有很⼤的市场。

4.运算的难易程度:通过分析柱状图发现很少有⼈选择难度⼤的平⽅运算,说明在开发软件的时候应该在难易程度的设置上要费⼤⼒⽓,难度应该适中,适当的应当设置⼀些简单题来提⾼学⽣的信⼼。

5.运算题数量:通过分析圆环图不难发现,⼤多数⼈(⽆论学⽣、家长还是⽼师)建议题量应该设置少⼀些,适当的让学⽣进⾏休息,学⽣如果想提⾼能⼒可进⾏多轮测试,这样既照顾到了优⽣,也照顾到了后进⽣。

6.软件功能: 出题功能 错误显⽰功能 错题重测功能 ⿎励功能 专项训练功能 监督功能通过调查及分析发现,学⽣希望四则运算系统具有⾃动出题功能,错误显⽰及重测功能,⿎励功能,⼤多数⼈认为混合型运算相⽐与专项训练对学⽣更有利,对于监督功能的不同意见基本上平衡,所以我认为可以将监督功能设置为可选择的功能,除此之外,还有⼈提出了应当设置登陆界⾯,⽼师检查功能,成绩应当保证准确性还要及时统计等。

7. 页⾯风格及背景:四则运算系统是针对⼩学⽣的,因此在设置界⾯的时候应当结合⼩学⽣的性格特征,采⽤⼩动物其他具有童趣的界⾯或颜⾊。

任务⼆:任务三:⽬录1.引⾔ (2)1.1 编写⽬的 (2)1.2 背景 (2)1.3 参考资料 (2)2.任务概述 (2)2.1 ⽬标 (2)2.2 针对⽤户 (4)2.3 假定和约束 (4)3.需求规定 (5)3.1 对功能的规定 (5)3.1.1 主要功能 (5)3.1.2 功能描述(详细) (5)3.1.3 ⽤户界⾯ (6)3.1.4 ⽤户场景 (10)3.2 对性能的规定 (12)3.2.1 精度 (12)3.2.2 时间特性要求 (13)3.2.3 灵活性 (13)3.3 输⼊输出要求 (13)3.4 数据管理能⼒要求 (13)3.4.1出题及答案表 (13)3.4.2 运算符号表 (14)3.4.3 符号优先级处理表 (14)3.4.4 得分计算表 (14)3.5 故障处理要求 (15)3.6 故障处理要求 (15)3.7 其他要求 (15)4.运⾏环境规定 (15)4.1 设备 (15)4.2 开发环境 (16)4.3 接⼝ (16)4.4 控制 (16)5.验收标准 (16)1.引⾔1.1 编写⽬的 本⽂档的⽬的是详细地介绍《⼩学⽣四则运算练习软件》所包含的需求,使得⽤户能确认该软件的确切需求以及开发⼈员能够根据需求设计编码完善产品,以下叙述将结合⽂字描述,流程图,界⾯原型以及类图等来描述《⼩学⽣四则运算练习软件》的功能,性能,⽤户界⾯,运⾏环境,外部接⼝以及针对⽤户操作给出的各种响应。

简易计算器实验报告

简易计算器实验报告

简易计算器实验报告一、实验目的本次实验的目的是设计并实现一个简易计算器,能够进行基本的四则运算(加、减、乘、除),以及处理括号的优先级运算,提高对程序设计和逻辑思维的理解与应用能力。

二、实验原理1、四则运算的优先级规则在数学运算中,先计算括号内的表达式,然后按照先乘除后加减的顺序进行计算。

乘除法的优先级高于加减法,如果在同一级运算中,按照从左到右的顺序进行。

2、数据结构的选择使用栈(Stack)数据结构来存储操作数和运算符。

栈具有先进后出的特点,非常适合处理表达式中的括号和优先级。

3、算法思路首先,将输入的表达式进行解析,将数字和运算符分别存储到不同的栈中。

然后,根据运算符的优先级进行计算,将计算结果重新压入栈中,直到表达式计算完毕。

三、实验设备及环境1、编程工具:选择了 Python 语言作为主要的编程工具,使用PyCharm 集成开发环境进行代码编写和调试。

2、操作系统:Windows 10 操作系统。

四、实验步骤1、定义数据结构定义两个栈,一个用于存储操作数(operandStack),一个用于存储运算符(operatorStack)。

2、表达式解析遍历输入的表达式字符串,将数字转换为整数并压入操作数栈,将运算符压入运算符栈。

遇到左括号直接压入运算符栈,遇到右括号则进行括号内的运算。

3、运算处理当运算符栈不为空时,取出栈顶的运算符和两个操作数进行计算。

根据运算符的优先级进行相应的运算,将结果压入操作数栈。

4、最终结果当表达式解析完毕后,操作数栈中的唯一元素即为表达式的计算结果。

五、代码实现```pythonclass SimpleCalculator:def __init__(self):selfoperandStack =selfoperatorStack =def calculate(self, expression):for char in expression:if charisdigit():selfoperandStackappend(int(char))elif char in '+/()':if char =='(':selfoperatorStackappend(char)elif char ==')':while selfoperatorStack-1!='(':operator = selfoperatorStackpop()operand2 = selfoperandStackpop()operand1 = selfoperandStackpop()result = selfperformOperation(operand1, operand2, operator)selfoperandStackappend(result)selfoperatorStackpop()else:while selfoperatorStack and selfhasHigherPrecedence(selfoperatorStack-1, char):operator = selfoperatorStackpop()operand2 = selfoperandStackpop()operand1 = selfoperandStackpop()result = selfperformOperation(operand1, operand2, operator)selfoperandStackappend(result)selfoperatorStackappend(char)while selfoperatorStack:operator = selfoperatorStackpop()operand2 = selfoperandStackpop()operand1 = selfoperandStackpop()result = selfperformOperation(operand1, operand2, operator)selfoperandStackappend(result)return selfoperandStackpop()def hasHigherPrecedence(self, op1, op2):if op1 in '/' and op2 in '+':return Trueelif op1 in '+' and op2 in '+':return Falseelif op1 in '/' and op2 in '/':return Falsereturn Falsedef performOperation(self, operand1, operand2, operator):if operator =='+':return operand1 + operand2elif operator =='':return operand1 operand2elif operator =='':return operand1 operand2elif operator =='/':if operand2 == 0:raise ValueError("除数不能为 0")return operand1 / operand2if __name__ =="__main__":calculator = SimpleCalculator()expression ="2 + 3 (4 1) / 2"result = calculatorcalculate(expression)print("计算结果:", result)```六、实验结果与分析1、测试用例及结果输入表达式:"2 + 3 4",计算结果:14输入表达式:"(2 + 3) 4",计算结果:20输入表达式:"5 2 3",计算结果:-1输入表达式:"10 / 2 + 1",计算结果:62、结果分析对于简单的四则运算表达式,计算器能够正确计算出结果。

数据结构 四则运算表达式求值 实验四报告

数据结构 四则运算表达式求值 实验四报告

为后缀表达式。
(3) 计算模块:计算后缀表达式的值。
(4) 输出模块:输出后缀表达式及其计算结果。
三、详细设计
物理数据类型
因为表达式由用户输入,存储操作符和操作数的栈长度不能确定,所以使用链式堆栈存
储这些变量。
堆栈基本操作如下:
bool push(const Elem& item) //压栈
{
top=new link<Elem>(item,top);
表达式。
运算时,运算符栈顶弹栈,然后获取操作数栈顶和次栈顶的值进行运算,把运算结果创
建一个叶子结点保存,把结点压回操作数栈中。如果操作数栈或运算符栈不为空时,继续进
行运算操作。最后操作数栈中的值,就是运算结果。
程序的流程
(1) 输入模块:输入把原始的中缀表达式的操作数和操作字符存储为一个字符串。 (2) 处理模块:把字符串逐个分解,调整各项字符的顺序,分解的中缀表达式转换
EvalExpr(ch[i],S); //弹栈,运算部分
i++;
}
}
if(S.length()==1)
S.pop(result);
}
(2)、 转换实数
int EvalValue(char* ch,Stack<double> &S)
{
int i=0;
double result=0;
char a;
a=ch[i];
}
bool topValue(Elem& it) const //获取栈顶的值
{
if(size==0) return false;
it=top->elem;
return true;

(完整word版)长整数四则运算实验报告

(完整word版)长整数四则运算实验报告

一、需求分析设计一个实现任意长的整数间进行四则运算的程序,要求完成长整数的加、减运算,乘除运算可选做。

在这里长整数没有范围限制,可任意长。

运算后的进位、借位等都要进行正确处理,可实现动态的输入,实时的输出。

测试数据:0、0;输出“0”2345,6789、-7654,3211;输出“1,0000,0000”1,0000,0000,0000、9999,9999;输出“9999,0000,0001”1,0001,0001、;1,0001,0001;输出“0”自选数据:1,1111;1,1111 输出“0”二、概要设计1、数据结构利用双向循环链表来实现对长整数的存储。

选择该数据结构来完成长整数的加减运算是因为a.要对长整数进行运算,需要对长整数进行存储,选择用链表对长整数存储。

b.存储的顺序是从左到右,运算的顺序则是从右到左,为操作方便选择循环链表。

c.在运算过程中有进位和借位的操作。

2、使用算法三、详细设计typedef struct DoubleNode //定义链表元素void InitNode(DLNode **head) //初始化链表int InsertNode(DLNode *head,int n,DataType x) //向链表第N个位置插入元素Xint digit(int n) //判断整数N有几位void PrintNode(DLNode *head) //打印链表void DestroyNode(DLNode **head)//销毁链表void add(DLNode *h1,DLNode *h2) //两数相加void jian(DLNode *h1,DLNode *h2) //两数相减int main() //入口函数四、调试分析由于在程序设计时,对于指针的不了解,编程时使用双重指针,无形中给自己增添了更多麻烦。

老师在检查的过程中指出并教导了这一点。

五、测试结果1、输入0和0做加法运算,输出“0”,结果如下图:2、输入2345,6789和-7654,3211做减法运算,输出“1,0000,0000”,结果如下图:3、输入1,0000,0000,0000和9999,9999做减法运算,输出“9999,0000,0001”,结果如下图:4、输入1,0001,0001和1,0001,0001做减法运算,输出“0”,结果如下图:5、输入1,1111和1,1111做减法运算,输出“0”结果如下图:六、心得体会本次实验主要是针对双向链表的练习,通过这次试验我们大家对于双向循环链表有了更深刻的记忆。

深圳大学C程序设计Lab Assignment3实验报告(四则运算)

深圳大学C程序设计Lab Assignment3实验报告(四则运算)

附件(四)本文档仅限于学习交流,禁止抄袭。

程序结果截图非本人信息,请自行修改。

深圳大学实验报告课程名称:C程序设计实验名称:Lab Assignment 3学院:信息工程学院专业:指导教师:报告人:报告人学号:班级:实验时间:报告提交时间:教务处制四、实验结果与数据分析:1.首先,这次实验把我最近学的知识穿插了起来,让我进一步掌握了随机数、选择结构、循环控制、交互式输入输出等程序设计方法。

2.我认识到了写代码的重要性,例如空格,空行,缩进等细节。

因为做到了这些细节,程序一旦发生了错误,修改的时候很容易下手,一目了然,别人看着也舒服。

3.我学会了用visio软件画流程图,这个软件简单快捷易操作。

(注:“指导教师批阅意见”栏请单独放置一页)指导教师批阅意见:实验报告内容完整性(20分)实验数据准确性(程序与程序运行结果)(30分)实验结果与数据分析(20分)实验报告(格式规范、按时完成)(20分)实验态度(实验课考勤、实验表现)(10分)完整20 较完整15不完整10准确30较准确20不够准确10正确20较正确10不正确规范20较规范15不够规范10好10较好5一般2说明:说明:说明:说明:说明:。

数据结构实验报告——四则运算表达式求值

数据结构实验报告——四则运算表达式求值

数据结构实验报告——四则运算表达式求值实验五四则运算表达式求值一.问题描述:四则运算表达式求值,将四则运算表达式用中缀表达式,然后转换为后缀表达式,并计算结果。

二.基本要求:使用二叉树来实现。

三.实现提示:利用二叉树后序遍历来实现表达式的转换,同时可以使用实验二的结果来求解后缀表达式的值。

输入输出格式:输入:在字符界面上输入一个中缀表达式,回车表示结束。

输出:如果该中缀表达式正确,那么在字符界面上输出其后缀表达式,其中后缀表达式中两相邻操作数之间利用空格隔开;如果不正确,在字符界面上输出表达式错误提示。

测试实例:输入:21+23* (12-6 )输出:21 23 12 6 -*+四.设计概要用二叉树表示表达式:若表达式为数或简单变量,则相应二叉树中仅有一个根结点,其数据域存放该表达式信息若表达式= (第一操作数)(运算符)(第二操作数),则相应的二叉树中以左子树表示第一操作数,右子树表示第二操作数,根结点的数据域存放运算符(若为一元算符,则左子树空)。

操作数本身又为表达式.后缀遍历二叉树码实现和静态检查上机调试及测试数据的调试五.源程序:#include#include#include#include#include#include#define STACK_INIT_SIZE 100#define DATA_SIZE 10#define STACKINCREMENT 10#define OK 1#define TRUE 1#define FALSE 0#define ERROR 0#define OVERFLOW -2using namespace std;typedef float SElemtype;typedef int Status;typedef char * TElemType;typedef struct BiTNode {TElemType data;int len; //data字符串中字符的个数struct BiTNode * lchild, * rchild;}BiTNode, *BiTree;typedef struct{SElemtype *base;SElemtype *top;int stacksize;} SqStack;Status IsDigital(char ch)if(ch>='0'&&ch<='9'){return 1; //是数字字母}return 0; //不是数字字母}int CrtNode(stack &PTR, char *c){BiTNode * T;int i=0;T = (BiTNode *)malloc(sizeof(BiTNode));T->data = (char *)malloc(DATA_SIZE*sizeof(char));while(IsDigital(c[i])){T->data [i] = c[i];i++;}T->len = i;T->lchild = T->rchild = NULL;PTR.push (T);return i;}void CrtSubTree(stack &PTR, char c){BiTNode * T;T = (BiTNode *)malloc(sizeof(BiTNode));T->data = (char *)malloc(DATA_SIZE*sizeof(char));T->data [0] = c;T->len = 1;T->rchild = PTR.top(); //先右子树,否则运算次序反了PTR.pop ();T->lchild = PTR.top();PTR.pop ();PTR.push (T);}char symbol[5][5]={{'>', '>', '<', '<', '>'}, //符号优先级{'>', '>', '<', '<', '>'},{'>', '>', '>', '>', '>'},{'>', '>', '>', '>', '>'},{'<', '<', '<', '<', '='}};int sym2num(char s) //返回符号对应优先级矩阵位置{switch(s){case '+': return 0; break;case '-': return 1; break;case '*': return 2; break;case '/': return 3; break;case '#': return 4; break;}}char Precede(char a, char b) //返回符号优先级{return(symbol[sym2num(a)][sym2num(b)]);void CrtExptree(BiTree &T, char exp[]){//根据字符串exp的内容构建表达式树Tstack PTR;//存放表达式树中的节点指针stack OPTR;//存放操作符char op;int i=0;OPTR.push ('#');op = OPTR.top();while( !((exp[i]=='#') && (OPTR.top()=='#')) ) //与{ if (IsDigital(exp[i])){//建立叶子节点并入栈PTRi+=CrtNode(PTR, &exp[i]);}else if (exp[i] == ' ')i++;else{switch (exp[i]){case '(': {OPTR.push (exp[i]);i++;break;}case ')': {op = OPTR.top (); OPTR.pop ();while(op!='('){CrtSubTree(PTR, op);op = OPTR.top (); OPTR.pop ();}//end whilei++;break;}default: //exp[i]是+ - * /while(! OPTR.empty ()){op = OPTR.top ();if (Precede(op, exp[i])=='>'){CrtSubTree(PTR, op);OPTR.pop ();}if(exp[i]!='#'){OPTR.push (exp[i]);i++;}break;}}//end switch}//end else}//end whileT = PTR.top();PTR.pop ();}void PostOrderTraverse(BiTree &T, char * exp ,int &count){//后序遍历表达式树T,获取树中每个结点的数据值生成逆波兰表达式exp //T是表达式树的根节点;字符串exp保存逆波兰表达式;count保存exp中字符的个数//后序遍历中,处理根结点时,依据T->len的值,把T->data中的字符依次添加到当前exp字符串的尾端//添加完T->data后,再添加一个空格字符,同时更新count计数器的值。

长整数四则运算实验报告

长整数四则运算实验报告

数据结构课内实验报告书一、实验题目:长整数四则运算二、实验目的:通过本次实验,熟练掌握链表的存储结构及其各种基本运算,体会链表操作的特点。

三、实验要求:设计一个实现任意长的整数进行加法运算的演示程序。

要求:利用双向循环链表实现长整数的存储,每个结点含一个整形变量。

任何整形变量的范围是-(215 - 1)~(215 - 1)。

输入和输出形式:按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开。

四、测试数据:(1)0;0;应输出“0”。

(2)-2345,6789;-7654,3211;应输出“-1,0000,0000”。

(3)-9999,9999;1,0000,0000,0000;应输出“9999,0000,0001”。

(4)1,0001,0001;-1,0001,0001;应输出“0”。

(5)1,0001,0001;-1,0001,0000;应输出“1”。

(6)-9999,9999,9999;-9999,9999,9999;应输出“1,9999,9999,9998”。

(7)1,0000,9999,9999;1;应输出“1,0001,0000,0000”。

五、设计与实现过程(1)存储结构的定义typedef struct int72 {int i[4];} INT72;INT72 a,b,c;typedef struct LinkNode{int data; //记录每个节点的整数(小于10000)LinkNode *next, *pre; //记录下一个节点的地址 *pre; //记录前一个节点的地址}linklist;(2)主要算法的描述void addtwo()//节点多的作为被加数,少的作为加数,实现整数绝对值大的加小的//默认head0存的整数绝对值比head1大{int s=0,m1=head0->data,m2=head1->data;m1=(head0->pre->data/abs(head0->pre->data)); //head0的符号m2=(head1->pre->data/abs(head1->pre->data)); //head1的符号linklist *p=head0->pre->pre,*q=head1->pre->pre;result->data=head0->pre->data; //存结果的节点数和符号while(q!=head1->pre)//head0存的整数绝对值比head1大,即head0的节点数大于或等于head1 {currptr=(linklist *)malloc(sizeof(linklist));currptr->data=(p->data)*m1+(q->data)*m2+s; //两整数相加if((m1*m2)>0) //如果符号相同{if(abs(currptr->data)-10000>=0) //相加后超过10000,则进位{s=currptr->data/10000;currptr->data=abs(currptr->data)%10000;}else //abs(currptr->data)-10000<0,不进位{s=0;currptr->data=abs(currptr->data);}}else if(m1>0&&m2<0)//符号不同,在此相当于实现两个正整数相减{s=0;if(currptr->data<0) //小于0,向前一位借1{currptr->data+=10000;s=-1;}}else if(m1<0&&m2>0)//符号不同,在此相当于实现负整数加上正整数{s=0;if(currptr->data>0) //大于0,{currptr->data=10000-currptr->data;s=1;}else currptr->data=abs(currptr->data);}currptr->next=result; //存入链表currptr->pre=result->pre;result->pre->next=currptr;result->pre=currptr;result=currptr;p=p->pre;q=q->pre;}//当head0节点数比head1长时,继续建链while(p!=head0->pre){currptr=(linklist *)malloc(sizeof(linklist)); currptr->data=p->data+s;s=currptr->data/10000;if((m1*m2)>0){if(abs(currptr->data)-10000>=0){s=currptr->data/10000;currptr->data=abs(currptr->data)%10000;}else {s=0;currptr->data=abs(currptr->data);} }else if(m1>0&&m2<0){s=0;if(currptr->data<0){currptr->data+=10000;s=-1;}}else if(m1<0&&m2>0){s=0;if(currptr->data>0){currptr->data=10000-currptr->data;s=1;}else currptr->data=abs(currptr->data);}currptr->data=abs(currptr->data)%10000; currptr->next=result;currptr->pre=result->pre;result->pre->next=currptr;result->pre=currptr;result=currptr;p=p->pre;}if(s!=0) //处理相加后,进位问题{currptr=(linklist *)malloc(sizeof(linklist));currptr->data=abs(s);currptr->next=result;currptr->pre=result->pre;result->pre->next=currptr;result->pre=currptr;result=currptr;result->pre->data=m1*(abs(result->pre->data)+1);}}六、技巧与体会在编写程序中尽量做到独立完成、对于自己想要完成的问题要主动编程完成、这样自己是一个很大的提升、也能学到很多的知识、熟练编程!以后要加强动手时间能力、多与同学交流算法精髓!。

工作报告 四则运算

工作报告 四则运算

工作报告:四则运算的应用与实践一、引言四则运算是数学中的基本运算,包括加法、减法、乘法和除法。

这些运算在日常生活和工作中有着广泛的应用。

本工作报告将探讨四则运算在实际工作中的应用,以及如何提高运算效率和准确性。

二、四则运算在日常生活中的应用1.财务计算:在个人或企业的财务计算中,四则运算是最基本的运算方式。

例如,计算收入、支出、利润等都需要用到四则运算。

2.统计计算:在进行数据分析和统计时,四则运算也是必不可少的。

例如,计算平均值、求和、计算百分比等都需要用到四则运算。

3.科学计算:在物理学、化学、生物学等科学领域,四则运算也是常用的计算工具。

例如,计算物质的密度、浓度、反应速率等都需要用到四则运算。

三、提高四则运算的效率和准确性1.掌握基础:熟练掌握四则运算的基本规则和运算法则是提高运算效率和准确性的基础。

2.草稿纸使用:在运算过程中,合理使用草稿纸,将步骤详细记录下来,有助于核对结果,提高准确性。

3.练习与反思:通过大量的练习,掌握常见题型和解题技巧,同时反思错题原因,总结经验教训。

4.使用计算器:对于一些复杂的计算,可以使用计算器辅助计算,提高运算效率。

5.团队讨论:与其他人一起讨论和核对答案,有助于发现自己的错误,提高准确性。

四、实际案例分析以某公司财务部门的四则运算为例,分析其在实际工作中的应用。

通过案例分析,总结经验教训,为其他部门或企业在应用四则运算时提供借鉴。

五、结论四则运算是数学中的基本运算,具有广泛的应用价值。

掌握四则运算的基本规则和运算法则,合理使用草稿纸,通过大量的练习和反思,以及使用计算器和团队讨论等方法,可以提高运算效率和准确性。

在实际工作中,需要根据具体情况选择合适的运算方法和工具,以更好地服务于工作和生活。

四则运算实验报告

四则运算实验报告
a=rand()%100+1;/*在1~100随机取一个数*/
b=rand()%100+1;/*在1~100随机取一个数*/
printf("%d+%d=",a,b);
s=a+b;
scanf("%d",&ans1);//扫描用户输入答案//
if(ans1==s)
{
printf("Very Good!\n");
if(ans2==s)
{
printf("Very Good!\n");
count++;
}
else
{printf("Wrong!!!\n");}
}
}
printf("***正确率为%.0f%%***\n",100.0*count/N);
}
count,a,b,j,ans1,ans2用法与加法运算函数相同;N仍为10,作用相同;仍需srand((unsigned)time(NULL))使随机数a,b在每次运行中保持不同,用户在退出后再次进入并选择相同种类运算时,程序给出的数不会与先前给出的数相同;
整体功能:实现减法运算,并作出批改结果及正答率。
乘法运算函数
h();
void h()//乘法运算函数//
{
int count=0,j,a,b,ans1,ans2,s;
for(j=1;j<=N;j++)
{srand((unsigned)time(NULL));
a=rand()%100+1;
b=rand()%100+1;
while(a+b<201)//保证给出的是整除运算//

工作报告 四则运算

工作报告 四则运算

工作报告四则运算本周工作报告尊敬的领导:我在这里向您汇报本周的工作情况。

本周的主要任务是进行四则运算的研究和分析,我已经完成了相关工作,并在此向您汇报。

在进行四则运算的研究时,我首先回顾了数学课本中有关四则运算的基本知识。

四则运算包括加法、减法、乘法和除法,是数学中最基本的运算方式。

通过对这些运算符号的理解和掌握,我们能够进行数值计算和推理,对于解决实际问题非常重要。

在深入了解四则运算的基础知识后,我开始研究了四则运算在实际问题中的应用。

我发现四则运算在日常生活中无处不在。

例如,在购物时计算商品的总价、在做饭时计算食材的用量、在做财务报表时计算收入和支出等等。

四则运算不仅仅是数学领域的基础,还是我们日常生活中必不可少的技能。

接下来,我对四则运算的计算规则进行了探索。

在加法和乘法中,交换律和结合律是两个重要的计算规则。

例如,对于两个数a和b,交换律表示a+b=b+a,乘法也是同样的道理。

而结合律则指的是对于三个数a、b和c,a+(b+c)=(a+b)+c,乘法同样适用。

通过深入研究这些计算规则,我更好地理解了四则运算的本质和运算过程。

除此之外,我还尝试了一些四则运算的拓展问题。

例如,我研究了如何解决含有括号的四则运算式,以及如何处理连续计算的问题。

这些拓展问题不仅提高了我的计算能力,也锻炼了我的逻辑思维能力。

通过本周的工作,我对四则运算有了更深入的理解,不仅明白了其基本概念和运算规则,也了解了其在实际生活中的应用。

我相信,在今后的工作中,这些知识和技能将会对我有很大的帮助。

最后,我要感谢领导对我的支持和关心,在您的指导下,我才能取得如此丰硕的成果。

同时,我也会继续努力学习,不断提升自己的能力,为公司的发展做出更大的贡献。

谢谢!此致敬礼。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验3四则运算表达式求值背景在工资管理软件中,不可避免的要用到公式的定义及求值等问题。

对于数学表达式的计算,虽然可以直接对表达式进行扫描并按照优先级逐步计算,但也可以将中缀表达式转换为逆波兰表达式,这样更容易处理。

问题描述四则运算表达式求值,将四则运算表达式用中缀表达式,然后转换为后缀表达式,并计算结果。

基本要求使用二叉树来实现。

实现提示利用二叉树后序遍历来实现表达式的转换,同时可以使用实验2的结果来求解后缀表达式的值。

输入输出格式:输入:在字符界面上输入一个中缀表达式,回车表示结束。

输出:如果该中缀表达式正确,那么在字符界面上输出其后缀表达式,其中后缀表达式中两相邻操作数之间利用空格隔开;如果不正确,在字符界面上输出表达式错误提示。

选作内容(1)在输入输出方式上要求使用:输入:将中缀表达式存于文本文件中,程序从该文本文件中读出表达式。

输出:如果该中缀表达式正确,则将后缀表达式输出到该文件中原表达式的后面,它们之间用“---”后相连;如果不正确,请在输出表达式错误提示到该文件原表达式的后面,它们之间用“---”相连。

(2) 利用堆栈来实现中缀表达式转换为后缀表达式。

测试用例输入:21+23*(12-6)输出:21 23 12 6 -*+程序代码:#include <iostream>#include <string.h>using namespace std;#define SIZE 100#define STACKINCREMENT 10template<class T>//栈class stack{public:void InitStack() {S.base = (T *)malloc(SIZE * sizeof(T));if(!S.base) exit(0);S.top = S.base;S.stacksize = SIZE;}void DestroyStack(){free(S.base);}void ClearStack(){S.top = S.base;}bool StackEmpty(){if(S.top == S.base) return true;else return false;}int StackLength(){return (S.top - S.base);}bool GetTop(T &t){if(S.top != S.base){t = *(S.top - 1);return true;}else return false;}void Push(T t){if(S.top - S.base >= S.stacksize){S.base = (T *)realloc(S.base,(S.stacksize + STACKINCREMENT) * sizeof(T));if(!S.base) exit(0);S.top = S.base + S.stacksize;S.stacksize += STACKINCREMENT;}*S.top = t;S.top++ ;}bool Pop(T &t){if(S.top == S.base) return false;else S.top-- ;t = *S.top ;return true;}private:struct SqStack{T *base;T *top;int stacksize;}S;};class BiTree{private:struct BiTreeNode{char OPT[10];BiTreeNode *lchild,*rchild;};BiTreeNode *T; //T是根结点int index; //index是后缀表达式转换二叉树时的索引int number_of_point ;//销毁一颗树void DestroyTree(BiTreeNode *T){if(T){DestroyTree(T->lchild);DestroyTree(T->rchild);free(T);}}void DestroyTree(){DestroyTree(T);}//1表示栈顶优先级高于待入栈的元素int compare(char a,char b){ //定义了任意两个运算符的优先级if(a == '(' && b == ')') return 0;else if((a == '+' && b == '*') || (a == '+' && b == '/') || (a == '-' && b == '*') || (a == '-' && b == '/')|| (a != ')' && b == '(') || (a == '(' && b != ')'))return -1;else return 1;}//递归构造start,end分别是一个式子开始值和结束值的索引/*递归构造中缀表达式转化为的二叉树(利用栈) */void InorderCreate(BiTreeNode *&T,char str[30][10],int start,int end){ if(start == end) { //递归终止if(!(T = (BiTreeNode *)malloc(sizeof(BiTreeNode)))) exit(0);strcpy(T->OPT,str[start]);T->lchild = NULL;T->rchild = NULL;}else{stack<char> opt;stack<int> num;num.InitStack();opt.InitStack();char last;int index;int a;bool jump = false;for(int i = start;i <= end;i++) { //begin求解优先级最小的一个运算符if(jump) break;number_of_point = 0 ;if(IsNumber(str[i][0]) || str[i][0] == '-' &&IsNumber(str[i][1]) )continue;else{char c = str[i][0];char b;if(i == start && c == '(') {start += 1;continue;}else if(opt.StackEmpty() || (opt.GetTop(b) && compare(b,c) == -1)){opt.Push(c);num.Push(i);}else{if(c != ')'){opt.Pop(b);num.Pop(a);if(!opt.StackEmpty()){opt.GetTop(b);if(compare(b,c) == 1){opt.Pop(b);num.Pop(a);opt.Push(c);num.Push(i);}else{opt.Push(c);num.Push(i);}}else{opt.Push(c);num.Push(i);}}else{for(opt.GetTop(b);compare(b,c) != 0;opt.GetTop(b)){opt.Pop(b);num.Pop(a);if(opt.StackEmpty()){opt.Push(b);num.Push(a);end -= 1;jump =true;break;}}if(compare(b,c) == 0) {opt.Pop(b);num.Pop(a);}}}}} //end,得到的是该步中的根结点字符last及其索引indexopt.Pop(last);num.Pop(index);if(!opt.StackEmpty()){opt.Pop(last);num.Pop(index);}opt.DestroyStack();num.DestroyStack();if(!(T = (BiTreeNode *)malloc(sizeof(BiTreeNode)))) exit(0);T->OPT[0] = last;T->OPT[1] = '\0';InorderCreate(T->rchild,str,start,index-1);InorderCreate(T->lchild,str,index+1,end);}}bool IsNumber(char a){ //判断一个字符是否为数值形式的if( a == '.' && number_of_point == 0 ) {number_of_point ++ ;return true;}else if('0' <= a && a <= '9') return true ;else return false;}//递归求解树表示的表达式的值double Operate(BiTreeNode *T){if(T->lchild==NULL && T->rchild==NULL){double num = atof(T->OPT); //调用系统函数atof()将字符串转换为浮点数return num;}double ld,rd;ld = Operate(T->lchild);rd = Operate(T->rchild);char c = T->OPT[0];switch(c){case '+': return ld+rd;break;case '-': return rd-ld;break;case '*': return ld*rd;break;case '/': return rd/ld;break;default:cout << " you have entered wrong data ! "<< endl ;return 0;break ;}}void display(BiTreeNode *T){if(T == NULL ) return ;display(T->rchild);display(T->lchild);cout << T->OPT << " " ;public:BiTree() {T = NULL ;index = 0 ;number_of_point = 0 ;}/*以下两个函数重载私有成员函数方便计算*/void InorderCreate(){char OPT[30][10];cout << "输入中缀表达式: " << endl;char c = getchar();bool flag = true;int i = 0,j = 0 ;while(c != 10) { //输入的是空格j = 0;if(c == '-' && flag == true) { //flag判断是否是一个负数的值OPT[i][j++] = c;for(c = getchar() ; IsNumber(c) ; c = getchar() )OPT[i][j++] = c;OPT[i++][j] = '\0';flag = false;}else if(IsNumber(c)){OPT[i][j++] = c;for(c = getchar();IsNumber(c);c = getchar())OPT[i][j++] = c;OPT[i++][j] = '\0';flag = false;}else //运算符时的处理{flag = true;OPT[i][j++] = c;OPT[i++][j] = '\0';c = getchar();}}InorderCreate(T,OPT,0,i-1);}double Operate(){return Operate(T);}void display(){display(T) ;}~BiTree() {DestroyTree();};int main(){BiTree tree;tree.InorderCreate();cout << endl << tree.Operate() << endl;tree.display() ;cout << endl ;return 0;}测试结果:。

相关文档
最新文档