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

上传人:b****5 文档编号:11978490 上传时间:2023-04-16 格式:DOCX 页数:29 大小:134.40KB
下载 相关 举报
迷你计算器数据结构课程设计报告.docx_第1页
第1页 / 共29页
迷你计算器数据结构课程设计报告.docx_第2页
第2页 / 共29页
迷你计算器数据结构课程设计报告.docx_第3页
第3页 / 共29页
迷你计算器数据结构课程设计报告.docx_第4页
第4页 / 共29页
迷你计算器数据结构课程设计报告.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

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

《迷你计算器数据结构课程设计报告.docx》由会员分享,可在线阅读,更多相关《迷你计算器数据结构课程设计报告.docx(29页珍藏版)》请在冰豆网上搜索。

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

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

数据结构课程设计报告

 

题目:

迷你计算器

一、课程设计题目:

迷你计算器

二、问题定义:

(由教师指定)

功能要求:

(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文件分析:

程序头函数

数据结构结构体定义

自编头文件调用

 

main主函数

minicalculation调用

 

运行程序

 

(2)main函数功能分析

main开始

 

功能主界面

 

选选项(0-8)

 

N

判断是否符合

 

Y

 

1

四则运算

2

复合运算

3

取余运算

4n的

m

次方

5

开根号

6

进制转换

7

阶乘运算

1

倒数运算

0

退出

 

结束界面()

 

main结束

 

(3)迷你calculation函数

开始

 

主界面

 

while

(1)

 

while

(1)

 

cin>>x(0-8)

 

if(x>=0&&x<=8)N

Y

break

 

0

8

7

6

5

4

3

2

1

B

程序

C

程序

D

程序

E

程序

F

程序

G

程序

H

程序

A

程序

 

结束界面()

 

结束

 

(4)A程序

 

1

界面

 

while

(1)

cin>>n>>ch>>m

 

N

判断是否符合

Y

break

switch

 

Case’/’

倒数运算

Case’*’

开根号

Case’-’

Case’+’

取余运算

Case’+’

四则运算

 

Chu()

Cheng()

Jian()

Add()

 

(4)B,C,D,E,F,G,H程序类似程序

 

3.详细设计

  

(1)实现概要设计中定义的所有数据类型;

本次试验中我们主要用到了顺书

typedefdoubleElemType;

structStack

{

ElemType*stack;

inttop;

intMaxSize;

};

(2)所有函数的接口描述;

1初始化栈为空

voidInitStack(Stack&S)

(1)返回值类型:

(2)算法用途:

栈的初始化

(3)参数意义:

2进栈

voidPush(Stack&S,ElemTypeitem)

(1)返回值类型:

(2)算法用途:

进栈

(3)参数意义:

栈中的所有元素

3桥3出栈

ElemTypePop(Stack&S)

(1)返回值类型:

(2)算法用途:

出栈

(3)参数意义:

栈中的所有元素

4读取栈顶元素

ElemTypePeek(Stack&S)

(1)返回值类型:

(2)算法用途:

读取栈顶元素

(3)参数意义:

栈中的所有元素

5检查栈是否为空

boolEmptyStack(Stack&S)

(1)返回值类型:

(2)算法用途:

检查栈是否为空

(3)参数意义:

栈中的所有元素

6清除线性表的所有元素

voidClearStack(Stack&S)

(1)返回值类型:

空值;

(2)算法用途:

清除线性表的所有元素;

(3)参数S的意义:

栈中的所有元素;

7遍历

voidTraverseStack(Stack&S)

(1)返回值类型:

空值;

(2)算法用途:

栈的遍历;

(3)参数S的意义:

栈中的所有元素;

8括号配对检查

boolBracketsCheck(char*a)

(1)返回值类型:

逻辑类型;

(2)算法用途:

对由a所指字符串为文件名的文件进行括号配对检查;

(3)参数的意义:

文件中的括号;

9后缀表达式的求值算法

doubleCompute(char*str)

(1)返回值类型:

浮点类型;

(2)算法用途:

计算由str所指字符串的后缀表达式的值;

(3)参数的意义:

字符串中的运算符与空格;

10中辍表达式转换为后辍表达式

intPrecedence(charop)

(1)返回值类型:

整型;

(2)算法用途:

返回运算符op所对应的优先级数值;

(3)参数的意义:

运算符;

11、voidChange(char*s1,char*s2)

1、返回类型值:

2、change的算法含义:

中辍表达式转换为后辍表达式

3、参数s1、s2的意义:

可以储存数据的栈

12、voidTransform(longnum,intr)

1、返回类型值是:

2、Transform算法作用:

转换进制

3、参数:

num的意义:

需要进行转换进制的数;r的意义:

所需转换的进制数

13、doubleadd(doublen,doublem)

1、返回类型:

双精度

2、add的算法作用:

简单加法

3、参数n,m的意义:

输入的数据

14、doublejian(doublen,doublem)

1、返回类型:

双精度

2、jia的算法作用:

简单加法

3、参数n,m的意义:

输入的数据

15、doublecheng(doublen,doublem)

1、返回类型:

双精度

2、cheng的算法作用:

简单乘法

3、参数n,m意义:

输入的数据

16简单取余

intquyu(intn,intm)

1、返回类型:

int

2、cheng的算法作用:

简单取余

3、参数n,m意义:

输入的数据

17n的m次方

doublef(doublen,intm)

1、返回类型:

double

2、cheng的算法作用:

成方运算

3、参数n,m意义:

输入的数据

18简单开根号

doublesqroot(doublen)

1、返回类型:

double

2、cheng的算法作用:

开根号

3、参数n,m意义:

输入的数据

19、阶乘运算

longjiecheng(intn)

1、返回类型:

int

2、cheng的算法作用:

阶乘运算

3、参数n,m意义:

输入的数据

20倒数

doubledaoshu(doublen)

1、返回类型:

double

2、cheng的算法作用:

倒数

3、参数n,m意义:

输入的数据

 

(3)所有函数的算法描述(只需要写出伪码算法);

1.栈的初始化

voidInitStack(Stack&S)

{

S.MaxSize=50;

开辟新的栈,产生了继续,失败退出。

S.top=-1;

}

2.元素进栈

voidPush(Stack&S,ElemTypeitem)

{

判断栈是否满,满了扩大一倍,不满继续;

S.top++;

S.stack[S.top]=item;

}

3.出栈

ElemTypePop(Stack&S)

{

判断站是否为空,是给提示,否继续。

S.top--;

returnS.stack[S.top+1];

}

4读取栈顶元素

ElemTypePeek(Stack&S)

{

判断站是否为空,是给提示,否继续。

returnS.stack[S.top];

}

5检查栈是否为空

boolEmptyStack(Stack&S)

{

returnS.top==-1;

}

6删除线性表的所有元素

voidClearStack(Stack&S)

{

逐一删除栈元素。

S.top=-1;

S.MaxSize=0;

}

7遍历

voidTraverseStack(Stack&S)

{

判断是否空,是退出,控制下标逐一输出。

}

8括号配对检查,复合运算错误判断

boolBracketsCheck(char*a)

{

建栈并初始化。

while(a[i])

{

switch(a[i])

{

case'{':

case'[':

case'(':

进栈;

case'}':

case']':

case')':

分别读取栈顶元素判断,是出栈。

判断错误输入并给出提示。

}

判断栈是否空,是返回真,否返回假

}

9后缀表达式的求值算法

doubleCompute(char*str)

{

建栈并初始化

Str存在用switch分别讨论+-*/运算,并求值

ClearStack(S);

}

10中辍表达式转换为后辍表达式

intPrecedence(charop)

{

+-优先级低;

*/优先级高

}

voidChange(char*s1,char*s2)

{

建栈,并用出栈。

入栈实现7+8变为78+形式。

}

12简单加法

doubleadd(doublen,doublem)

{

doublesum=n+m;

returnsum;

}

13简单减法

doublejian(doublen,doublem)

{

doublea=n-m;

returna;

}

14简单乘法

doublecheng(doublen,doublem)

{

doublea=n*m;

returna;

}

15简单除法

doublechu(doublen,doublem)

{

doublea=n/m;

returna;

}

16简单取余

intchu(intn,intm)

{

inta=n%m;

returna;

}

17n的m次方

doublef(doublen,intm)

{

m=0时直接返回1;

m>0时用递归实现

m<0时控制循环用递归实现

}

18简单开根号

doublesqroot(doublen)

{

doublea=sqrt(n);

returna;

}

19、阶乘运算

longjiecheng(intn)

{

n=0时1

n>0时用递归实现

}

20倒数

doubledaoshu(doublen)

{

doublea=1/n;

returna;

}

 

21迷你计算器

voidminicalculation()

{

主界面

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)退出

}

退出界面

}

 

(3)对主程序和其他模块也都需要写出伪码算法(伪码算法达到的详细程度建议为:

按照伪码算法可以在计算机键盘直接输入高级程序设计语言程序),可采用流程图、N–S图或PAD图进行描述

 

main开始

 

功能主界面

 

选选项(0-8)

 

N

判断是否符合

 

Y

 

1

四则运算

2

复合运算

3

取余运算

4n的

m

次方

5

开根号

6

进制转换

7

阶乘运算

1

倒数运算

0

退出

 

结束界面()

 

main结束

 

五、算法实现

迷你计算器

六、软件测试

这里的测试主要是基于功能的黑盒测试,所以首先提出测试的功能点,然后给出测试数据(包括正确的输入及其输出结果和含有错误的输入及其输出结果。

要求在附件里给出软件的基本数据和测试数据。

具体情况见截屏或运行程序。

minicalculation.h

minicalculation.cpp

日志日志.doc

七、技术讨论(可选)

八、收获与体会

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时:

退出界面

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

当前位置:首页 > 高中教育 > 小学教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1