版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一、课程设计的基本任务数据结构是一门涉及多门课程的课程,难度较大,需要较好的C语言的程序设计和调试能力,如果学生能够按照要求,从时间和精力上保证完全的投入,相信能够有很大的收获,学生要发挥自主学习的能力,充分利用时间,安排好课设的时间计划,并在课设过程中不断检测自己的计划完成情况,及时的向教师汇报。数据结构课程设计是计算机科学与技术专业的主要实践性教学环节。在进行了专业基础课和数据结构课程的基础上,设计一个实际的应用软件,初步软件设计的基本方法,提高进行工程设计的基本技能及分析、解决实际问题的能力,为毕业设计和以后的工程实践打下良好的基础。二、课程设计的基本要求课程设计按照教学要求需要一周时间
2、完成,总共至少要上机调试程序10小时。对每个题目要有需求分析,在需求分析中,将题目中要求的功能进行叙述分析,并且设计解决此问题的数据存储结构,(有些题目已经指定了数据存储的,按照指定的设计),设计或叙述解决此问题的算法,描述算法建议使用流程图,进行算法分析指明关键语句的时间复杂度。给出实现功能的一组或多组测试数据,程序调试后,将按照此测试数据进行测试的结果列出来 。对有些题目提出算法改进方案,比较不同算法的优缺点。如果程序不能正常运行,写出实现此算法中遇到的问题,和改进方法;2 对每个题目要有相应的源程序(可以是一组源程序,即详细设计部分): 源程序要按照写程序的规则来编写。要结构清晰,重点函
3、数的重点变量,重点功能部分要加上清晰的程序注释。程序能够运行,要有基本的容错功能。尽量避免出现操作错误时出现死循环;3 最后提供的主程序可以象一个应用系统一样有主窗口,通过主菜单和分级菜单调用课程设计中要求完成的各个功能模块,调用后可以返回到主菜单,继续选择其他功能进行其他功能的选择。1、能力培养要求巩固和加深对数据结构的理解,提高综合运用本课程所学知识的能力。培养学生选用参考书,查阅手册及文献资料的能力。培养独立思考,深入研究,分析问题、解决问题的能力。过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。够按要求编写课程设计报告书,能正确阐述设计和实验结果,正确绘制系统
4、和程序框图。通过课程设计,培养学生严肃认真的工作作风,逐步建立正确的生产观念、经济观念和全局观念。2、学生提交课程设计报告要求1)设计题目2)设计目的3)设计内容4)程序流程图5)源程序6)软件测试报告(包括所用到的数据及结果)三、课程设计的基本步骤和方法1、学生以自学为主,独立完成设计任务,注重学生能力的培养。2、教师要注意按学生基础和能力提出要求,辅导时要有侧重,做到因材施教。对基础差的学生要勤检查多指导,对能力强的学生应提出更高的要求,增加些选作内容,充分发挥其潜力。3、教师要教书育人。要求学生从点滴开始,每步操作都要按规定去做,以培养严肃认真的科学态度。选定方案要考虑经济效益,坚持勤俭
5、节约的原则。要教育学生团结协作,遵守纪律,爱护公物。通过设计提高业务能力,提高思想觉悟。4、课程设计安排教师下达设计任务书任务书内容包括题目、主要技术指标和要求、给定条件及原始数据、所用仪器设备和参考资料及文献等。教师讲授必要的设计思路和设计方法。生完成预设计本阶段学生应明确任务,查阅资料及文献(主要自学),掌握工程设计基本方法,确定设计方案,进行设计分析,完成预设计。实验阶段经教师审查通过预设计方案后,即可进行编程调试。实验由学生独立完成,教师定时指导。设计总结阶段本阶段学生要认真完成课程设计报告书,整理技术资料,如有需要还应写出课程设计的心得体会和改进意见。课程设计报告书包括:设计任务及主
6、要技术指标、设计方案及论证结果、系统的原理框图、设计程序、实验结果、实验中主要问题及故障现象的分析及设计结论等。报告书中还应附实验数据、系统软硬件环境、使用说明及参考资料等。 郑州轻工业学院课 程 设 计 任 务 书题目 模拟计算器的程序 专业、班级 计算机科学与技术10-01 学号 541007010157 姓名 郑峰弓 主要内容、基本要求、主要参考资料等:主要内容:设计一个模拟计算器的程序,要求能对包含加、减、乘、除、括号运算符及SQR和ABS函数的任意整型表达式进行求解。设计要求:要检查有关运算的条件,并对错误的条件产生报警。参考资料:C+.C语言程序设计,数据结构(c语言版)完 成 期
7、 限: 2012-6-21 指导教师签名: 课程负责人签名: 2012年 6 月 21 日 郑州轻工业学院本科数据结构课程设计总结报告设计题目:模拟计算器的程序学生姓名:郑峰弓系 别:计算机科学与工程专 业:计算机科学与技术班 级:10级1班学 号:541007010157指导教师:卢冰 李晔2012 年 6 月 21 日一、 设计题目(任选其一)模拟计算器的程序要求能对包含加、减、乘、除、括号运算符及SQR和ABS函数的任意整型表达式进行求解。二、 运行环境(软、硬件环境)WindowXP环境下运行三、 算法设计的思想本程序采用栈的算法设计思想,为了实现算符优先算法,首先建立两个栈,一个字符
8、型栈YF,用于存储运算符,一个浮点型栈YS,用于存储运算数据。算法的基本思想:1. 建立两个空栈,将表达式起始符“n”为运算符压入栈底2. 顺序读取每个字符,每次读取判断是运算符还是数据,若是运算符则和运算符栈YF的栈顶元素进行优先性的比较,做相关的操作,若是数据符,将一个连续的数字字符读入到一个字符数组中,将这个字符数组,通过atof()函数将字符串转化成浮点型数据,然后将这个浮点数据压入YS数据栈,知道整个表达式读取完毕。四、 算法流程图略五、 算法设计分析1. 建立的两个栈,栈的操作方法都包括栈的建立InitStack(),入栈函数Push(),取栈顶元素函数GetTop(),出栈函数P
9、op(),判断是否是空栈函数StackEmpty(),两个栈分别进行运算符和运算数的相关操作。2. 对于一个表达式,进行求值应满足以下运算规则:先算乘除,后算加减;从左到右依次计算,先算括号里面的,后算括号外面的,遇到绝对值运算符A(A代表abs的缩写,表示进行绝对值运算,形式是(4-9)A 运算结果是5.00),和运算符S(S代表sqrt的缩写,表示进行开放运算形式是(2)S 运算结果是1.41),A和S的优先性是比“)”的优先性低一级。开方和取绝对值时一定要注意输入格式(表达式)A和(表达式)S。3. 运算符的游行先比较。Precede(char s1,char s2)比较两个字符的优先性
10、,若是S1的优先级高于S2的优先性,则返回 ,若是S1 的优先级高于S2的优先性,则返回 ,若是两个字符的优先级相同,则返回 = ,该函数中包括括号匹配问题,就是括号必须成对出现,若是不成对出现,将提示括号不匹配4. 合法运算符的判断Put()函数,只要是输入的运算符是 + - * / A S ,若是以上运算符Put()函数返回ture否则返回false5. 本程序还右容错处理,(1)栈空的时候将会提示空栈,计算机将响一下短笛退出系统(2)当遇到不合法字符,不是英文的字符,括号不匹配问题,计算机将响一下短笛退出系统(3)输入的表达式不符合数学运算比如:除数不能为0,开方的不能为负数,若是计算机
11、将响一下短笛退出系统6. 本程序优好的操作界面,主界面将会提示你能输入的运算符和运算数,每次运算一个表示结果是,系统将会提醒 是否继续操作,按Y键,表示继续进行表达式的运算,按N键计算机将响一下短笛退出系统。六、 运行结果分析 图1.图1表示,运行窗口的主界面,界面中提示你能输入的运算符和运算数的,防止用户输入不正确的字符,造成系统报错。图2.图2 表示加法运算图3.图3,表示减法运算图4,图4,表示单独的除法运算图5图5,表示单独的乘法运算图6,图6,表示取绝对值运算图7图7,表示开方运算图8图8,表示绝对值和开方的混合运算图9,图9,表示加减乘除的混合运算,按其优先性进行运算,程序将一个个
12、的获取表达式的字符,按照字符的顺序,字符的优先性进行相关的操作,每次读取进行判断,将字符按类别分别压入栈内。图10图10,表示混合运算的级取绝对值和开方运算图11图11,表示缺少左括号问题,报错后直接退出系统退出时计算机将给出一声短笛图12,图13图12,表示不符合数学运算(除数不能为0),图13,表示开方数不能为负数,报错后直接退出系统,退出时计算机将给出一声短笛图14图14,表示运行表达式后退出系统的操作,退出时计算机将给出一声短笛七、 收获及体会 本次课程设计的时间虽然很短,但是感觉收获颇深的。首先,对本学期所学的数据结构课程再次加深理解。这次我选择的课程设计的题目是 模拟计算器的程序,
13、程序设计采用栈的算法结构,当初学的时候感觉栈就是一种操作,没用真正感觉到它的用处,但是,这次让我深深地感觉到栈的强大的功能,再次加深了对栈的理解。其次,自己的能力也有很大的提高。第一是分析问题的能力,给一道题目,能很快的写出算法分析,知道用哪些和不用哪些,先设计整体算法,在进行细节算法。第二是解决问题的能力,写好程序要进行方法调试,总要出错的,运用所学的知识逐个解决问题。最后,同时也查到自己的不足之处,感觉也是大家的不足之处,平时的只靠老师布置的作业题来训练自己,是远远不够的,我们学计算机的平时应该多做一些练习,才能在最后在做课程设计时,不会手忙脚乱。还有就是,希望学校多给我们一些实践的环节。
14、附代码:#include#include#include#include#include#include#define MAX 20#define STACKSIZE 5/建立两个栈,一个运算符栈和一个操作数栈typedef struct char *base; char *top;int stacksize;Qstack;typedef struct double *base;double *top;int stacksize;SQstack;/建立一个栈(字符型)用于存储运算符void InitStack( Qstack &S)S.base=(char*)malloc(MAX*sizeof
15、(char);S.top=S.base;S.stacksize=MAX;void Push(Qstack &S,char e)/元素入栈 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+;void GetTop(Qstack &S,char &e)/获取栈顶元素 if(S.base=S.top) re
16、turn; e=*(S.top-1);void Pop(Qstack &S,char &e)/出栈 if(S.base=S.top) return; S.top-; e=*S.top;bool StackEmpty(Qstack &S)/判断栈是否为空if(S.base=S.top)return true;else return false;/建立一个栈(浮点型)用于存储数据void InitStack( SQstack &S)S.base=(double*)malloc(MAX*sizeof(double);S.top=S.base;S.stacksize=MAX;void Push( SQ
17、stack &S,double e)/元素入栈 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+STACKSIZE; *S.top=e; S.top+;void GetTop(SQstack &S,double &e)/获取栈顶元素 if(S.base=S.top) return; e=*(S.top-1);void Pop(SQstack &S
18、,double &e)/出栈 if(S.base=S.top) return; S.top-; e=*S.top;bool StackEmpty(SQstack &S)/判断栈是否为空if(S.base=S.top)return true;else return false;/计算器算法部分char Precede(char s1,char s2)/比较两个字符的优先性char f;switch(s2) case +: case -: if(s1=(|s1=n) f=; break; case *: case /: if(s1=*|s1=/|s1=) f=;/s1比s2的优先级别高 else
19、f=;/有括号的先运算括号内的 else f=;/有括号的先运算括号内的 else f=; break; /下面要涉及到括号匹配问题 case (: if(s1=) printf(括号不匹配!an); exit(0); else f=; break; case n: switch(s1) case n:f=; break; case (: printf(缺少右括号an); exit(0); default:f=; return f;/判断运算符,本运算符只支持英文运算符,若出现中文的运算符将判为违法运算符bool Put( char e)/若为所给运算符返回true,否则返回falseswit
20、ch(e) case +: case -: case *: case /: case (: case ): case A: case S: case n: return true; default : return false ;double Operate(double a,char f,double b)/四则运算,绝对值运算和开方运算switch(f) case +: return a+b;case -:return a-b;case *: return a*b;case A: return fabs(b); /A代表绝对值运算符,形式是 (2-3)A case S:if(b0)/判断开
21、方数是否为负数,若为负数将直接退出系统printf(error!an);exit(0);else return sqrt(b); /S代表开方运算符,形式是 (2)S 或(5+4)Sif(f=/)if(b=0)/判断除数是否为0,若是0将直接退出系统printf(error!an);exit(0);else return a/b;double computer()Qstack YF;/存字符SQstack YS;/存数据char x1;double d;double a,b,x; char c; /接收键盘字符串 char z12; /存放浮点型字符 int i; InitStack(YF);/建栈 InitStack(YS); Push(YF,n); c=getchar(); GetTop(YF,x1);/获取栈顶元素while(c!=n | x1!=n)if(Put(c)/若输入的是操作符switch(Precede(x1,c)/获取两个操作符的优先性case :Pop(YF,x1);Pop(YS,b);Pop(YS,a);Push(YS,Operate(a,x1,b);/进行数的运算,并将运算结果压入数据栈YSelse if(c=0 & c=0 & c=9|c=.)/若输入的是连续的整数或者浮点数zi+=c; /将连续的数的字符存入到字符数组中c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 子宫腺肌病早孕合并贫血终止妊娠的全程管理总结2026
- 膏霜类系列产品项目可行性研究报告模板-拿地备案
- 困境职业规划案例
- 2025北京十三中初三12月月考数学试题及答案
- 销售职业规划两年计划
- 2026 八年级上册数学《轴对称图形》课件
- 医院新业务管理制度
- 医院药品安全责任制度
- 华为作业质量奖惩制度
- 单位慢病工作制度
- 医疗废水处理方案设计
- 旅馆安全管理制度及应急预案
- 哈密鑫源矿业有限责任公司新疆哈密市白鑫滩铜镍矿采矿工程环评报告
- CJ/T 324-2010真空破坏器
- T/CECS 10293-2023压型钢板钢筋桁架楼承板
- 第四单元专题学习活动《孝亲敬老传承家风》 课件-2024-2025学年统编版语文七年级下册
- 煤矿智能化开采技术实习报告范文
- 单元式幕墙施工技术
- eras围手术期营养管理
- 重视心血管-肾脏-代谢综合征(CKM)
- 摄影中的光与色彩
评论
0/150
提交评论