迷你计算器数据结构课程设计报告.doc

上传人:苏美尔 文档编号:6038824 上传时间:2020-08-25 格式:DOC 页数:22 大小:229.50KB
返回 下载 相关 举报
迷你计算器数据结构课程设计报告.doc_第1页
第1页 / 共22页
迷你计算器数据结构课程设计报告.doc_第2页
第2页 / 共22页
迷你计算器数据结构课程设计报告.doc_第3页
第3页 / 共22页
迷你计算器数据结构课程设计报告.doc_第4页
第4页 / 共22页
迷你计算器数据结构课程设计报告.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《迷你计算器数据结构课程设计报告.doc》由会员分享,可在线阅读,更多相关《迷你计算器数据结构课程设计报告.doc(22页珍藏版)》请在三一文库上搜索。

1、数据结构课程设计报告题目: 迷你计算器 一、课程设计题目:迷你计算器二、问题定义:(由教师指定)功能要求:( 1 )计算任意一个算术表达式的加法、减法、除法以及乘法。( 2 )运算数为整数和小数( 3 )人机界面自定义,要友好。如用户输入错误在计算之前可以修改。三、需求分析以明确的无歧义的陈述说明课程设计的任务,强调的是程序要做什么?并明确规定:1、输入值的范围; 选择运算类型时的输入值范围为 : 08(选项); 实际运算的输入值范围为 : 实数范围。2、输出的形式; Int 、double、long、void, bool。3、程序所能达到的功能;界面友好,输错时可重新输入,可不断选择并运行程

2、序,可自行选择并退出。(1)四则运算(2)复合算法(3)简单取余(4)n的m次方(5)开根号(6)进制转换(7)阶乘运算(8)倒数运算4、算法涉及的基本理论分析:迷你计算器所用到的是:1)、栈的顺序存储结构的算法(结构类型定义),包括:(1) 初始化栈(2) 元素进栈(进栈)(3) 删除元素(出栈)(4) 读取栈顶元素(5) 判断栈是否为空(6) 清楚站内元素,释放动态存储空间(7) 遍历栈元素2)、括号配对检查,分析:在此算法中需要扫描待检查程序中的每一个字符,当扫描到每个大、中、圆左括号时,令其进栈,当扫描到每个大、中、圆右括号时,则检查栈顶是否为相应的左括号,若是则作退栈处理,若不是则表

3、明出现了语法错误,应返回0。当扫描到程序文件结尾后,若栈为空则表明没有发现括号配对的错误,应返回1,反则表明栈中还有未配对的括号,应返回0。3)、后缀表达式的求值算法,其基本思路是:把包含后缀算术表达式的一个字符串由一个字符指针参数所指向,每次从该字符串中读入一个字符,若它是空格则不作任何处理,若它是运算符则表明它的两个操作数已经在栈中,其中栈顶元素为运算符的后一个操作数,栈顶元素的前一个元素为运算符的前一个操作数,把它们弹出后进行相应运算并保存到一个变量中,否则,扫描的字符必为数字或小数点,应把从此开始的浮点数字符串转换为一个浮点数并存入变量中,然后把计算或转换得到的浮点数压入到栈中,依次向

4、下扫描每一个字符并进行上述处理;4)、中辍表达式转换为后辍表达式,其定义是把运算符放到运算对象的后面,其基本思路是:从头到尾扫描中缀表达式中的每一个字符,对于不同类型的字符进行不同情况的处理;5)、自编的算法包括:(1)四则运算(2)复合算法(3)简单取余(4)n的m次方(5)开根号(6)进制转换(7)阶乘运算(8)倒数运算 (0)退出6)、开始界面,退出界面。5、题目研究和实现的价值。实现了一般计算器的简单运算功能。界面友好,多样化。通过完成这样的程序我们可以学到更多的知识。学习一定要有实践,我们可以了解并塑造软件开发师的基本素质。我们发现实现什么功能算法是核心。知道了算法思想就可以借助c语

5、言,c+,java等语言来编程序。四、算法设计1、概要设计阐述说明本算法中用到的所有数据结构的定义及其含义、主程序的流程以及各程序模块之间的层次(调用)关系。迷你计算器(1).cpp文件分析: 程序头函数 数据结构结构体定义自编头文件调用main 主函数minicalculation 调用运行程序(2) main 函数功能分析main开始 功能主界面选选项(0-8) N判断是否符合 Y1四则运算2复合运算3取余运算4n的m次方5开根号6进制转换7阶乘运算1倒数运算0退出结束界面()main结束(3)迷你calculation函数开始主界面 while(1) while(1) cinx(0-8)

