ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:343.55KB ,
资源ID:5814357      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5814357.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(华东交大数据结构课设 表达式求值.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

华东交大数据结构课设 表达式求值.docx

1、华东交大 数据结构课设 表达式求值课程设计(论文)任务书 学院 专业 班 一、课程设计(论文)题目 二、课程设计(论文)工作自 年 月 日起至 年 月 日止。三、课程设计(论文) 地点: 四、课程设计(论文)内容要求:1课程设计的目的为了配合数据结构课程的教学,使学生能更深刻的领会数据结构课程的重要性,特开设此课程设计;编写一些在特定数据结构上的算法,通过上机调试,更好的掌握各种数据结构及其特点,培养学生综合运用所学理论知识解决复杂实际问题的实践能力、研究性学习能力和团队合作能力。2课程设计的任务及要求1)基本要求 (1)课程设计前必须选定课程设计题目,并认真进行需求分析与系统设计; (2)上

2、机调试之前要认真准备实验程序及调试时所需的测试数据;(3)独立思考,独立完成,严禁抄袭,调试过程要规范,认真记录调试结果; (4)上机结束后认真规范撰写课设报告,对设计进行总结和讨论。2)课程设计论文编写要求(1)要按照书稿的规格撰写打印课设论文(2)论文包括任务书、目录、绪论、正文、总结、参考文献、附录等(3)正文中要有问题描述、抽象数据类型的定义、数据的存储结构、设计的求解算法、算法的实现、调试分析与测试结果(4)课设论文装订按学校的统一要求完成3)课设考核从以下几方面来考查:(1)考勤和态度; (2)任务的难易程度及设计思路;(3)动手调试能力;(4)论文撰写的水平、格式的规范性。4)参

3、考文献1 严蔚敏, 吴伟民. 数据结构(C语言版)M. 北京:清华大学出版社, 2007年.2 严蔚敏, 吴伟民. 数据结构题集(C语言版)M. 北京:清华大学出版社, 2007年.3 谭浩强. C语言程序设计M. 北京:清华大学出版社,2006年.5)课程设计进度安排内容 天数地点构思及收集资料 1图书馆程序设计与调试 3计算机房撰写论文 1图书馆6)任务及具体要求 表达式求值,可供小学生作业,并能给出分数任务要求:1) 建立试题库文件,随机产生n个题目;2) 随时可以退出;3) 题目涉及加减乘除,带括号的混合运算;4) 保留历史分数,能回顾历史,给出与历史分数比较后的评价。学生签名: _

4、年 月 日课程设计(论文)评审意见(1)考勤和态度 :优()、良()、中()、一般()、差()(2)任务难易及设计思路 :优()、良()、中()、一般()、差()(3)动手调试能力评价 :优()、良()、中()、一般()、差()(4)论文撰写水平及规范性评价:优()、良()、中()、一般()、差()评阅人: 职称: 讲师年 月 日目 录目 录 11绪 论 11.1需求分析 11.1.1市场需求 11.1.2软件功能需求 11.2实验意义 22程序框架设计 22.1概要设计 23.元素存储结构 64.详细设计 74.1程序算法 74.2函数说明 75功能测试 95 总结 12参考文献 13附 录

5、 141绪 论1.1需求分析 1.1.1市场需求为了适应市场小学生的题目需求以及节约纸张,顾开发此程序以来到达即可以节约纸张又可以通过做题来提高小学生的运算能力。而且,题目库可以自己定制,适合于各给不同能力段的小学生,达到普及以及减轻社会纸张压力。同时,培养小学生养成良好使用电脑的习惯。 1.1.2软件功能需求该题目的核心是利用栈这种数据结构来实现一个加减乘除以及带括弧的混合数学表达式的计算。其次是利用文件来保存和读写试题库、每次做题的成绩和以往成绩的平均值。对于数学表达式的计算,可以设置一个运算符栈和一个数字栈,分别来保存运算符、数字或者中间计算得到的结果。将整个表达式看做一个字符串,从开头

