长整数四则运算 实验报告Word格式.docx

上传人:b****6 文档编号:16531120 上传时间:2022-11-24 格式:DOCX 页数:18 大小:181.21KB
下载 相关 举报
长整数四则运算 实验报告Word格式.docx_第1页
第1页 / 共18页
长整数四则运算 实验报告Word格式.docx_第2页
第2页 / 共18页
长整数四则运算 实验报告Word格式.docx_第3页
第3页 / 共18页
长整数四则运算 实验报告Word格式.docx_第4页
第4页 / 共18页
长整数四则运算 实验报告Word格式.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

长整数四则运算 实验报告Word格式.docx

《长整数四则运算 实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《长整数四则运算 实验报告Word格式.docx(18页珍藏版)》请在冰豆网上搜索。

长整数四则运算 实验报告Word格式.docx

参考文献19

第1章需求分析

1.1选题要求

1、实现一个任意长度的整数进行四则运算的演示程序

(1)运算过程分步骤显示

(2)完成含有加法和减法的四则运算(3)完成含有乘法和除法的四则运算(4)包含括号的四则运算

2、2个人对应完成2个人各自的任务

1.2选题背景和意义

(1)选题背景

操作系统老师曾经布置我们做一道斐波拉契数列和求30的阶乘,但是计算的结果很大,还不知道该做样的存储,老师告诉我们需要用高精度数的知识能将计算的结果存储起来,数据结构老师也曾经布置过一个实验题,是计算长整数的加法的,但是长整数的位数是固定的。

于是我们试想计算任意长度的整数是不是能把所有的四则运算问题解决。

(2)选题意义

我们选的这个课题能计算任意的四则运算,比如:

1234567+7654321=8888888

987654321-123456789=86419754

123*456=56088

84/42=2

586-25*15+8*(9*2-144/12)

=586-375+8*(18-12)

=586-375+8*6

=586-355+48

=211+48

=259

1.3选题目标

实现一个任意长度的整数进行四则运算的演示程序

(1)运算过程分步骤显示

(2)完成含有加法和减法的四则运算(3)完成含有乘法和除法的四则运算(4)包含括号的四则运算

1.4组员分配任务

我们组有两个成员,分别为吴成杰和徐文良,一个负责写主函数、函数整体的框架和写转换函数函数和对输入的字符进行处理,一个负责写出栈函数和写处理函数和拼接,程序出现错误,两个人一起在一起互相商量,修改。

第2章概要分析

2.1系统数据流图

2.2原始数据

(1)输入的长整数表达式为:

123456+987654

(2)输入的长整数表达式为:

654789234-123456789

(3)输入的长整数表达式为:

31456*506

2.3输出数据

(1)输出数据的结果为:

1111110

(2)输出数据的结果为:

531332445

(3)输出数据的结果为:

15916736

2.4对数据的处理

首先申请长度为200位的数组,将输入的长整数放在数组中,根据优先级的顺序,计算长整数的运算,并将结果放在200位的数组中,若出现溢位,则报错,否则输出。

2.5数据结构(存储方式)

为了实现长整数的加法,减法,乘法和除法,这几种运算都存在进位和借位以及移位等操作,因此选择双链表的结构体,考虑到数据的范围,使他只接受4个数字的整数,这样一个整数就分为若干段,每一段为4个数字,便于进位和借位以及位移的操作。

2.6模块分析

第3章详细设计

本系统分别用了三个结构体(字符串、操作符、操作数)和四个调用函数(transfer()、deal()、pop()、main())来实现。

transfer()函数主要实现用户输入的操作数字符转化为对应的整形数据。

deal()函数主要实现操作数与操作符相结合并计算结果。

pop()函数主要通过调用deal()来实现计算并出栈。

main()函数通过调用transter()、deal()、pop()函数实现了操作符+、—、*、/、()的优先级处理和计算结果。

第一模块

1.模块名称栈

2.模块功能栈的分配

3.、相关程序代码

typedefstructSqStack

{

SElemType*base;

//在栈构造之前和销毁之后,base的值为NULL

SElemType*top;

//栈顶指针

intstacksize;

//当前已分配的存储空间,以元素为单位

}SqStack;

//顺序栈

//构造一个空栈S。

intInitStack(SqStack*S)

//为栈底分配一个指定大小的存储空间

(*S).base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));

if(!

(*S).base)

exit(0);

//存储分配失败

(*S).top=(*S).base;

//栈底与栈顶相同表示一个空栈

(*S).stacksize=STACK_INIT_SIZE;

return1;

intPush(SqStack*S,SElemTypee)

if((*S).top-(*S).base>

=(*S).stacksize)//栈满,追加存储空间

{

(*S).base=(SElemType*)realloc((*S).base,

((*S).stacksize+STACKINCREMENT)*sizeof(SElemType));

if(!

exit(0);

//存储分配失败

(*S).top=(*S).base+(*S).stacksize;

(*S).stacksize+=STACKINCREMENT;

}

*((*S).top)++=e;

//这个等式的++*优先级相同,但是它们的运算方式,是自右向左

}

}第二模块

1.模块名称计算处理

deal()

2.模块功能运用+、—、*、/、()进行数据计算

N

3.相关程序代码

intPop(SqStack*S,SElemType*e)

if((*S).top==(*S).base)

return0;

*e=*--(*S).top;

//根据教科书P53表3.1,判断两符号的优先关系。

SElemTypePrecede(SElemTypet1,SElemTypet2)

SElemTypef;

switch(t2)

case'

+'

:

-'

