欢迎来到天天文库
浏览记录
ID:56825595
大小:40.00 KB
页数:10页
时间:2020-07-15
《C#简单的四则运算器.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、[简单的四则运算器]一、项目内容及要求要求:1)能够进行简单的四则运算,点击等号,显示结果;点击“C”键清除文本框内容。2)除数为0,文本框显示出错提示信息。3)支持多运算符优先级。二、算法分析(描述清楚程序流程,可用自然语言说明,也可用流程图等说明。)一、算法:1)模拟两个栈,一个放数值,称为StackOpd,一个放运算符,称为StackOpr。StackOpr的运算符优先级必须递增的。2)然后依次扫描四则表达式,遇到数字就放到StackOpd里,遇到运算符,则有以下情况:3)当前运算符优先级>栈尾运算符的优先级,则入栈StackOpr。4)当
2、前运算符优先级<栈尾运算符的优先级,则取出StackOpr栈尾的运算符和StackOpd栈尾的两个元素,进行运算,然后把答案放入A中。不停重复上述操作直到当前运算符>栈尾运算符。5)最后,取出StackOpr栈尾的运算符和StackOpd栈尾的两个元素,进行运算,然后把答案放入StackOpd中。不停重复上述操作直到栈StackOpr为空。6)运算符的优先级:+,-:1;*,/:2二、泛型集合:1)泛型最常见的用途是创建集合类1)泛型集合可以约束集合内的元素类型2)典型泛型集合List,Dictionary3)、表
3、示该泛型集合中的元素类型三、堆栈的逻辑结构:1)栈(Stack)是一种特殊的线性表,是限定仅在表尾进行插入或删除操作的线性表。2)栈的表尾称为栈顶(top),处于栈顶位置的数据元素称为栈顶元素。3)表头称为栈底(bottom),处于栈底位置的数据元素称为栈底元素。4)不含元素的空表称为空栈。5)栈通常记为:S=(a1,a2,…,an),S是英文单词stack的第1个字母。a1为栈底元素,an为栈顶元素。这n个数据元素按照a1,a2,…,an的顺序依次入栈,而出栈的次序相反,an第一个出栈,a1最后一个出栈。6)所以,栈的操作是按照后进先出(Las
4、tInFirstOut,简称LIFO)或先进后出(FirstInLastOut,简称FILO)的原则进行的,因此,栈又称为LIFO表或FILO表。四、堆栈的基本操作:1)清空操作:Clear()初始条件:栈存在;操作结果:使栈为空。2)入栈操作:Push(Titem)初始条件:栈存在;操作结果:将值为item的新的数据元素添加到栈顶,栈发生变化。3)出栈操作:Pop()初始条件:栈存在且不为空;操作结果:将栈顶元素从栈中取出,栈发生变化。4)取栈顶元素:Peek()初始条件:栈表存在且不为空;操作结果:返回栈顶元素的值,栈不发生变化。1)属性:C
5、ount:获取栈中包含的元素个数。三、界面及运行过程四、关键代码(代码要求注释完整,例如:变量的作用,语句的作用,方法的功能等都要加注释说明)namespace项目4{structOpType//运算符栈类型{publicchar[]data;//存放运算符publicinttop;//栈顶指针};structValueType//运算数栈类型{publicdouble[]data;//存放运算数publicinttop;//栈顶指针};classClass1{constintMaxSize=200;publicstringexp;//存放中缀表
6、达式publicchar[]postexp;//存放后缀表达式publicintpnum;//postexp中字符个数publicOpTypeop=newOpType();//运算符栈publicValueTypest=newValueType();//运算数栈publicClass1(){postexp=newchar[MaxSize];pnum=0;op.data=newchar[MaxSize];op.top=-1;st.data=newdouble[MaxSize];st.top=-1;}publicvoidTrans()//将算术表达式
7、exp转换成后缀表达式postexp{inti=0,j=0;//i、j作为exp和postexp的下标charch;while(i8、9、ch=='-')//判定为加或减号{while(op.top!=-1){//将栈中'运算符退栈并存放到postexp中postexp[j++]=op.data[op.top];op.top--;}op.top++;op.data[op.top]=ch;//将'+'或'-'进栈}elseif(ch=='*'10、11、ch=='/12、')//判定为'*'或'/'号{while(op.top!=-1&&(op.data[op.top]=='*'13、14、op.data[op.
8、
9、ch=='-')//判定为加或减号{while(op.top!=-1){//将栈中'运算符退栈并存放到postexp中postexp[j++]=op.data[op.top];op.top--;}op.top++;op.data[op.top]=ch;//将'+'或'-'进栈}elseif(ch=='*'
10、
11、ch=='/
12、')//判定为'*'或'/'号{while(op.top!=-1&&(op.data[op.top]=='*'
13、
14、op.data[op.
此文档下载收益归作者所有