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

  • 格式:doc
  • 大小:275.61 KB
  • 文档页数:22

下载文档原格式

  / 22
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构课程设计报告

题目:迷你计算器

一、课程设计题目:迷你计算器

二、问题定义:(由教师指定)

功能要求:

( 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)