计算器程序设计 数据结构课程设计指导书

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

一、课程设计的基本任务数据结构是一门涉及多门课程的课程,难度较大,需要较好的C语言的程序设计和调试能力,如果学生能够按照要求,从时间和精力上保证完全的投入,相信能够有很大的收获,学生要发挥自主学习的能力,充分利用时间,安排好课设的时间计划,并在课设过程中不断检测自己的计划完成情况,及时的向教师汇报。《数据结构》课程设计是计算机科学与技术专业的主要实践性教学环节。在进行了专业基础课和《数据结构》课程的基础上,设计一个实际的应用软件,初步软件设计的基本方法,提高进行工程设计的基本技能及分析、解决实际问题的能力,为毕业设计和以后的工程实践打下良好的基础。2二、课程设计的基本要求课程设计按照教学要求需要一周时间完成,总共至少要上机调试程序10小时。对每个题目要有需求分析,在需求分析中,将题目中要求的功能进行叙述分析,并且设计解决此问题的数据存储结构,(有些题目已经指定了数据存储的,按照指定的设计),设计或叙述解决此问题的算法,描述算法建议使用流程图,进行算法分析指明关键语句的时间复杂度。给出实现功能的一组或多组测试数据,程序调试后,将按照此测试数据进行测试的结果列出来。对有些题目提出算法改进方案,比较不同算法的优缺点。如果程序不能正常运行,写出实现此算法中遇到的问题,和改进方法;2对每个题目要有相应的源程序(可以是一组源程序,即详细设计部分):源程序要按照写程序的规则来编写。要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。程序能够运行,要有基本的容错功能。尽量避免出现操作错误时出现死循环;3最后提供的主程序可以象一个应用系统一样有主窗口,通过主菜单和分级菜单调用课程设计中要求完成的各个功能模块,调用后可以返回到主菜单,继续选择其他功能进行其他功能的选择。1、能力培养要求①巩固和加深对数据结构的理解,提高综合运用本课程所学知识的能力。②培养学生选用参考书,查阅手册及文献资料的能力。培养独立思考,深入研究,分析问题、解决问题的能力。③过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。④够按要求编写课程设计报告书,能正确阐述设计和实验结果,正确绘制系统和程序框图。⑤通过课程设计,培养学生严肃认真的工作作风,逐步建立正确的生产观念、经济观念和全局观念。2、学生提交课程设计报告要求1)设计题目2)设计目的33)设计内容4)程序流程图5)源程序6)软件测试报告(包括所用到的数据及结果)4三、课程设计的基本步骤和方法1、学生以自学为主,独立完成设计任务,注重学生能力的培养。2、教师要注意按学生基础和能力提出要求,辅导时要有侧重,做到因材施教。对基础差的学生要勤检查多指导,对能力强的学生应提出更高的要求,增加些选作内容,充分发挥其潜力。3、教师要教书育人。要求学生从点滴开始,每步操作都要按规定去做,以培养严肃认真的科学态度。选定方案要考虑经济效益,坚持勤俭节约的原则。要教育学生团结协作,遵守纪律,爱护公物。通过设计提高业务能力,提高思想觉悟。4、课程设计安排①教师下达设计任务书任务书内容包括题目、主要技术指标和要求、给定条件及原始数据、所用仪器设备和参考资料及文献等。教师讲授必要的设计思路和设计方法。②生完成预设计本阶段学生应明确任务,查阅资料及文献(主要自学),掌握工程设计基本方法,确定设计方案,进行设计分析,完成预设计。③实验阶段经教师审查通过预设计方案后,即可进行编程调试。实验由学生独立完成,教师定时指导。④设计总结阶段本阶段学生要认真完成课程设计报告书,整理技术资料,如有需要还应写出课程设计的心得体会和改进意见。5课程设计报告书包括:设计任务及主要技术指标、设计方案及论证结果、系统的原理框图、设计程序、实验结果、实验中主要问题及故障现象的分析及设计结论等。报告书中还应附实验数据、系统软硬件环境、使用说明及参考资料等。6郑州轻工业学院课程设计任务书题目模拟计算器的程序专业、班级计算机科学与技术10-01学号541007010157姓名郑峰弓主要内容、基本要求、主要参考资料等:主要内容:设计一个模拟计算器的程序,要求能对包含加、减、乘、除、括号运算符及SQR和ABS函数的任意整型表达式进行求解。设计要求:要检查有关运算的条件,并对错误的条件产生报警。参考资料:C++.C语言程序设计,数据结构(c语言版)完成期限:2012-6-21指导教师签名:课程负责人签名:2012年6月21日7郑州轻工业学院本科数据结构课程设计总结报告设计题目:模拟计算器的程序学生姓名:郑峰弓系别:计算机科学与工程专业:计算机科学与技术班级:10级1班学号:541007010157指导教师:卢冰李晔2012年6月21日8一、设计题目(任选其一)模拟计算器的程序要求能对包含加、减、乘、除、括号运算符及SQR和ABS函数的任意整型表达式进行求解。二、运行环境(软、硬件环境)WindowXP环境下运行三、算法设计的思想本程序采用栈的算法设计思想,为了实现算符优先算法,首先建立两个栈,一个字符型栈YF,用于存储运算符,一个浮点型栈YS,用于存储运算数据。算法的基本思想:1.建立两个空栈,将表达式起始符“\n”为运算符压入栈底2.顺序读取每个字符,每次读取判断是运算符还是数据,若是运算符则和运算符栈YF的栈顶元素进行优先性的比较,做相关的操作,若是数据符,将一个连续的数字字符读入到一个字符数组中,将这个字符数组,通过atof()函数将字符串转化成浮点型数据,然后将这个浮点数据压入YS数据栈,知道整个表达式读取完毕。四、算法流程图略五、算法设计分析1.建立的两个栈,栈的操作方法都包括栈的建立InitStack(),入栈函数Push(),取栈顶元素函数GetTop(),出栈函数Pop(),判断是否是空栈函数StackEmpty(),两个栈分别进行运算符和运算数的相关操作。2.对于一个表达式,进行求值应满足以下运算规则:先算乘除,后算加减;从左到右依次计算,先算括号里面的,后算括号外面的,遇到绝对值运算符A(A代表abs的缩写,表示进行绝对值9运算,形式是(4-9)A运算结果是5.00),和运算符S(S代表sqrt的缩写,表示进行开放运算形式是(2)S运算结果是1.41),A和S的优先性是比“)”的优先性低一级。开方和取绝对值时一定要注意输入格式(表达式)A和(表达式)S。3.运算符的游行先比较。Precede(chars1,chars2)比较两个字符的优先性,若是S1的优先级高于S2的优先性,则返回‘’,若是S1的优先级高于S2的优先性,则返回‘’,若是两个字符的优先级相同,则返回‘=’,该函数中包括括号匹配问题,就是括号必须成对出现,若是不成对出现,将提示括号不匹配4.合法运算符的判断Put()函数,只要是输入的运算符是‘+’‘-’‘*’‘/’‘A’‘S’,若是以上运算符Put()函数返回ture否则返回false5.本程序还右容错处理,(1)栈空的时候将会提示空栈,计算机将响一下短笛退出系统(2)当遇到不合法字符,不是英文的字符,括号不匹配问题,计算机将响一下短笛退出系统(3)输入的表达式不符合数学运算比如:除数不能为0,开方的不能为负数,若是计算机将响一下短笛退出系统6.本程序优好的操作界面,主界面将会提示你能输入的运算符和运算数,每次运算一个表示结果是,系统将会提醒是否继续操作,按Y键,表示继续进行表达式的运算,按N键计算机将响一下短笛退出系统。六、运行结果分析图1.图1表示,运行窗口的主界面,界面中提示你能输入的运算符和运算数的,防止用户输入不正确的字符,造成系统报错。10图2.图2表示加法运算图3.图3,表示减法运算11图4,图4,表示单独的除法运算图5图5,表示单独的乘法运算12图6,图6,表示取绝对值运算图7图7,表示开方运算13图8图8,表示绝对值和开方的混合运算图9,图9,表示加减乘除的混合运算,按其优先性进行运算,程序将一个个的获取表达式的字符,按照字符的顺序,字符的优先性进行相关的操作,每次读取进行判断,将字符按类别分别压入栈内。14图10图10,表示混合运算的级取绝对值和开方运算图11图11,表示缺少左括号问题,报错后直接退出系统退出时计算机将给出一声短笛15图12,图13图12,表示不符合数学运算(除数不能为0),图13,表示开方数不能为负数,报错后直接退出系统,退出时计算机将给出一声短笛16图14图14,表示运行表达式后退出系统的操作,退出时计算机将给出一声短笛七、收获及体会本次课程设计的时间虽然很短,但是感觉收获颇深的。首先,对本学期所学的数据结构课程再次加深理解。这次我选择的课程设计的题目是模拟计算器的程序,程序设计采用栈的算法结构,当初学的时候感觉栈就是一种操作,没用真正感觉到它的用处,但是,这次让我深深地感觉到栈的强大的功能,再次加深了对栈的理解。其次,自己的能力也有很大的提高。第一是分析问题的能力,给一道题目,能很快的写出算法分析,知道用哪些和不用哪些,先设计整体算法,在进行细节算法。第二是解决问题的能力,写好程序要进行方法调试,总要出错的,运用所学的知识逐个解决问题。最后,同时也查到自己的不足之处,感觉也是大家的不足之处,平时的只靠老师布置的作业题来训练自己,是远远不够的,我们学计算机的平时应该多做一些练习,才能在最后在做课程设计时,不会手忙脚乱。还有就是,希望学校多给我们一些实践的环节。附代码:#includestdio.h17#includestdlib.h#includemath.h#includemalloc.h#includeprocess.h#includectype.h#defineMAX20#defineSTACKSIZE5//建立两个栈,一个运算符栈和一个操作数栈typedefstruct{char*base;char*top;intstacksize;}Qstack;typedefstruct{double*base;double*top;intstacksize;}SQstack;//建立一个栈(字符型)用于存储运算符voidInitStack(Qstack&S){S.base=(char*)malloc(MAX*sizeof(char));S.top=S.base;S.stacksize=MAX;}voidPush(Qstack&S,chare)//元素入栈{if(S.top-S.base=S.stacksize){S.base=(char*)realloc(S.base,(S.stacksize+STACKSIZE)*sizeof(char));S.top=S.base+S.stacksize;S.stacksize=S.stacksize+STACKSIZE;}*S.top=e;S.top++;18}voidGetTop(Qstack&S,char&e)//获取栈顶元素{if(S.base==S.top)return;e=*(S.top-1);}voidPop(Qstack&S,char&e)//出栈{if(S.base==S.top)return;S.top--;e=*S.top;}boolStackEmpty(Qstack&S)//判断栈是否为空{if(S.base==S.top)returntrue;elsereturnfalse;}//建立一个栈(浮点型)用于存储数据voidInitStack(SQstack&S){S.base=(double*)malloc(MAX*sizeof(double));S.top=S.base;S.stacksize=MAX;}voidPush(SQstack&S,doublee)//元素入栈{if(S.top-S.base=S.stacksize){S.base=(double*)realloc(S.base,(S.stacksize+STACKSIZE)*sizeof(double));S.top=S.base+S.stacksize;S.stacksize=S.stacksize+ST

1 / 25
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功