表达式求值课程设计(数据结构C语言版)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告课程设计题目:表达式求值
姓名胡*其
学号************
班级*****17Z
指导教师徐**
2017年12月30日
东华理工大学
课程设计评分表
学生姓名:胡*其班级:*****17Z 学号:20162018****课程设计题目:表达式求值
目录
一.题目: ......................... 错误!未定义书签。
二.设计任务: ..................... 错误!未定义书签。
三.问题分析: ..................... 错误!未定义书签。
四.结构分析: (1)
4.1用于存储操作数和运算结果(Sfloat) (1)
4.2用于存储运算符(Schar) .............. 错误!未定义书签。
4.2系统中子程序及功能要求............. 错误!未定义书签。
五.实现流程 (3)
5.1程序主流程图 (3)
5.2求值操作流程 (3)
六.个性功能介绍 (4)
七.部分问题及解决方案 (5)
7.1不能进行带有小数点的数的运算 (5)
7.2在输错后,跳回主界面直接提示指令输入错误,重输 (6)
八.课程设计小结 (7)
九.附录一:部分测试数据 (7)
十.附录二:源代码 (7)
一、题目:
表达式求值
二、课程设计任务:
要求能输入一个带“()”的任意多位实数的表达式。
要求:
1、有合理的提示;
2、有非法数据的判断;
3、能够进行多次计算。
测试数据及测试结果请在上交的资料中写明;
三、问题分析:
任何一个表达式都是由操作符,运算符组成的。我们分别用顺序栈来寄存表达式的操作数和运算符。栈是限定于紧仅在表尾进行插入或删除操作的线性表。顺序栈的存储结构是利用一组连续的存储单元依次存放自栈底到栈顶的数据元素。
为了实现算符优先算法。可以使用两个栈。一个称为Schar,用以寄存运算符,另一个称做Sfloat,用以寄存操作数或运算结果。
1.首先置操作数栈为空栈,表达式起始符”#”为运算符栈的栈底元素;
2.依次读入表达式,若是操作符即进Sfloat栈,若是运算符则和Schar栈的栈顶运算符比较优先权后作相应的操作,直至整个表达式求值完毕(即Schar栈的栈顶元素和当前读入的字符均为”#”)。
四、结构分析:
1.用于存储操作数和运算结果(Sfloat):
ADT s_float{
数据元素:此链栈中的所有元素类型为字符型的数字字符
数据关系:栈中数据元素之间是线性关系。
基本操作:
(1) Init(Sfloat *S);
初始化数字栈
(2)Push(Sfloat*S,float e)
进栈
(3)Pop(Sfloat*S,float*x)
出栈
(4)GetTop(Sfloat *S,float *x)
取栈顶
(5)void ClearStack(Sfloat *S)
清空栈
} ADT s_float
2.用于存储运算符(Schar):
ADT s_char{
数据对象D:元素类型为字符型的符号字符
数据关系R:栈中数据元素之间是线性关系。
基本操作:
(1)Init(Schar *S)
初始化字符栈
(2)Push(Schar *S,char x)
进栈
(3)Pop(Schar *S,char *x)
出栈
(4)GetTop(Schar *S,char *x)
取栈顶
(5)ClearStack(Schar *S)
清空栈
} ADT s_char
3.系统中子程序及功能要求:
(1)bool IsFloat(char ch)
判断输入的是否为数字
(2)bool IsChar(char ch)
判断输入的是否为所需要的字符
(3)float GetNumber(char *ch)
将字符型数字转化为浮点型
(4)float Operation(float a,char sign,float b) +、-、*、/的基本运算
(5)int Cmp(char x,char ch)
比较字符的优先级
(6)void Master();
程序主功能函数
(7)void Error()
错误提示界面(8)void Welcome() 程序欢迎界面(9)void End()
结束选择界面
五、实现流程
1.程序主流程图
2.求值操作流程
(下例为3*(7-2)的操作流程)
步骤Schar栈Sfloat栈输入表达式主要操作
1#3*(7-2)#Push(Sfloat,’3’)
2#3*(7-2)#Push(Schar,’*’)
3#*3(7-2)#Push(Schar,’(’)
4#*(37-2)#Push(Sfloat,’7’)
5#*( 3 7-2)#Push(Schar,’-’)
6#*(- 3 72)#Push(Sfloat,’2’)
7#*(- 3 7 2)#Operation(‘7’,’-’,’2’)
8#*( 3 5)#Pop(Sfloat)
9#* 3 5#Operation(‘3’,’*’,5’)
10#15#Return(GetTop (Sfloat))
六、个性功能介绍
在本程序中,通过windows头文件的作用,实现了程序背景色的改变,不在是原本的黑白色,让人看得很新颖。通过Sleep函数,让程序出错或跳转其它界面时,不是迅速跳过,而是先提示即将跳转,让使用者更方便地了解程序的基本执行过程。