欢迎来到天天文库
浏览记录
ID:46960458
大小:128.00 KB
页数:18页
时间:2019-12-01
《南京信息工程大学滨江学院数据结构课程设计报告书》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、.....滨江学院数据结构课程设计题目算术表达式的求解院系计算机系专业学生姓名学号指导教师李燕二O一六年六月十日学习参考.....目录1.前言11.1课题内容及要求11.2选题目的及意义12.系统分析22.1问题描述22.2运算符的优先级分析:22.3错误提示分析:23.系统概要设计33.1系统总体架构设计33.2系统模块的设计34.系统详细设计44.1数据的存储设计与描述:44.2详细的优先级关系:44.3具体的操作集合:45.程序实现66.程序测试136.1正确的结果136.2错误1136.3错误2136.4错误3
2、137.收获及体会:15学习参考.....参考文献:15学习参考.....1.前言1.1课题内容及要求题目39:算术表达式的求解问题描述:给定一个算术表达式,通过程序求出最后的结果。基本要求:从键盘输入要求解的算术表达式;采用栈结构进行算术表达式的求解过程;能够判断算术表达式正确与否;对于错误表达式给出提示;对于正确的表达式给出最后的结果;1.2选题目的及意义⑴进一步熟悉和使用栈的基本操作,如栈的初始化,进栈,出栈的特性。⑵学习在实际生活中使用栈来解决问题。学习参考.....2.系统分析2.1问题描述要正确计算表达式的
3、值,必须要正确的解释表达式。首先解释算术表达式的运算规则,分为以下三点:⑴先乘除后加减;⑵从左往右进行计算;⑶有括号的,先算括号内的;2.2运算符的优先级分析:任何一个表达式都是由运算符,操作数和界限符组成的。这里把运算符,界限符统称为算符。设两个操作符分别为op1和op2。为实现运算符的优先法则,优先关系会出现三种情况,op1的优先级高于op2的优先级,op1的优先级等于op2的优先级,op1的优先级小于op2的优先级。2.3错误提示分析:对于输入错误的,比如出现了表达式以外的非法字符,没有按照正确格式进行输入。系统
4、会给出提示。学习参考.....3.系统概要设计3.1系统总体架构设计算术表达式的求解栈模块运算模块定义栈的结构初始化栈入栈出栈取栈顶的元素判断优先级判断是否为运算符进行基本运算函数运算函数3.2系统模块的设计为了更好的服务,结合用户的需求,有如下的模块设计:程序主要包括三个模块:⑴主函数设计模块intmain(){函数体}⑵栈模块:一些本程序需要的操作,如初始化栈,定义栈,出栈,入栈,取栈顶元素。⑶运算模块:对一些优先级的定义,以及基本的算术运算。学习参考.....4.系统详细设计4.1数据的存储设计与描述:为实现运算
5、符的优先算法,可以用两个栈:运算符栈OPTR,操作数栈OPND。四则运算表达式算法的基本思想是:⑴首先置操作数栈OPND为空栈,表达式起始符“#”为OPTR栈的栈底元素。⑵依次读入表达式中的每个字符,是操作数则进栈OPND,是运算符就和OPTR栈的栈顶元素比较后,依据相应的优先权进行操作,直至整个表达式求值完毕(标志是两个运算符都为“#”)。4.2详细的优先级关系:Op2Op1+-*/()#+>><<<>>->><<<>>*>>>><>>/>>>><>>(<<<<<=)>>>>>>#<<<<<=4.3具体的操作集合:栈
6、的设计:typedefstruct{ElemTypedata[StackSize];inttop;}SeqStack;voidInit(SeqStack*s);//初始化栈intIsFull(SeqStack*s);//判断栈是否已满intIsEmpty(SeqStack*s);//判断栈是否是空voidPush(SeqStack*s,ElemTypex);//进行入栈操栈学习参考.....ElemTypePop(SeqStack*s);//进行出栈操作ElemTypegetTop(SeqStack*s);//提取栈顶
7、元素函数运算:intAdvan(intt1,intt2);//判断符号的优先级intIn(intc);//判断c是否为运算符intOprea(inta,inttheta,intb);//进行四则运算intEvaluteExpression();//进行算术表达式求值学习参考.....5.程序实现//stack.h中#ifndef_STACK_H#define_STACK_H#defineStackSize100#defineMaxLength100typedefintElemType;typedefstruct{Ele
8、mTypedata[StackSize];inttop;}SeqStack;voidInit(SeqStack*s);//初始化栈intIsFull(SeqStack*s);//判断栈是否已满intIsEmpty(SeqStack*s);//判断栈是否是空voidPush(SeqStack*s,ElemTypex);//进行入栈操
此文档下载收益归作者所有