C语言数据结构栈计算器的实现课题设计报告书
(13页)
本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!
14.9 积分
目录1、 课程设计任务 12、 需求分析 13、 概要设计 1?24、 详细设计 3?55、小结课程设计任务?利用堆栈设计一个计算器。需求分析?首先,以字符列的形式,从终端输入语法止确、不含变量的整数表达式。利用已知 的运算符优先关系,实现对算术四则混合运算表达式的求值。?对该程序而言,主耍的利用应是栈,并将运算的先后步骤经分析后实现为简单运算。?不同于单纯表达式的运算,计算器有直接计算最近输入数据的特性,故只需一个栈 对其进行操作数和操作符的存储即可。?除通常的四则运算(加减乘除)夕卜,计算器还应有求相反数、百分数、开根、倒数 等功能。概要设计?由于运算符有优先级別Z差,所以一个表达式的运算不可能总是从左至右的循序执 行。每次操作的数据或运算符都是最近输入的,这与栈的特性相吻合,故本程序借 助栈來实现按操作符的优先级完成表达式的求值计算。算法概要:1、 栈的抽象数据定义:ADT SqStack{数据对象:D二{aj & EElemSet, i=l, 2, 3 , n,心0}数据关系:Rl={| aw, ai eD, i=l, 2, 3, , n}约定其中&端为栈底,缶端为栈顶。2、 栈的实现和操作集合:为不同于C#编译库中自带的类库Stack,这里使用CStack进行区分。classCStack privateintp_index; private A rrayList list;relurnlist. Count;public CSlack(沪初始化引 list = new Ar ray Lis t(); pjndex = publicint Countpublic void Push(object item)/* Alisl.Add(item); pjndex++;public object Pop(沪出栈 objectobj = listfpjndex]; list. ReinoveA t(pJ nd ex);pjndex-;returnobj:3、运算:计算器在输入一个操作符后,文本框内的数据会清空,故只需一个栈即可完成相应 的运算。因此,对以使用变^_insct判断计算是否完成,并根据按F的按钮进一步 判断栈中的数字是否为运算的中间结果。以加号按钮为例:粘丫船煤做稱驟,重新输入以记录第二个数字呵 if (calc. Count == 2)ProcessOperation(nbutton_equar,y;/^ 计算前两个数的结果勺 calc.PiishCbiitt(m_adA)”* 将加号入 fS^/Jastoper = nbutton_addu;else if (calc. Count == 1)产如果栈中有一?个元素,表明是之前计算的中间结果勺calc .F ush(" biitton );/* 将运算符入栈勺Jastoper = f 9 button _addu;else if (calc.Count == 0沪如果栈中没冇元素,表示是第一,次运算*/calc. Push( t ext B oxi. Text);/^^—个数入 悔/calc. Push( Hbiitton_addu);/^^ —个运算符入栈泳/Jastoper = f 9 button _addu;break;详细设计源代码:using System;usingSystem. Componen(Mode 1: usingSystem. Data;usingSystom. Drawing;usingSystem. Linq;usingSystem. Text;usingSystom. Windows. Forms; usingMicrosoft. VisualBasic; usingSystem. Collections;namespaceCa leu latorStatckpublic partial class Calculator : Formpublic CalculatorOInitializeComponent ();private string testbox;private bool inset = Mse;/*判断一次计算是否完成/*/ =0;/astoper -private double ^memoryprivate string private string classCStacksecondNum =privateintp index; privatcArrayList list;public CStack()/*初始化*/list = new Array Li st (); p index - 一];public int Countget {returnlist. Count]^public void Push (object i tem)/*A^*/ list. Add(itom);p index++;public object Popobject obj = list[p_indcx]; list. RemoveAt(p index); p index一;roturnobj;CStackcalc = now CSlack〈string〉();/*创建一个栈*// r 9 # * ? Jq f, /* r ? /private void Digi (Bin Click (object sender, Event Args 5)/*数字类按钮输入*/string s = ((Button)sender)? Text. ToStringO;charQ ids = s. 丁0(^1:心丫矽()〃*获取输入的数字*/ProcessKey (i dsLOj);pr i va t e vo id ProcessKey (char c)/*处理重输入 */ if (Inset. == false)Test box = string. Empty;Inset. = true;AddToDi splay (c);private bool Inset./*输入布尔判定*/ {getreturn{ inset;}set}; E=如private string Tost boxget return{ test box;}set{} _ testb 关键词: 语言 数据结构 计算器 实现 课题 设计 报告书
天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。