6、 if(x=0 &xnchm N判断是否符合 YbreakswitchCase/倒数运算Case*开根号Case-Case+取余运算Case+四则运算 Chu()Cheng()Jian()Add() (4) B,C,D,E,F,G,H程序类似程序3详细设计(1)实现概要设计中定义的所有数据类型;本次试验中我们主要用到了顺书typedef double ElemType;struct StackElemType *stack;int top;int MaxSize;(2)所有函数的接口描述;1 初始化栈为空void InitStack(Stack& S)(1) 返回值类型:空(2) 算法用途:栈

7、的初始化(3) 参数意义:栈2进栈void Push(Stack &S, ElemType item)(1) 返回值类型:空(2) 算法用途:进栈(3) 参数意义:栈中的所有元素3桥3 出栈ElemType Pop(Stack &S)(1) 返回值类型:空(2) 算法用途:出栈(3) 参数意义:栈中的所有元素4 读取栈顶元素ElemType Peek(Stack &S)(1) 返回值类型:空(2) 算法用途:读取栈顶元素(3) 参数意义:栈中的所有元素5检查栈是否为空bool EmptyStack(Stack &S)(1) 返回值类型:空(2) 算法用途:检查栈是否为空(3) 参数意义:栈中的

8、所有元素6 清除线性表的所有元素void ClearStack(Stack &S)(1) 返回值类型:空值;(2) 算法用途:清除线性表的所有元素;(3) 参数S的意义:栈中的所有元素;7 遍历void TraverseStack(Stack &S)(1) 返回值类型:空值;(2) 算法用途:栈的遍历;(3) 参数S的意义:栈中的所有元素;8 括号配对检查bool BracketsCheck(char* a)(1) 返回值类型:逻辑类型;(2) 算法用途:对由a所指字符串为文件名的文件进行括号配对检查;(3) 参数的意义:文件中的括号;9 后缀表达式的求值算法double Compute(ch

9、ar* str)(1) 返回值类型:浮点类型;(2) 算法用途:计算由str所指字符串的后缀表达式的值;(3) 参数的意义:字符串中的运算符与空格;10 中辍表达式转换为后辍表达式int Precedence(char op)(1) 返回值类型:整型;(2) 算法用途:返回运算符op所对应的优先级数值;(3) 参数的意义:运算符;11、void Change(char* s1, char* s2)1、返回类型值:空2、change的算法含义:中辍表达式转换为后辍表达式3、参数s1、s2的意义:可以储存数据的栈12、void Transform(long num, int r)1、 返回类型值是

10、:空2、 Transform算法作用:转换进制3、 参数:num的意义:需要进行转换进制的数;r的意义:所需转换的进制数13、double add(double n, double m)1、返回类型:双精度2、add的算法作用:简单加法3、参数n ,m的意义:输入的数据14、double jian(double n, double m)1、返回类型:双精度2、jia的算法作用:简单加法3、参数n,m 的意义:输入的数据15、double cheng(double n, double m)1、返回类型:双精度2、cheng的算法作用:简单乘法3、参数n,m意义:输入的数据16 简单取余int q

11、uyu(int n, int m)1、返回类型:int 2、cheng的算法作用:简单取余3、参数n,m意义:输入的数据17 n的m次方double f(double n,int m )1、返回类型:double 2、cheng的算法作用:成方运算3、参数n,m意义:输入的数据18 简单开根号double sqroot(double n)1、返回类型:double 2、cheng的算法作用:开根号3、参数n,m意义:输入的数据19、阶乘运算long jiecheng(int n)1、返回类型:int 2、cheng的算法作用:阶乘运算3、参数n,m意义:输入的数据20 倒数double dao

12、shu(double n)1、返回类型:double 2、cheng的算法作用:倒数3、参数n,m意义:输入的数据(3)所有函数的算法描述(只需要写出伪码算法);1. 栈的初始化void InitStack(Stack& S)S.MaxSize=50; 开辟新的栈,产生了继续,失败退出。S.top=-1;2元素 进栈void Push(Stack &S, ElemType item)判断栈是否满,满了扩大一倍,不满继续;S.top+;S.stackS.top=item;3 出栈ElemType Pop(Stack &S) 判断站是否为空,是给提示,否继续。S.top-;return S.sta

13、ckS.top+1;4 读取栈顶元素ElemType Peek(Stack &S)判断站是否为空,是给提示,否继续。return S.stackS.top;5 检查栈是否为空bool EmptyStack(Stack &S)return S.top=-1;6 删除线性表的所有元素void ClearStack(Stack &S) 逐一删除栈元素。S.top=-1;S.MaxSize=0;7 遍历void TraverseStack(Stack &S)判断是否空,是退出,控制下标逐一输出。8 括号配对检查,复合运算错误判断bool BracketsCheck(char* a)建栈并初始化。 wh

14、ile(ai)switch(ai)case :case :case (:进栈;case :case : case ):分别读取栈顶元素判断,是出栈。判断错误输入并给出提示。 判断栈是否空,是返回真,否返回假9 后缀表达式的求值算法double Compute(char* str)建栈并初始化Str存在用switch分别讨论+ - * / 运算,并求值 ClearStack(S);10 中辍表达式转换为后辍表达式int Precedence(char op)+- 优先级低;*/ 优先级高void Change(char* s1, char* s2)建栈,并用出栈。入栈实现7+8 变为 7 8 +

15、 形式。12 简单加法double add(double n, double m)double sum=n+m;return sum;13 简单减法double jian(double n, double m)double a=n-m;return a;14 简单乘法double cheng(double n, double m)double a=n*m;return a;15 简单除法double chu(double n, double m)double a=n/m;return a;16 简单取余int chu(int n, int m)int a=n%m;return a;17 n的m

16、次方double f(double n,int m )m=0 时 直接返回1;m0 时 用递归实现 m0 时 用递归实现 20 倒数double daoshu(double n)double a=1/n;return a;21 迷你计算器void minicalculation() 主界面 while(1) 选选项(0-8)并判断。 if(x=1) 四则运算界面 if(x=2) 复合运算界面 if(x=3) 简单取余界面 if(x=4) n的m次方界面 if(x=5) 开根号界面 if(x=6) 进制转换界面 if(x=7) 阶乘运算界面 if(x=8) 倒数运算界面 if(x=0) 退出 退

17、出界面(3)对主程序和其他模块也都需要写出伪码算法(伪码算法达到的详细程度建议为:按照伪码算法可以在计算机键盘直接输入高级程序设计语言程序),可采用流程图 、N S 图或PAD图进行描述main开始 功能主界面选选项(0-8) N判断是否符合 Y1四则运算2复合运算3取余运算4n的m次方5开根号6进制转换7阶乘运算1倒数运算0退出结束界面()main结束五、算法实现六、软件测试这里的测试主要是基于功能的黑盒测试,所以首先提出测试的功能点,然后给出测试数据(包括正确的输入及其输出结果和含有错误的输入及其输出结果。)要求在附件里给出软件的基本数据和测试数据。具体情况见截屏或运行程序。日志七、技术讨

18、论(可选)八、收获与体会1. 学会了一定的c+知识。2. 自己编写了很多小程序。3. 学会了界面美化和程序健壮性。九、软件运行的部分截图及说明(1)主界面(有选择0-8,截图时少了一个),输入选项可运行相关内容。(2)输入1时:简单四则运算,输入格式已给出。输错可提示并重新输入。输入对时运算(只给出了加法,减法、乘法、除法类似,运行正常)(3)输入2时:复合四则运算,输入格式已给出,可有括号、加法、减法、乘法、除法混和运算。输错可提示并重新输入。输入对时运算(4)输入3 时:简单取余算法。输入0时:输入常数时:(5)输入4 时:n的m次方运算输入错误时,给出提示并可重新输入,直到输入正确为止:正数的正数次方:负数的正数次方:正数的负数次方(也可以运算,负数的负数次方)(6)输入5 时:开根号运算考虑到了负数不能开根号:正确的程序如下:(7)输入6 时:十进制转换成 2,4 , 6,8 进制(可选择),输入错时给出提示,并可重新输入,也可安全退出。二进制:四进制六进制八进制(8) 输入7 时:n的阶乘运算输入负数时给出提示,并重新输入:0的阶乘是1:输入正确时运行:(9) 输入 8 时: n的倒数运算(10) 输入0 时:退出界面

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1