《C语言课程设计.简易计算器.报告.doc》由会员分享,可在线阅读,更多相关《C语言课程设计.简易计算器.报告.doc(17页珍藏版)》请在金锄头文库上搜索。
1、C语言课程设计-简易计算器xxxx大学信息科学与工程学院课程设计报告班 级: 通信工程一班 姓名 (学号): xxx 实验项目名称: 简易计算器 实验室(中心): 信息科学与工程学院信息技术实验室 指 导 教 师 : xxx 实验完成时间: 2012 年 6 月 19 日 目录一:课程设计题目3二:功能描述3三:概要设计4四:详细设计5五:测试结果及存在的问题9六:课程设计心得体会12七:附录12序号项目标准评分1系统演示(功能)(50%)按要求完成系统功能且界面友好容错能力强(45-50)按要求完成系统功能界面一般有较好的容错能力(40-44)基本完成系统功能有一定的容错能力(35-39)基
2、本完成系统功能(30-34分)未完成系统功能或他人代做或抄袭(15)2课程设计说明书(50%)课程设计书各项目认真填写,具有清晰的设计思路及软件测试结果分析(45-50)课程设计书各项目认真填写,具有较为清晰的设计思路并对软件测试结果进行了较为清晰的分析(40-44)课程设计书各项目认真填写,设计思路正确(35-39)课程设计书进行为较为认真的填写(30-34)课程设计书有未完成项或各项填写不属实或他人代做或抄袭(15)教师签字总分一、题目: 简易计算器设计二、功能描述: 此简易计算器根据算符优先算法原则可以计算由“+,-,*,/,(,)”组成的任意算术表达式的值。其中此程序中包含对负数和字符
3、数据转换功能。如:-9+(2+3)*9/8-5)/(-3);三、概要设计:根据算符优先算法设计将函数功能模块分布如下: 利用结构体数组中脚码的变换达到符号和数据进栈和出栈的目的。算符优先算法计算表达式的值 定义运算符栈和数据栈及各个函数的类型和数据的类型(自定义完成) 功能:完成栈的定义和初始化及函数的类型定义及运算符 集合定义. 字符型数据表达式的输入并对负数处理以符合算法规则(Translate函数完成) 功能:完成负数转换成(0-负数)形 N 式以便数据读入 (Translate). 判断表达式是否正确(Can函数完成) 功能:完成判断表达式是否符合 一般计算表达式规则(Can). Y运
4、算符和数据的进栈和出栈(自定义函数完成) 功能:完成运算符和数据的进栈 和出栈. 功能:完成数据算符优先级比较(Precede函数完成)字符型数据转换成浮点型数据(Getdouble函数完成) 转换和运算符 比较.数据运算的过程及输出(Operate和EvaluateExpression函数完成) 功能:完成函数调用以完成 数值计算.四、详细设计:各功能模块的实现过程如下: 1:栈的应用:通过运用结构体数组中top值的改变来达到数据进栈和出栈的目的,而栈的初始化只需将top的初始值赋为-1即可 ; 2:表达式负数的处理(由Translate函数完成): Y N Y N N Y结束返回新的数组s
5、it?(t为数组长度)i+1之后元素向后移一位,si+1=0si=(且si+1=-S数组首位加0S0=-?读入字符串数组(s)开始 算法说明:函数中,先扫描数组,若s0=-,则将数组的所有元素向后 移一位且首位赋值为0,若数组首位之后含有形如(-5)则将负号及其以后的元素全向后移一位且负号位置赋值为0,然后返回新的数组; i=i+1,t=t+1 3:表达式正误的判断(由Can函数完成): 函数说明: 函数中将错误归为几类:括号的完整性、运算符后的数据类型、除号后的数据不能为0、小数点及运算符不能多个在一起、右括号后的数据必须为运算符或结束标志;函数通过p和s记录对这些错误的判断,并返回结果;4
6、:进栈和出栈: 说明:运算符和数据的进栈是通过给结构体数组赋值并增加top的值来记录栈的栈顶元素的位置 以便取用;出栈是使top的减1后的那个数组中的数据作为新栈的栈顶元素,并返回栈顶元素.即实质上是通过改变数组的位置来达到进栈出栈; 5:字符串数据转换成浮点型数据(由Getdouble函数完成): 函数说明: 从字符数组的运算符开始扫描,直到遇到下一个运算符结束,然后将这两个运算符间的字符记录在数组S中,再用库函数atof将字符数据转换成浮点型数据并返回数据和数组a中新的元素的起点(即扫描到的第二个运算符); 6:算符优先级的比较: 函数说明: 此函数是记录运算符栈的栈顶元素在运算符集合中的位置与读入运算符在运算符集合中的位置,将这两个值作为运算符优先级表数组的脚码,然后返回这个元素所代表的字符; 7:算符优先算法求表达式的值的核心算法: 说明:此函数中使用两个工作栈,一个是OPTR,用以寄存运算符;另一个是OPND,用以寄存浮点型数据。基本思想是:首先置数栈为空栈,表达式的起始符号为#算符栈的栈底元素;然后依次读入表达式中的每一个字符,若为数则进