长整数四则运算实验报告

上传人:j****9 文档编号:46288254 上传时间:2018-06-24 格式:DOC 页数:20 大小:637KB
返回 下载 相关 举报
长整数四则运算实验报告_第1页
第1页 / 共20页
长整数四则运算实验报告_第2页
第2页 / 共20页
长整数四则运算实验报告_第3页
第3页 / 共20页
长整数四则运算实验报告_第4页
第4页 / 共20页
长整数四则运算实验报告_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《长整数四则运算实验报告》由会员分享,可在线阅读,更多相关《长整数四则运算实验报告(20页珍藏版)》请在金锄头文库上搜索。

1、0“数据结构数据结构”课程设计报告课程设计报告长整数四则运算长整数四则运算学生姓名:学生姓名: 吴成杰 徐文良 指导教师指导教师: 陈 少 军 所所 在在 系:系: 电 子 信 息 系 所学专业:所学专业: 计 算机 科 学 与 技 术 年年 级级: 2010 计算机(1)班 1目目 录录第第 1 1 章章 需求分析需求分析.21.11.1 选题要求选题要求 .21.21.2 选题背景和意义选题背景和意义 .21.31.3 选题目标选题目标 .31.41.4 组员分配任务组员分配任务 .3第第 2 2 章章 概要分析概要分析.42.12.1 系统数据流图系统数据流图 .42.22.2 原始数据

2、原始数据 .42.32.3 输出数据输出数据 .42.42.4 对数据的处理对数据的处理 .52.52.5 数据结构(存储方式)数据结构(存储方式) .52.62.6 模块分析模块分析 .5第第 3 3 章章 详细设计详细设计.6第第 4 4 章章 系统说明书系统说明书.14第第 5 5 章章 系统测试系统测试.15项目总结项目总结.19参考文献参考文献.191第第 1 1 章章 需求分析需求分析1.11.1 选题要求选题要求1、实现一个任意长度的整数进行四则运算的演示程序 (1) 运算过程分步骤显示(2) 完成含有加法和减法的四则运算(3) 完成含有乘法和除法的四则运算(4) 包含括号的四则

3、运算2、2 个人对应完成 2 个人各自的任务1.21.2 选题背景和意义选题背景和意义(1)选题背景选题背景操作系统老师曾经布置我们做一道斐波拉契数列和求 30 的阶乘,但是计算的结果很大,还不知道该做样的存储,老师告诉我们需要用高精度数的知识能将计算的结果存储起来,数据结构老师也曾经布置过一个实验题,是计算长整数的加法的,但是长整数的位数是固定的。于是我们试想计算任意长度的整数是不是能把所有的四则运算问题解决。(2)选题意义选题意义我们选的这个课题能计算任意的四则运算,比如:1234567+7654321=8888888987654321-123456789=86419754123*456=

4、5608884/42=2586-25*15+8*(9*2-144/12)=586-375+8*(18-12)=586-375+8*6=586-355+482=211+48=2591.31.3 选题目标选题目标实现一个任意长度的整数进行四则运算的演示程序 (1) 运算过程分步骤显示(2) 完成含有加法和减法的四则运算(3) 完成含有乘法和除法的四则运算(4) 包含括号的四则运算1.41.4 组员分配任务组员分配任务我们组有两个成员,分别为吴成杰和徐文良,一个负责写主函数、函数整体的框架和写转换函数函数和对输入的字符进行处理,一个负责写出栈函数和写处理函数和拼接,程序出现错误,两个人一起在一起互相

5、商量,修改。第第 2 2 章章 概要分析概要分析2.12.1 系统数据流图系统数据流图3YN输入长整 数计算的 表达式对表达式进 行索引有乘除?先计算乘除, 将结果返回根据索引的方 向,计算加减将结果输出2.22.2 原始数据原始数据(1)输入的长整数表达式为:123456+987654(2)输入的长整数表达式为:654789234-123456789(3)输入的长整数表达式为:31456*5062.32.3 输出数据输出数据(1)输出数据的结果为:1111110(2)输出数据的结果为:531332445(3)输出数据的结果为:159167362.42.4 对数据的处理对数据的处理首先申请长度