if(t1=='

('

||t1=='

='

f='

<

'

;

else

>

break;

*'

/'

)'

printf("

ERROR1\n"

);

exit(0);

switch(t1)

f='

printf("

ERROR2\n"

default:

returnf;

第三模块

1.模块名称出栈

pop()

2.模块功能计算结果并出栈

intIn(SElemTypec)

switch(c)

case'

SElemTypeOperate(SElemTypea,SElemTypetheta,SElemTypeb)

SElemTypec;

switch(theta)

c=a+b;

break;

c=a-b;

c=a*b;

c=a/b;

returnc;

第四模块

1.模块名称主函数

EvaluateExpression()

2.模块功能主要实现操作符的优先级处理

3.流程图

4.相关程序代码

SElemTypeEvaluateExpression()

SqStackOPTR,OPND;

SElemTypea,b,d,x,theta;

charc;

//存放由键盘接收的字符串

charz[6];

//存放整数字符串

inti;

InitStack(&

OPTR);

//初始化运算符栈

Push(&

OPTR,'

//=是表达式结束标志

OPND);

//初始化运算数栈

c=getchar();

GetTop(OPTR,&

x);

while(c!

||x!

if(In(c))//是7种运算符之一

switch(Precede(x,c))

{

Push(&

OPTR,c);

//栈顶元素优先权低

Pop(&

OPTR,&

//脱括号并接收下一字符

theta);

//退栈并将运算结果入栈

Pop(&

OPND,&

b);

a);

OPND,Operate(a,theta,b));

}

elseif(c>

0'

&

c<

9'

)//c是操作数

i=0;

do

{

z[i]=c;

i++;

c=getchar();

}while(c>

z[i]=0;

d=atoi(z);

//将字符串数组转为整型存于d

Push(&

OPND,d);

else//c是非法字符

printf("

ERROR3\n"

GetTop(OPTR,&

GetTop(OPND,&

returnx;

intmain()

请输入算术表达式,负数要用(0-正数)表示,并以=结束\n"

例如:

4*5-(4+5)*2=\n"

%d\n"

EvaluateExpression());

system("

pause"

第4章系统说明书

本程序的运行结果是在DOS环境下实现的,界面会显示输入你要计算的四则运算表达式:

你可以随意的输入整数,包括加、减、乘、除以及括号运算,输入后,界面会显示你计算后的结果。

第5章系统测试

5.1登录时的界面

5.2进行加法运算时的界面

5.3进行减法运算时的界面

5.4进行乘法运算时的界面

5.5进行除法运算时的界面

5.6混合运算时的界面

5.7运算出错时的界面

系统会给出一个错误的答案。

项目总结

通过数据结构的课程设计我们学到了很多,长整数四则运算对于我们来说还是有一些困难无法解决,首先我们定义了三个结构体分别是:

字符串栈、操作数栈、操作符栈。

希望能用字符串栈的方法来解决长整数四则运算的问题,我们准备用大概两天的时间来完成编写源代码,因为时间和平时的训练不足,我们没有完成我们预期的目标所以最后还是参考了很多参考书和网络。

但是不幸的是我们最终仍没有完成单步显示和输入任意长整数得到正确的结果这两个功能并且我们的结果只能精确到10位。

虽然我们的课程设计有很多的不足,但是我们还是学到了很多东西,知道了如何用字符串来进行数的加、减、乘、除的运算,如何进行字符串和整型数间的相互转换,也知道了在进行一个表达式的四则运算时要先进运算符之间优先级的判断。

如果表达式中有括号时还要进行一系列复杂的判断,当然这主要运用栈的知识来进行处理。

这次课程设计我们不仅学习到我们在课堂上也许没有搞得很明白的问题,也使我们明白了,老师的讲解固然重要,但是我们自己对学习的热情和自学的能力也是我们能够进行继续深造必不可少的。

也许有些问题没有得到很好的解决,但是只有这样我们才能认识到自己的不足和缺点,并能够通过这种方法不断的进行改进。

我们这一组有四个成员也许有时会因为一点不同的意见会发生不愉快,但是为了能够完成课程设计这同一个任务我们都很快的冰释前嫌并达到共识,大家分工合作来完成这个看似简单但对于我们来说有一些困难的任务。

在这次实训中我们认识到需要学习的东西还有很多,只有上课认真听讲再适当的进行一些实际操作,才能使理论与实践更好的结合起。

我想通过这次实训会指导我们如何在以后的学习和生活中对待困难和与人相处,有时候只有和别人合作才能很好的完成一个工作。

最后,谢谢老师对我们这一个星期的指导。

参考文献:

【1】《数据结构(C语言版)》严蔚敏吴伟民北京:

清华大学出版社

【2】XX文库

数据结构课程设计评分表

题目

专业班级

计算机2009

(1)班

提交日期

小组成员

学号

姓名

分工和工作量

成绩

组员

1082088

吴成杰

主函数以及函数整体框架

1082100

徐文良

转换函数和对字符的处理函数

小组评分表

评分项目

分数

1、实现情况(15分)完成课程设计要求的情况。

2、系统分析(10分)对系统的理解及分析的深入程度。

3、系统设计(20分)总体设计、具体设计、数据结构设计等。

4、程序设计(30分)程序设计方法和编程工具掌握。

5、界面设计(15分)界面友好、操作方便等。

6、论文撰写(10分)论文撰写规范、合理等。

小组总成绩

指导教师评语

教师签名

日期

个人成绩和小组评分及指导教师评语由指导教师填写

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

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

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

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