6、依次判断每个字符是运算符还是数字,若是运算符,则根据运算符优先级来确定是将其压栈还是弹栈进行计算;若是数字,则先将其转化并计入一个临时int型变量中,看下一个字符是否为运算符栈,若是,则将临时变量压进数字栈,否则读取下一个数字字符并进行相关处理后累加到临时变量中,直到下一个字符为运算符,将临时变量压进数字栈。最后,当字符为=时,结束计算,得到计算结果。对于试题库,第一次运行程序时需要用户输入若干试题来建立试题库文件,再次运行时磁盘上已经存在试题库文件,故不需再次建立试题库,直接读取文件即可。然后从试题库中通过随机数函数随机抽取若干个试题供用户来做测试。测试过程中可即时跟踪判断用户所给答案是否正

7、确,并给出相关提示。测试完毕后给出本次测试得分,对得分进行评价并将得分存到磁盘文件上。用户可随时查看成绩的历史记录以及其平均成绩,可随时选择退出程序。 1.2实验意义 通过对软件的编写来了解银行业务办理过程。增加动手实践能力。提高对程序的编写,调试和开发能力。通过对论文的撰写来提高论文撰写能力。明确系统的需求,明确软件开发的最终目的,使开发出来的软件更能符合客户的需求。2程序框架设计 本程序主要用到的结构为栈。2.1概要设计 1)为了能够实现上述软件需求功能,先定义栈的抽象数据类型 ADT Queue= 数据对象:D=ai|ai=ElemType,i=0,1,2,n,n=0 数据关系:R=|a

8、i,ai+1=D 基本操作: InitStack(&S) 操作结果:构造一个空栈S DestroyStack(&S) 初始条件:栈已经存在 操作结果:栈S被销毁 ClearStack(&S) 初始条件:栈已存在 操作结果:将S清空为空栈 StackEmpty(S) 初始条件:栈已存在操作结果:若栈为空,若返回1,否则返回0 Stacklength(S) 初始条件:栈S存在 操作结果:返回S元素的个数,栈的长度 Menu() 操作结果:在屏幕上显示操作菜单./ADT Queue 2)本程序包含19个函数 (1)主函数main() (2)int NumInitStack(Num *S1) /构造数

9、字栈 (3)int OperInitStack(Oper *S2) /构造运算符栈 (4)int NumGetTop(Num *S1) /得到数字栈栈顶元素 (5)char OperGetTop(Oper *S2) /得到运算符栈栈顶元素 (6)void NumPush(Num *S1,int e1) /数字栈压栈 (7)void OperPush(Oper *S2,char e2) /运算符栈压栈 (8)int NumPop(Num *S1) /数字栈弹栈 (9)char OperPop(Oper *S2) /运算符栈弹栈 (10)char Precede(char a,char b) /判

10、断运算符优先级 (11)int Operate(int a,char theta,int b) /计算二元表达式的值 (12)int IsOper(char ch) /判断字符ch是否为运算符 (13)int Result(char a,Num *num,Oper *oper) /计算表达式的结果 (14)int Buildshitiku() /建立试题库 (15)void Xuanti(int n,int a) /随机选取n个题目,将题号保存在数组a中 (16)void Avescore() /求平均成绩 (17)void Zuoti(Shiti a) /做题 (18)void Histor

11、y() /输出历史成绩 (19)int menu() /菜单函数 3)各函数间关系如下图2.1-1所示:2.2程序流程图 如图-2.2-(1)为程序流程图,主要描述了该程序运行过程。图2.2:程序图3.元素存储结构如图所示为Num; 数字栈类型typedef struct int *base,*top; int size;Num; /数字栈int *base,*top int size图-3-1: 数字栈结构体 如图 Shiti试题数据类型 typedef struct char a100; int result;Shiti; /试题数据类型 char a100;int resul 图3-2:

12、Shiti试题数据类型 如图是运算符栈类型 typedef struct char *base,*top; int size;Oper; /运算符栈 char *base,*top;int size; 图3-3: 运算符栈类型4.详细设计4.1程序算法本次的课程数据我是用栈来实现表达式求解,利用栈求表达式的值,可供小学生作业,并能给出分数。要求:建立试题库文件,随机产生n个题目;题目涉及加减乘除,带括弧的混合运算;随时可以退出;保留历史分数,能回顾历史,给出与历史分数比较后的评价。我利用文件来保存和读写试题库,且要运用磁盘文件。 数学表达式的计算,我设置了一个运算符栈与一个数字栈,分别来保存运

