数据结构(C语言版)课程设计报告表达式求值说明书.docx
《数据结构(C语言版)课程设计报告表达式求值说明书.docx》由会员分享,可在线阅读,更多相关《数据结构(C语言版)课程设计报告表达式求值说明书.docx(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构(C语言版)课程设计报告表达式求值说明书 XX高校 数据结构 课程设计说明书 题目: 表达式求值 院 系: 计算机科学与工程学院 专业班级: 计算机班 学 号: 学生姓名: 指导老师: 2013年 X 月X 日 XX高校课程设计(论文)任务书 计算机科学与工程 学院 学 号 学生姓名 专业(班级) 设计题目 表达式求值 设 计 技 术 参 数 系统平台:Windows 7/Windows XP 开发工具:VC+6.0 设 计 要 求 (1)能够计算的运算符包括:加、减、乘、除、圆括号。 (2)能够计算的数要求在实数范围内。(3)能执行多重括号嵌套运算。(4)对于异样表达式给出错误提示。
2、工 作 量 课程设计报告要求不少于3000字。源程序要求不少于300行 工 作 计 划 2013.11.21-12.01 依据课程设计大纲的要求,查找相关资料,完成需求分析; 2013.12.02-12.16 进行系统的概要设计; 2013.12.17-12.31 进行系统的具体设计和源代码的书写; 2014.01.01-01.17 对系统进行调试分析,写出课程设计报告。参 考 资 料 1何钦铭主编.C语言程序设计.北京:高等教化出版社,2007. 2谭浩强编著.C程序设计(第四版).北京:清华高校出版社,2008. 3严蔚敏,吴伟民编著.数据结构(C语言版)北京:清华高校出版社,2007.
3、4严蔚敏,吴伟民编著.数据结构题集 北京:清华高校出版社,2007. 指导老师签字 教研室主任签字 2013年 X月 X 日 学生姓名: 学号: 专业班级: 课程设计题目: 表达式求值 指导老师评语: 成果: 指导老师: 年 月 日 XX高校课程设计(论文)成果评定表 目录 1 需求分析 1 2 概要设计 1 2.1 设计思路 1 2.2 存储结构设计 1 2.3 功能模块设计 1 3 具体设计 1 4 运行与测试 1 5总结 1 参考文献 2 (要求:给出一级书目和二级书目,宋体,四号字,1.5倍行距,页码运用罗马数字,居中) (报告正文部分): (要求:正文部分一律用小四号字,宋体,行距2
4、0磅。一级标题靠左,加粗。二级大标题靠左,不加粗。正文页码单独起先用阿拉伯数字编码,居中) 1 需求分析 1、程序所能达到的功能:能够处理以字符序列的形式输入的不含变量的实数表达式,正确处理小数,推断表达式是还语法正确,正的确现对算术四则混合运算表达式的求值。 2、输入的形式和输入值的范围:以字符串的形式输入表达式,以“#”结束。 3、输出的形式:在计算过程中遇到的问题或最终的答案将显示在屏幕上。 4、测试数据:输入“3*(7-2)#”时,输出“15.000000”,测试正确;输入“!(9-2)#”时,输出“输入错误!”,测试正确。2 概要设计 2.1 设计思路 为了实现算符优先算法,可以运用
5、两个工作栈。一个称为OPTR,用以寄存运算符,另一个称作OPND,用以寄存操作数或运算结果。算法的基本思想是: (1)首先置非运算符栈为空栈,表达式起始符“#”为运算符栈的栈底元素; (2)依次读入表达式中每个字符,若是非运算符则进OPND栈,若是运算符则和OPTR栈的栈顶运算符比较优先权后做相应的操作,直至整个表达式求值完毕(即OPTR栈的栈顶元素和当前读入的字符均为“#”)。算法中还调用了两个函数,其中Precede是判定运算符栈顶运算符a与读入的运算符b之间优先关系的函数;Operate为进行二元运算a theta b的函数,假如是编译表达式,则产生这个运算的一组相应指令并返回存放结果的
6、中间变量名;假如是说明执行表达式,则干脆进行该运算,并返回运算结果。 2.2 存储结构设计 因为表达式是由操作符,运算符和界限符组成的。所以须要两个栈,一个char类型栈用来寄存运算符,一个int类型的栈用来寄存非运算符。 /定义结点元素结构(用于存放运算符) typedef struct charstack char *base; char *top; int stacksize; SqStackchar; /定义结点元素结构(用于存放非运算符) typedef struct intstack float *base; float *top; int stacksize; SqStackin
7、t; 2.3 功能模块设计 1.栈的基本功能: (1) InitStackchar(Stackchar S):构造运算符栈 (2) InitStackint(Stackint S):构造非运算符栈 (3) Pushchar(SqStackchar S,char e):运算符栈插入元素e为新的栈顶元素 (4) Pushint(SqStackint S,float e):非运算符栈插入元素e为新的栈顶元素 (5) Popchar(SqStackchar S,char e):删除运算符栈S的栈顶元素,用e返回其值 (6) Popint(SqStackint S,float e):删除非运算符栈S的栈
8、顶元素,用e返回其值 (7) GetTopchar(SqStackchar S):用e返回运算符栈S的栈顶元素 (8) float GetTopint(SqStackint S):用e返回操作数栈S的栈顶元素 2.其它功能分析: (1) Xiaoshu(char c)用于计算小数。 (2)Precede(char a,char b)推断运算符优先权功能,算符间的优先关系见表1: 表1 算符间的优先关系 + - * / ( ) # + > < < < < > > - > > < < < > > * > &g
9、t; > > < > > / > > > > < > > ( < < < < < = ) > > > > > > # < < < < < = (3)Operate(float a,char theta,float b) 操作数用对应的运算符进行运算功能,运算结果干脆返回。 3 具体设计(程序源代码) #include<stdio.h> #include<stdlib.h> #define MAXSIZE
10、100 /存储空间初始安排量 #define STACKINCREMENT 10 /存储空间安排增量 typedef struct charstack char *base; /在栈构造之前,base的值为NULL char *top; /栈顶指针 int stacksize; /当前已安排的存储空间,以元素为单位 SqStackchar; /定义结点元素结构(用于存放运算符) typedef struct intstack float *base; /在栈构造之前,base的值为NULL float *top; /栈顶指针 int stacksize; /当前已安排的存储空间,以元素为单位
11、SqStackint; /定义结点元素结构(用于存放非运算符) int InitStackchar(SqStackchar S) /构造一个空栈(用于存放非运算符) S.base=(char *)malloc(MAXSIZE * sizeof(char); if(!S.base) return 0; /存储安排失败 S.top=S.base; /空栈 S.stacksize=MAXSIZE; return 1; int InitStackint(SqStackint S) /构造一个空栈(用于存放运算符) S.base=(float *)malloc(MAXSIZE * sizeof(floa
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 语言版 课程设计 报告 表达式 求值 说明书
限制150内