6、为 200 位的数组,将输入的长整数放在数组中,根据优先级的顺序,计算长整数的运算,并将结果放在 200 位的数组中,若出现溢位,则4报错,否则输出。2.52.5 数据结构(存储方式)数据结构(存储方式)为了实现长整数的加法,减法,乘法和除法,这几种运算都存在进位和借位以及移位等操作,因此选择双链表的结构体,考虑到数据的范围,使他只接受 4 个数字的整数,这样一个整数就分为若干段,每一段为 4 个数字,便于进位和借位以及位移的操作。2.62.6 模块分析模块分析长整数的四则运算定 义 结 构 体转换函数处 理 函 数出 栈 函 数主 函 数第第 3 3 章章 详细设计详细设计本系统分别用了三个

7、结构体(字符串、操作符、操作数)和四个调用函数(transfer()、deal()、pop()、main())来实现。5transfer()函数主要实现用户输入的操作数字符转化为对应的整形数据。deal()函数主要实现操作数与操作符相结合并计算结果。pop()函数主要通过调用 deal()来实现计算并出栈。main()函数通过调用 transter()、deal()、pop()函数实现了操作符+、*、/、 ()的优先级处理和计算结果 。第一模块第一模块1.模块名称 栈2.模块功能 栈的分配3.、相关程序代码 typedef struct SqStack SElemType *base; / 在

8、栈构造之前和销毁之后,base 的值为 NULL SElemType *top;/ 栈顶指针 int stacksize;/ 当前已分配的存储空间,以元素为单位 SqStack; / 顺序栈 / 构造一个空栈 S。 int InitStack(SqStack *S) / 为栈底分配一个指定大小的存储空间 (*S).base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType); if( !(*S).base ) exit(0);/ 存储分配失败 (*S).top = (*S).base;/ 栈底与栈顶相同表示一个空栈 (*S).stac

9、ksize = STACK_INIT_SIZE; return 1; int Push(SqStack *S, SElemType e) if(*S).top - (*S).base = (*S).stacksize)/ 栈满,追加存储空 间 (*S).base = (SElemType *)realloc(*S).base, (*S).stacksize + STACKINCREMENT) * sizeof(SElemType); if( !(*S).base ) exit(0); / 存储分配失败 (*S).top = (*S).base+(*S).stacksize; (*S).stac

10、ksize += STACKINCREMENT; *(*S).top)+=e; / 这个等式的+ * 优先级相同,但是它们的运算方式,是自右向左6return 1; 第二模块第二模块1模块名称 计算处理deal()2模块功能 运用+、*、/、 ()进行数据计算3.相关程序代码int Pop(SqStack *S,SElemType *e)if(*S).top = (*S).base)return 0;*e = *-(*S).top;/ 这个等式的+ * 优先级相同,但是它们的运算方式,是自右向左return 1;/根据教科书 P53 表 3.1,判断两符号的优先关系。SElemType Pre

11、cede(SElemType t1,SElemType t2)SElemType f;switch(t2)case +:case -:if(t1=(|t1=)f=;break;N7case *:case /:if(t1=*|t1=/|t1=)f=;elsef=;break;case =:switch(t1)case =:f=;break;case (:printf(“ERROR2n“);exit(0);8default: f=;return f;第三模块第三模块 1.模块名称 出栈pop()2.模块功能 计算结果并出栈3.相关程序代码 int In(SElemType c) switch(c)

12、 case+:case-: case*: case/: case(: case): case=: return 1; default: return 0; SElemType Operate(SElemType a,SElemType theta,SElemType b) SElemType c; switch(theta) case+: c=a+b; break; case-: c=a-b; break; case*: c=a*b; break; case/:9c=a/b; return c; 第四模块第四模块 1.模块名称 主函数EvaluateExpression ()2.模块功能 主要

13、实现操作符的优先级处理3.流程图10开始输入字符串对字符串中的操作符处理操作符为: +、 、*、/、 ()?是否有 括号?为+或是否有 括号?为*或/调用 pop 计算并出 栈调用 pop 计算并出 栈NN括号是否 匹配?调用 pop 计算并出 栈Y出错N Y括号是否 匹配?Y调用 pop 计算并出 栈处理剩余操作数输出结果结束出 错NY114.相关程序代码SElemType EvaluateExpression() SqStack OPTR,OPND; SElemType a,b,d,x,theta; char c; / 存放由键盘接收的字符串 char z6; / 存放整数字符串 int i;InitStack( / 初始化运算符栈 Push( / =是表达式结束标志 InitStack( / 初始化运算数栈 c=getchar(); GetTop(OPTR, while(c!=|x!=) if(In(c) / 是 7 种运算符之一 switch(Precede(x,c) case:Po

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号