13、算符、数字或者中间计算得到的结果。将表达式看成一个字符串,从而分种计算。 通过输入的表达式来建立试题库。 对从键盘输入的的表达式通过算符栈和数字栈进行压栈和出栈。 .通过菜单按钮进行选择,做题,查看历史分数,退出。4.2函数说明 4.2.1main() 在主函数中调用子函数进行初始化,调用函数执行程序模拟,控制程序的进行。4.2.2int Buildshitiku() 建立试题库,通过txt文件进行保存。 4.2.3int NumInitStack(Num *S1) 构造数字栈,申请空间,初始化数字栈。 4.2.4int OperInitStack(Oper *S2) 构造算符栈,申请空间,初

14、始化算符栈。 4.2.5int NumGetTop(Num *S1) 得到数字栈的栈顶元素,以来入栈。4.2.6 char OperGetTop(Oper *S2) 得到运算符栈顶元素,以便入栈。 4.2.7void NumPush(Num *S1,int e1) 数字栈压栈,也就是所谓的入栈。 4.2.8void OperPush(Oper *S2,char e2) 函运算符栈压栈,入栈。 4.2.9int NumPop(Num *S1) 数字栈出栈。4.2.10char OperPop(Oper *S2) 运算符出栈,返回一个字符。 4.2.11char Precede(char a,ch

15、ar b) 将判断运算符的优先级,以来计算表达式。 4.2.12int Operate(int a,char theta,int b) 计算表达式的值,通过表达式运算规则从左到右,先乘除后加减,先括号内在括号外的顺序去计算。 4.2.13void Xuanti(int n,int a) 在已建好的试题库中,通过随机抽取n个题目,保存在数组中。 4.2.14 void Zuoti(Shiti a首做题,通过输入的题数,在试题库中随机抽取题目,输入答案,通过表达式求解出答案。4.2.15void History() 将以往的做题成绩保留在内存中,通过调用函数给出成绩。4.2.16) int men

16、u() 菜单函数。4.2.17int IsOper(char ch) 判断字符ch是否为运算符4.2.18void Avescore() 求出平均成绩,在给出的分数以及题数给出平均成绩。 5功能测试(1) 首次运行程序时如图5-1。图5-1:程序初运行图(2) 依次输入所要建立的试题数目n和n个表达式,现以输入十个为例,实际可多输入一些,如图5-2.图5-2:建立试题库(3)任意键,跳出菜单页面,如图5-3图5-3:菜单图(4) 选择1,进行做题。如图5-4.图5-4:做题(5) 选择2,回顾历史分数。如图5-5图5-5:历史回顾(8)选择3,退出系统,如图5-6。图5-6:退出5 总结 对本

17、次课程设计是制作一个试题库供小学生选题,我是通过栈来实现表达式求值的,起初对于表达式求值,我不知如何求值。而后参考网上的我设置了运算符栈与数字栈来分别保存运算符和数字以及中间计算得到的结果。通过这次课设,体会到每一个简单程序编写的困难以及自身的不足,对编程的不熟练,以及编写程序时产生的许多不必要的错误。在创建磁盘文件时也有很多问题,磁盘的导入导出没实现。所以将会加强自身的素质。数据结构这门课感觉比较难,许多的功能都遍写不出来,我将会努力调试代码。参考文献1 严蔚敏, 吴伟民. 数据结构(C语言版)M. 北京: 清华大学出版社, 2007.2 刘汝佳.算法竞赛入门经典M.北京:清华大学出版社,2

18、009.11.3 (美)普拉达(Prata,S.)著,云颠工作室译.C Primer Plus(第5版)中文版M.北京:人民邮电出版社,2005.2(2008.8重印).4 谭浩强. C语言程序设计M. 北京:清华大学出版社,2006年. 5 严蔚敏, 吴伟民. 数据结构题集(C语言版)M. 北京:清华大学出版社, 2007年. 6 谢昕 等编著,C程序设计(第二版),北京: 北京邮电大学出版社,2007.附 录#include #include #include /对时间和日期操作int N; /定义全局变量N,表示试题库试题数量typedef struct char a100; int r

