




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
广东工业大学实验报告_自动化_学院_网络工程_专业_11(1)_班 学号_3111001286_姓名_纪俊鑫_ 成绩评定_ 教师签名 许亮实验_4.2_题目_多维数组_ 课程名称 数据结构A 多维数组一实验目的深入研究数组的存储表示方法和实现技术,熟悉广义表的存储结构的特性。二实验内容【问题描述】设计并模拟实现整型多维数组类型。【基本要求】尽管C和Passcal等程序设计语言已经提供了多维数组,但在某些情况下,定义用户所需的多维数组也是很有用的。通过设计并模拟实现多维数组类型,可以深刻理解和掌握多维数组。整型多维数组应具有一下基本功能:1) 定义整型多维数组类型,各维的下标是任意整数开始的连续整数;2) 下标变量赋值,执行下标范围检查;3) 同类型数组赋值;4) 字数组赋值;5) 确定数组的大小。三实验步骤(可选)#include#include #include #include #include #includeusing namespace std;#define MaxDim 5typedef struct int dim, /数组维数 *upper, /数组上界的指针 *lower, /数组下界的指针 *constants, /数组映像函数常量表 *data, /数组元素内容 num, /数组总个数 pis; /元素在数组中位置 如五维数组各维上界为5,下界为0 / a01005 的pis为NArray;void Open() /用户选择界面 cout 功能选项:n 1.定义一个整型多维数组.(最多为5维)n 2.输出你所创建的多维数组的总个数.n 3.多维数组进行多种赋值 .n 4.子数组覆盖.令子数组b赋值于子数组a,如:a2.43.5=b1.32.4.n 5.输出你所创建的多维数组的某个元素.n 6.帮助.n 7.清屏,并返回到主画面.n 0.退出.nn 请输入你选择执行的选项:;void InitNArray(NArray &A) /定义整型多维数组 int i,x,y,z,p,j,key=1,elemtotal,address=0; coutx; while(xMaxDim) cout你输入的维数超出处理范围!请重新输入!n x; A.dim=x; A.upper=(int *)malloc(A.dim *sizeof(int); /给A.upper分配空间 A.lower=(int *)malloc(A.dim *sizeof(int); /给A.lower分配空间 for(i=1;i=A.dim;i+) A.loweri=0; /给A.lower初始化为0 A.upperi=0; /给A.upper初始化为0 for(i=1;i=A.dim;i+) /循环输入多维数组各维的上下界 key=1; /设置标志 while(key) /循环输入多维数组各维的上界cout请输入你要创建的A.dim维数组第iy; while(y0)cout你输入的上界超出处理范围!请重新输入endl 请输入你要创建的A.dim维数组第iy; A.upperi=y; /将各维上界赋值给A.upperi,循环输入多维数组各维的下界 cout请输入你要创建的A.dim维数组第iz; while(z0) cout你输入的下界超出处理范围!请重新输入n 请输入你要创建的A.dim维数组第iz; A.loweri=z; /将各维下界赋值给A.loweri if(A.upperiA.loweri)key=0; else coutERROR:你所输入的下界大于上界,请按任意键返回!n; getch(); elemtotal=1; /初始化数组总个数为一个 for(i=0;i=1;-i) A.constantsi=(A.upperi+1-A.loweri+1+1)*A.constantsi+1; /映象函数常量的计算公式address=0; /初始化并计算元素的地址 for(i=1;i=A.dim;i+)address=address+A.constantsi*(A.upperi-A.loweri); /计算地址公式 for(i=0;i=address;i+)A.datai=0; /将所有元素赋值为0cout-你要创建的多维数组已经生成!-n 系统已经生成一个A.dim维数组a; for(p=1;p=A.dim;p+)coutx; coutn; /输出数组的形式 for(j=1;j=A.dim;j+) cout生成的A.dim维数组第j维的下标x的选择范围是:A.lowerj到A.upperjn;int Loc(NArray &A,int a5) /定位数组元素位置 int i,j,b5,key5 ,length5; for(i=1;i=5;i+) bi=0;lengthi=1; for(i=1;i=A.dim ;i+)bi=ai; for(i=1;iA.dim;i+) lengthi=A.upperi-A.loweri+1; key1=length3*length3*length4*length5; key2=length3*length4*length5; key3=length4*length5; key4=length5;A.pis=(b1-A.lower1)*key1+(b2-A.lower2)*key2+(b3-A.lower3)*key3+(b4-A.lower4)*key1+(b5-A.lower5)*key5+1; return A.pis;void Assign1(NArray &A) /对多维数组某个元素进行赋值 int i,key,address,data,a5; for(i=1;i=A.dim;i+) key=1; while(key) /循环输入进行赋值的元素各维下标 cout请输入你要进行赋值的A.dim维数组中的元素第iai-1; if(ai-1=A.loweri) key=0; else cout输入的下标超出定义的范围,请按任意键返回再输入!n; getch(); /输出提示语句你要存入的位置是Axx请输入你要对该元素赋值的内容 cout你要存入的位置是A.; for(i=0;iA.dim;i+) coutai; coutdata; address=0; /计算地址 for(i=1;i=A.dim;i+) address=address+A.constantsi*(ai-1-A.loweri); /地址计算公式 A.dataaddress=data; cout赋值成功.endl; /输出赋值结果 cout你对A.dim维数组进行赋值的结果是A; for(i=0;iA.dim;i+) coutai; cout=A.dataaddressn若要执行其他赋值操作请输入执行选项;返回主界面请输入0.n;void Assign2 (NArray &A) /对多维数组中指定的子数组赋值(未完成)int i,key,b10,address1,address2,k=1,data; /初始化变量 cout请输入子数组的第一个元素的下标: ; for(i=1;i=A.dim;i+) key=1; while(key) cout子数组第一个元素的下标ibi-1; if(bi-1=A.loweri) key=0; elsecoutERROR:你输入的下标的结果超出定义的范围,请按任意键返回重新输入!n; getch(); /循环输入子数组b最后一个元素的下标 cout请输入子数组的最后一个元素的下标: ; for(i=1;i=A.dim;i+) key=1; while(key) cout子数组最后一个元素的下标ibi+4; if(bi+4=A.loweri) key=0; else cout你输入的下标的结果超出定义的范围,请按任意键返回重新输入!n; getch(); cout你输入的子数组是Aendl; /输出子数组 for(i=0;iA.dim;i+)coutbi; cout到A; for(i=0;iA.dim;i+)coutbi+5; coutendl; cout请输入你要对该子数组所有元素赋值的内容:data; address1=0; address2=0; for(i=1;i=A.dim;i+) address1=address1+A.constantsi*(bi-1-A.loweri); for(i=1;i=A.dim;i+) address2=address2+A.constantsi*(bi+4-A.loweri); for(i=address1;i=address2;i+) A.datai=data; cout赋值结果为子数组:n; cout A; for(i=0;iA.dim;i+)coutbi; cout到A; for(i=0;iA.dim;i+)coutbi+5; coutdata; coutnn若要执行其他赋值操作请输入执行选项;返回主界面请输入0.n:; void Assign3 (NArray &A) /对数组所有元素进行赋值 int i,data,address; coutdata; A.constantsA.dim=1; for(i=A.dim-1;i=1;-i) A.constantsi=(A.upperi+1-A.loweri+1+1)*A.constantsi+1; /映象函数常量的计算公式 address=0; /初始化并计算元素的地址 for(i=1;i=A.dim;i+) address=address+A.constantsi*(A.upperi-A.loweri);/计算地址公式 for(i=0;i=address;i+) /数组所有元素为为用户输入的值 A.datai=data; cout已经对多维数组中的所有元素初始赋值为dataendl; coutnn若要执行其他赋值操作请输入执行选项;返回主界面请输入0.n:;void Assign(NArray &A) /对多维数组某个元素进行赋值或指定的子数组赋值 int i=-1; cout本模块可以实现以下功能请选择:n /输入选择操作 1.对多维数组某个元素进行赋值.n 2.对多维数组中指定的子数组赋值.n3.对多维数组所有元素赋值.n0.退出.ni; /输入功能选项 switch(i) case 1: Assign1(A); /对多维数组某个元素进行赋值 i=-1;break; /复位标志 case 2: Assign2(A); /对多维数组中指定的子数组赋值 i=-1;break; /复位 case 3: Assign3(A); /对数组所有元素进行赋值 i=-1;break; /复位标志 case 0:return ; /退出 default: coutn错误!你的输入结果不正确!请重新输入!n; /输入错误 return ; void Convey(NArray &A) /子数组赋值 int i,j,key,a10,b10,address1,address2,address3,address4,numa,numb,k=1; /初始化变量 for(i=0;i=A.dim;i+) ai=A.loweri; /初始化子数组a第一个元素的各维下标为起址值 ai+5=A.loweri; /初始化子数组a最后个元素的各维下标为起址值 bi=A.loweri; /初始化子数组b第一个元素的各维下标为起址值 bi+5=A.loweri; /初始化子数组b最后个元素的各维下标为起址值 while(k) /循环输入子数组a第一个元素的下标 cout请输入子数组a的第一个元素的下标:n; for(i=1;i=A.dim;i+) key=1; while(key) cout子数组a第一个元素下标iai-1; if(ai-1=A.loweri) key=0; else coutERROR:你输入的下标的结果超出定义的范围,请按任意键返回重新输入!n; getch(); cout请输入子数组a的最后一个元素的下标: ; for(i=1;i=A.dim;i+) key=1; while(key) /循环输入子数组a最后一个元素的下标 cout子数组a最后一个元素下标iai+4; if(ai+4=A.loweri) key=0; else cout你输入的下标的结果超出定义的范围,请按任意键返回重新输入!n; getch(); cout请输入子数组b的第一个元素的下标: ;/循环输入子数组b第一个元素的下标 for(i=1;i=A.dim;i+) key=1; while(key) cout子数组b第一个元素的下标ibi-1; if(ai-1=A.loweri) key=0; else cout你输入的下标的结果超出定义的范围,请按任意键返回重新输入!n; getch(); /循环输入子数组b最后一个元素的下标 cout请输入子数组b的最后一个元素的下标: ; for(i=1;i=A.dim;i+) key=1; while(key) cout子数组b最后一个元素的下标ibi+4; if(ai+4=A.loweri) key=0; else cout0;i-) numa=numa*(abs(ai-ai+5)+1);/计算子数组a的个数 numb=1; /初始化子数组b的个数 for(i=A.dim;i0;i-) numb=numb*(abs(bi-bi+5)+1);/计算子数组b的个数 if(numa=numb)k=0; /判断个数是否相等 else cout对不起,你输入的两个子数组的元素个数不同,无法进行!请按任意键返回再输入n; getch(); cout你输入的子数组a是A: ; /输出子数组a for(i=0;iA.dim;i+) coutai;cout到A:; for(i=0;iA.dim;i+)coutai+5;coutendl; cout你输入的子数组b是A: ; /输出子数组b for(i=0;iA.dim;i+)coutbi;cout到A:; for(i=0;iA.dim;i+)coutbi+5; coutendl; address1=0; /初始化子数组a的起始地址 address2=0; /初始化子数组a的结束地址 /进行子数组赋值 address3=0; /初始化子数组b的起始地址 address4=0; /初始化子数组b的结束地址 for(i=1;i=A.dim;i+) address1=address1+A.constantsi*(ai-1-A.loweri); /子数组a的起始地址计算公式 for(i=1;i=A.dim;i+) address2=address2+A.constantsi*(ai+4-A.loweri); /子数组a的结束地址计算公式 for(i=1;i=A.dim;i+) address3=address3+A.constantsi*(bi-1-A.loweri); /子数组b的起始地址计算公式 for(i=1;i=A.dim;i+) address4=address4+A.constantsi*(bi+4-A.loweri); /子数组b的结束地址计算公式 i=address1; j=address3; for(;j=address4&i=address2;)A.datai=A.dataj; i+; j+;cout你进行子数组赋值的结果是子数组b赋值于子数组a,即a=bn;void Size(NArray &A) /输出多维数组的总个数cout 你所创建的多维数组总个数的大小是:A.numendl;void Help() /帮助界面 cout*帮助界面*n1).多维数组的各维的下标是任意整数开始的连续整数.n2).多维数组的各维的下标的上界是指各维定义最大位置.n3).多维数组的各维的下标的下界是指各维定义开始位置.n4).当多维数组建立后,系统自动把多维数组中所有元素初始化为0.n 5).实现子数组赋值时应注意以下情况:n 1.a1.n=a2.n+1是数组元素前移,等价于:n for(i=1;i=n;i+) ai=ai+1;n 2. a2.n+1=a1.n是数组元素后移,等价于:n=n;i-) ai=ai+1;n*帮助*n; void Output(NArray &A) /输出多维数组中的元素 int i,key,address,data,a5; cout*输出多维数组*n 请输入你想输出的多维数组的位置:n; for(i=1;i=A.dim;i+) key=1; /设置标志 while(key) /循环输入元素各维下标 cout请输入要输出的元素在A.dim维数组中位置的第iai-1; if(ai-1=A.loweri) key=0; else cout你输入的下标超出定义的范围,请按任意键返回重新输入!n; getch(); address=0; /初始化并计算元素的地址 for(i=1;i=A.dim;i+) address=address+A.constantsi*(ai-1-A.loweri); /计算地址公式 data=A.dataaddress; cout你要输出的位置是A; /输出结果for(i=0;iA.dim;i+)coutai;cout=dataendl; cout*输出多维数组*nendli;/输入功能选项 getchar(); switch(i) /程序分支 case 1: InitNArray(A);j=1; /定义多维数组 i=-1; /复位标志 Open(); break; /回复用户选择界面 case 2: if(!j) /输出元素总个数 cout对不起!多维数组还未进行定义,请先定义多维数组!n; Open();break; /回到用户选择界面 Size(A); /输出元素总个数 i=-1; /复位标志 cout请输入你继续
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高中信息技术粤教版选修3教学设计-2.1.1 因特网的接入方式
- 新能源汽车工程专业实践基地建设的战略思路
- 个案工作考试题目及答案
- 强化信息技术与智能制造技术的融合应用
- 服装考评员考试题及答案
- 电气类专业课程体系改革中的信息化建设与应用
- 园艺基础试题及答案电大
- 桥梁装备生产线项目经济效益和社会效益分析报告
- 生命教育内容与方法的家校社协同创新探索
- 液流电池制造项目经济效益和社会效益分析报告
- 机动车检测工资格证考试题(附答案)
- 护士沟通技巧与人文关怀护理课件
- 2025年上半年海南三亚市知识产权保护中心选聘事业单位6人重点基础提升(共500题)附带答案详解
- 2025年辽宁现代服务职业技术学院单招综合素质考试题库附答案
- 电力电缆模拟题及答案
- 2025年药物制剂工(中级)考试题库(附答案)
- 仿古建筑施工常见问题及应对策略
- 辽宁省沈阳市2024-2025学年八年级上学期期末考试英语试题(含答案无听力原文及音频)
- 小班晨间活动体能大循环
- 绿化小型工程合同范例
- 涂层材料与叶轮匹配性研究-洞察分析
评论
0/150
提交评论