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