1、十进制四则运算计算器的设计与实现十进制四则运算计算器的设计与实现 1. 问题描述问题描述 (1)题目描述:在以二叉树表示算术表达式的基础上,设计一个十进制的 四则运算计算器。 (2)基本要求:实现整数或浮点数的四则运算。 (3)测试数据: 12 - ( - 4 ) * ( ( 20 + 3 / 5 ) * 8 / 5 ) * ( - 4 ) # = -515.36 - ( 22.7 - 4208.3 ) / ( ( 2.4 + 1.6 ) * 12 ) + 4.4 - 2.9 # = 88.7 10 - ( - 3 ) * ( ( 21 + 3 / 5 ) * 8 / 3 ) * ( - 2
2、) # = -335.6 2. 需求分析需求分析 (1)程序实现的功能是从键盘输入有效的表达式,求出其值并输出 (2)程序运行后,会提示用户输入表达式,并判断是否有效,并返回值 3. 概要设计概要设计 为了实现程序功能,用二叉树存储表达式,然后从二叉树按后序遍历的方式 取出数据,进行运算,运算时用堆栈存储数据。 (1) 二叉链表的定义 ADT BinaryTree /数据对象 D:D 是具有相同特性的数据元素的集合。 /数据关系 R: / 若 D=,则 R=,称 BinaryTree 为空二叉树; / 若 D,则 R=H,H 是如下二元关系; / (1)在 D 中存在惟一的称为根的数据元素 r
3、oot,它在 关系 H 下无前驱; / (2)若 D-root,则存在 D-root=D1,Dr,且 D1Dr =; / (3) 若 D1, 则 D1 中存在惟一的元素 x1, H,且存在 D1 上的关系 H1 ?H;若 Dr,则 Dr 中存在惟一的元 素xr , H , 且 存 在 上 的 关 系Hr ?H ; H=,H1,Hr; / (4)(D1,H1)是一棵符合本定义的二叉树,称为根的 左子树;(Dr,Hr)是一棵符合本定义的二叉树,称为根的右子树。 /基本操作: InitBiTree( struct BitNode *Lchild,*Rchild;/二叉树的左右孩子和父母 BitNod
4、e; typedef BitNode *BitTree; (2)树的结构定义 class binarytree/树的类 public: BinNode *root; /根节点 binarytree(void)root=NULL; /构造函数 void print(void)print(root); void print(BinNode *p) if(p!=NULL) print(p-left_child); print(p-right_child); coutleft_child-data.c_str(); float num2=atof(prt-right_child-data.c_str(); if(prt-data=“+“) num=num1+num2; else if(prt-data=“-“) num=num1-num2; else if(prt-data=“*“) num=num1*num2; else if