19、esult;Shiti; /试题数据类型typedef struct int *base,*top; int size;Num; /数字栈typedef struct char *base,*top; int size;Oper; /运算符栈int NumInitStack(Num *S1) /构造数字栈 S1-base=(int *)malloc(100*sizeof(int); if(!S1-base) printf(申请内存失败!n); return 0; S1-top=S1-base; S1-size=100; return 1;int OperInitStack(Oper *S2)

20、/构造运算符栈 S2-base=(char *)malloc(100*sizeof(char); if(!S2-base) printf(申请内存失败!n); return 0; S2-top=S2-base; S2-size=100; return 1;int NumGetTop(Num *S1) /得到数字栈栈顶元素 int e1; if(*S1).top=(*S1).base) return 0; e1=*(*S1).top-1); return e1;char OperGetTop(Oper *S2) /得到运算符栈栈顶元素 char e2; if(*S2).top=(*S2).bas

21、e) return 0; e2=*(*S2).top-1); return e2;void NumPush(Num *S1,int e1) /数字栈压栈 *(*S1).top+=e1;void OperPush(Oper *S2,char e2) /运算符栈压栈 *(*S2).top+=e2;int NumPop(Num *S1) /数字栈弹栈 int e1; if(*S1).top=(*S1).base) return 0; e1=*-(*S1).top; return e1;char OperPop(Oper *S2) /运算符栈弹栈 char e2; if(*S2).top=(*S2).

22、base) return 0; e2=*-(*S2).top; return e2;char Precede(char a,char b) /判断运算符优先级 int i,j; char Table88= ,+,-,*,/,(,),=, +, -, *, /, (, , =, ,=; /优先级表格 for(i=0;i8;i+) if(Table0i=a) /纵坐标寻找 break; for(j=0;j8;j+) /横坐标寻找 if(Tablej0=b) break; return Tableji;int Operate(int a,char theta,int b) /计算二元表达式的值 in

23、t c; if(theta=+) c=a+b; else if(theta=-) c=a-b; else if(theta=*) c=a*b; else c=a/b; return c;int IsOper(char ch) /判断字符ch是否为运算符 char ptr10=+,-,*,/,(,),=; int i; for(i=0;i=0&ai=9) /字符是数字 k+; if(kj) num2=num2*10+(ai-48); k=j=0; i+; if(!IsOper(ai) k+; if(k=j) /如果k等于j,说明下一个字符是运算符,即数字字符结束,压进数字栈 NumPush(nu

24、m,num2); else if(IsOper(ai) /字符是运算符 switch(Precede(ai,OperGetTop(oper) /该运算符和栈顶运算符进行优先级比较并做相关处理 case : theta=OperPop(oper); /运算符栈弹栈 d=NumPop(num); /数字栈弹栈 b=NumPop(num); NumPush(num,Operate(b,theta,d); /计算结果并压栈 break; return (NumGetTop(num); /返回最终计算结果int Buildshitiku() /建立试题库 int i; FILE *fp; Shiti t

25、; if(!(fp=fopen(G:shitiku.txt,w) printf(无法建立试题库文件!n); return 0; printf(输入要建立的试题库的试题数目: ); scanf(%d,&N); fprintf(fp,%dn,N); for(i=0;iN;i+) printf(输入第%d道题目:n,i+1); scanf(%s,t.a); fprintf(fp,%sn,t.a); /将键盘输入的表达式写进文件 fclose(fp); return 1;void Xuanti(int n,int a) /随机选取n个题目,将题号保存在数组a中 srand(int)time(0); int i,j,t; a0=rand()%N; /产生0-N之间的随机数并记录 for(i=1;in;i+) t=rand()%N; for(j=0;ji;j+) if(aj=t) break; if(j=i) ai=t; else i-; void Avescore() /求平均成绩 FILE *fp1,*fp2; int sum=0,i=0,s,a; if(!(fp1=fopen(G:score.txt,r) printf(无法打开成绩信息文件!n); exit (-1); whi

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1