迷你计算器数据结构课程设计报告
- 格式:doc
- 大小:275.61 KB
- 文档页数:22
数据结构课程设计报告
题目:迷你计算器
一、课程设计题目:迷你计算器
二、问题定义:(由教师指定)
功能要求:
( 1 )计算任意一个算术表达式的加法、减法、除法以及乘法。
( 2 )运算数为整数和小数
( 3 )人机界面自定义,要友好。如用户输入错误在计算之前可以修改。
三、需求分析
以明确的无歧义的陈述说明课程设计的任务,强调的是程序要做什么?并明确规定:
1、输入值的范围;
选择运算类型时的输入值范围为:0~8(选项);
实际运算的输入值范围为:实数范围。
2、输出的形式;
Int 、double、long、void,bool。
3、程序所能达到的功能;
界面友好,输错时可重新输入,可不断选择并运行程序,可自行选择并退出。
(1)四则运算
(2)复合算法
(3)简单取余
(4)n的m次方
(5)开根号
(6)进制转换
(7)阶乘运算
(8)倒数运算
4、算法涉及的基本理论分析:
迷你计算器所用到的是:
1)、栈的顺序存储结构的算法(结构类型定义),包括:
(1)初始化栈
(2)元素进栈(进栈)
(3)删除元素(出栈)
(4)读取栈顶元素
(5)判断栈是否为空
(6)清楚站内元素,释放动态存储空间
(7)遍历栈元素
2)、括号配对检查,分析:
在此算法中需要扫描待检查程序中的每一个字符,当扫描到每个大、中、圆左括号时,令其进栈,当扫描到每个大、中、圆右括号时,则检查栈顶是否为相应的左括号,若是则作退栈处理,若不是则表明出现了语法错误,应返回0。当扫描到程序文件结尾后,若栈为空则表明没有发现括号配对的错误,应返回1,反则表明栈中还有未配对的括号,应返回0。
3)、后缀表达式的求值算法,其基本思路是:把包含后缀算术表达式的一个字符串由一个字符指针参数所指向,每次从该字符串中读入一个字符,若它是空格则不作任何处理,若它是运算符则表明它的两个操作数已经在栈中,其中栈顶元素为运算符的后一个操作数,栈顶元素的前一个元素为运算符的前一个操作数,把它们弹出后进行相应运算并保存到一个变量中,否则,扫描的字符必为数字或小数点,应把从此开始的浮点数字符串转换为一个浮点数并存入变量中,然后把计算或转换得到的浮点数压入到栈中,依次向下扫描每一个字符并进行上述处理;
4)、中辍表达式转换为后辍表达式,其定义是把运算符放到运算对象的后面,其基本思路是:从头到尾扫描中缀表达式中的每一个字符,对于不同类型的字符进行不同情况的处理;
5)、自编的算法包括:
(1)四则运算
(2)复合算法
(3)简单取余
(4)n的m次方
(5)开根号
(6)进制转换
(7)阶乘运算
(8)倒数运算
(0)退出
6)、开始界面,退出界面。
5、题目研究和实现的价值。
实现了一般计算器的简单运算功能。
界面友好,多样化。
通过完成这样的程序我们可以学到更多的知识。学习一定要有实践,我们可以了解并塑造软件开发师的基本素质。
我们发现实现什么功能算法是核心。知道了算法思想就可以借助c语言,c++,java等语言来编程序。
四、算法设计
1、概要设计
阐述说明本算法中用到的所有数据结构的定义及其含义、主程序的流程以及各程序模块之间的层次(调用)关系。
(1).cpp文件分析:
↓Array
↓
(2) main 函数功能分析
(3)迷你calculation函数
(4)A
(4)B
3.详细设计
(1)实现概要设计中定义的所有数据类型;本次试验中我们主要用到了顺书
typedef double ElemType;
struct Stack
{
ElemType *stack;
int top;
int MaxSize;
};
(2)所有函数的接口描述;
1 初始化栈为空
void InitStack(Stack& S)
(1) 返回值类型:空
(2) 算法用途:栈的初始化
(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) 参数意义:栈中的所有元素
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(char* 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、返回类型值是:空
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)