版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机与通信工程学院 2015级数据结构课程设计实验报告数据结构课程设计多维数组班级学号学生姓名提交日期2017年1月12日成 绩 计算机与通信工程学院目录第一部分 需求分析1.1程序设计的任务21.2程序达到的功能21.3程序功能模块图和流程图21.4测试数据3第二部分 详细设计2.1用到的数据类型和数据结构定义42.2各个函数的基本操作和功能42.3各个函数的调用关系52.4主程序思路5第三部分 调试分析3.1遇到的问题及解决过程63.2设计过程中学到的知识73.3经验与体会7第四部分 用户手册4.1每一步骤的注释说明74.2整体思路7第五部分 测试结果5.1测试结果85.2附录-程序源码
2、9第一部分 需求分析1.1程序设计的任务1.1.1问题描述设计并模拟实现整型多维数组类型。1.1.2 基本要求设计并模拟实现多维数组类型。整型多维数组应具有以下基本功能: (1) 定义整型多维数组类型,各维的下标是任意整数开始的连续整数。 (2) 下标变量赋值,执行下标范围检查。 (3) 同类型数组赋值。 (4) 子数组赋值,例如 ,a1.n=a 2.n+1;a2.43.5=b1.32.4。 (5) 确定数组的大小。1.1.3选作内容 (1) 各维的下标是任意字符开始的连续字符。 (2) 数组初始化。 (3) 可修改数组的下标范围。1.2程序达到的功能 (1) 定义整型多维数组结构体,并定义各
3、维的的结构体。 (2) 下标变量赋值。 (3) 同类型数组赋值,不同类型赋值时检查出错误。 (4) 子数组赋值,例如 a1.n=a 2.n+1;a2.43.5=b1.32.4。 (5) 确定数组的大小。 (6) 数组初始化。 (7) 可修改数组的下标。1.3程序功能模块图和流程图图1 程序功能模块图图2. 程序流程图1.4 测试数据多维数组a:三维;下标1*22*33*5;赋值:1 2 3 4 5 6 7 8 9 10 11 12多维数组b:两维;下标1*22*3;赋值:1 2 3 4多维数组c;三维;下标2*33*44*6;赋值:2 3 4 5 6 7 8 9 10 11 12查找下标:a2
4、34,a135;替换值为原数值的复制,例如6改为66修改第2维的下标,保证原来数组个数不变第二部分 详细设计2.1 用到的数据类型和数据结构定义2.1.1第几维数组的结构体定义typedef structElemType lower; /定义每维数组的下界 ElemType upper; /定义每维数组的上界int boundnum; /定义每维数组中元素的个数 Boundi; /定义第i维数组2.1.2 多维数组结构体的定义typedef structint dim; /定义多维数组的维数 Boundi boundMAXDIM; /定义第i维数组int total; /定义数组中元素的个数
5、int elemMAXTOTAL; /数组中每个元素的地址,其中elem0为该多维数组的基址NArray; /定义多维数组2.2各个函数的基本操作及功能2.2.1 NArray CreatArray();多维数组创建并初始化函数2.2.2 int Replace(NArray &A,NArray &B);两个数组复制的函数2.2.3 void AdjustBound(NArray &A);修改下标的函数2.2.4 void FindSwap(NArray &A);查找并替换的函数2.2.5 void PrintArray(NArray A);打印输出函数2.2.
6、6 int main();主函数图3.程序子函数主函数截图2.3 各个函数之间的调用关系图4. 各个函数之间的调用关系2.4 主程序思路图5.主程序思路流程图第三部分 调试分析3.1 遇到的问题及解决过程3.1.1、在replace函数(即数组替换函数)中,当执行替换循环时,代码如下:for(i=0;i<A.total;i+)B.elemi=A.elemi; /把多维数组A赋值给B cout<<"*赋值成功*"<<endl; return 0;把return 0;放到了for循环里了。结果只a数组中只把第一个元素赋值给了c数组里,其他的元素仍没
7、有替换。3.1.2、在findswap函数中,给定数组下标求地址映像时遇到了困难,原因还是由二维数组类比到三维数组及多维数组出现了问题。三维数组可以想象成空间的数组,又由于c+中按行存储,所以举了个例子: A223的三维数组,求A221的地址,2Í3Í(2-1)+3Í(2-1)+1=10。公式为书上的公式: LOC(j1,j2,*,jn)=LOC(0,0,*,0)+(b2Í*ÍbnÍj1+b3Í*ÍbnÍj2+*+bnÍjn-1+jn)L。其中n维数组的映像函数。bn代表第i维数组元素的个数。可
8、缩写成LOC(j1,j2,*,jn)=LOC(0,0,*,0)+i=0nci*ji。3.2 设计过程中学到的小知识3.2.1、当输出结果中想调用数据时,即既想有输出的原文字又有想调用的数据时。可以用<< <<将想调用的部分给包含起来。我也是在网上搜集资料偶然发现的。具体例子就是输出函数PrintArray中的输出部分。如下截图中划线的部分:3.3 经验与体会 经过这次课设我意识到虽然数据结构课程已经结束,但是数据结构的学习还远远没有结束,作为计算机专业的学生,应当学好数据结构的知识点,把专业知识打牢。同时应当动手做一些程序设计的习题,虽然刚上手的时候有点难,只要肯钻研下
9、去,到问题解决的时候觉得自己收获还是挺大的。同时也是为了巩固自己数据结构的实习。我以后还会挑一些题做的。第四部分、 用户手册4.1每一步骤的注释说明注释说明已包含在源程序中,请详见附录中的程序代码,在此不再赘述。4.2 整体思路 我实现程序的功能的时候是把要求分成了几个功能函数,然后逐一的通过主函数调用功能函数,来判别自己的功能函数是否正确,而不是从前写到后一下写完的。我觉得一个功能一个功能的实现更简单些,而且出错了容易查错。具体思路在前面都已经描述,在此不再赘述。第五部分、测试结果5.1 测试结果截图5.2 程序源码#include <iostream>using namespa
10、ce std;#define MAXDIM 5 /定义数组的最大维数 #define MAXNUM 10 /定义每维数组的最大个数 #define MAXTOTAL 100 /定义数组元素的最大个数typedef int ElemType;typedef structElemType lower; /定义每维数组的下界 ElemType upper; /定义每维数组的上界int boundnum; /定义每维数组中元素的个数 Boundi; /定义第i维数组typedef structint dim; /定义多维数组的维数 Boundi boundMAXDIM; /定义第i维数组int tot
11、al; /定义数组中元素的个数 int elemMAXTOTAL; /数组中每个元素的地址,其中elem0为该多维数组的基址NArray; /定义多维数组 NArray CreatArray() /创建一个多维数组并初始化 int total=1;int n,i,j;NArray A; /定义多维数组A cout<<"请输入要创建数组的维数:"cin>>n; if(n>5)cout<<"超过数组的维数上限 请重新输入:"<<endl;cin>>n; A.dim=n;cout<<
12、"请输入每维数组的上下界:"<<endl;for(i=1;i<=A.dim;i+)cout<<"请输入第"<<i<<"维数组的上下界:"cin>>A.boundi-1.lower;cout<<endl;cin>>A.boundi-1.upper;A.boundi-1.boundnum=A.boundi-1.upper-A.boundi-1.lower+1;total=total*A.boundi-1.boundnum; A.total=total
13、; /统计出来数组中元素的个数for(i=0;i<total;i+)A.elemi=0;cout<<"是否要初始化数组?Y-1,N-0: "cin>>j;switch(j)case 1:cout<<"请以行序输入"<<A.total<<"个元素"<<endl;for(i=0;i<A.total;i+)cin>>A.elemi;/输入多维数组的元素 case 0:;/不执行操作,创建一个全为0的多维数组 cout<<"*
14、创建多维数组成功*" <<endl;return A; int Replace(NArray &A,NArray &B) /数组替换函数 int i;if(A.dim!=B.dim)cout<<"*这两个数组不是同类型的*"<<endl; /判断两个数组的维数是否相同 return 0; for(i=1;i<=A.dim;i+)if(A.boundi-1.boundnum!=B.boundi-1.boundnum)cout<<"*这两个数组不是同类型的*"<<en
15、dl; /判断两个数组各维的元素的个数是否相同 return 0; for(i=0;i<A.total;i+)B.elemi=A.elemi; /把多维数组A赋值给B cout<<"*赋值成功*"<<endl; return 0;void AdjustBound(NArray &A) /修改数组的下标int n;cout<<"想要修改第几维的上下界?请输入:"cin>>n;cout<<"请输入修改后的上下界:"cin>>A.boundn-1.lowe
16、r;cin>>A.boundn-1.upper;A.boundn-1.boundnum=A.boundn-1.upper-A.boundn-1.lower+1;cout<<"修改后的第"<<n<<"维元素的个数为:"<<A.boundn-1.boundnum<<endl; void FindSwap(NArray &A) /查找替换函数 int i,temptotal=1,sum=0,j;int aMAXDIM;cout<<"请输入你所查找的元素的下标:
17、" for(i=0;i<A.dim;i+)cin>>ai;for(i=0;i<A.dim;i+)temptotal=ai-A.boundi.lower;/给定数组下标的求映像地址的计算公式。举个例子A223的三维数组,求A221的地址,2*3*(2-1)+3*(2-1)+1=10。公式为书上的公式 for(j=i+1;j<A.dim;j+)temptotal=temptotal*A.boundj.boundnum;sum=sum+temptotal;cout<<"数组NArray"for(i=0;i<A.dim;i+
18、)cout<<""<<ai<<""cout<<"的值为:elem"<<sum<<"="<<A.elemsum<<" 找到了目标值"<<endl;cout<<"想要改变这个目标值吗?Y-1,N-0:"cin>>i;if(i=1)cout<<"请输入替换值"<<endl;cin>>j;A.ele
19、msum=j;cout<<"替换后的数组为:"<<endl;for(i=0;i<A.total;i+)cout<<A.elemi<<" " cout<<endl;void PrintArray(NArray A) /输出数组有关信息的函数 int i,j;cout<<"这是一个"<<A.dim<<"维数组NArray "for(i=1;i<=A.dim;i+)cout<<""<<A.boundi-1.lower<<""<<A.boundi-1.upper<<""cout<<"该数组的元素的个数为:&quo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 专业版股权质押权责明确协议样本一
- 科技驱动未来
- 元宵节数字营销解读
- 2025年度拆除工程噪音污染控制合同4篇
- 2025年度厂房设备租赁与绿色制造合同范本4篇
- 《中科院化学课件:不对称催化反应及其在药物合成中的应用》
- 二零二五年度腻子材料批发与零售合同3篇
- 2025年度厂区装卸工劳动保障政策宣传合同4篇
- 2025年度绿色环保型老旧厂房拆除及重建一体化工程合同4篇
- 2025年度高端医疗器械研发与生产合同4篇
- 《煤矿地质工作细则》矿安﹝2024﹞192号
- 平面向量及其应用试题及答案
- 2024高考复习必背英语词汇3500单词
- 消防控制室值班服务人员培训方案
- 《贵州旅游介绍》课件2
- 2024年中职单招(护理)专业综合知识考试题库(含答案)
- 无人机应用平台实施方案
- 挪用公款还款协议书范本
- 事业单位工作人员年度考核登记表(医生个人总结)
- 盾构隧道施工数字化与智能化系统集成
- 【企业盈利能力探析文献综述2400字】
评论
0/150
提交评论