求大神解析 考试急 数据结构 用户定义的多维数组
本帖最后由 小水 于 2013-7-16 23:36 编辑最近要做一个课程设计 里面有个void find(Naray &A) 函数看不懂特别是这里
for(i=0;i<A.dim;i++)cin>>a;
for(i=0;i<A.dim;i++)
{
for(j=i+1;j<A.dim;j++)multi=multi*A.bound.boundnum;
sum=sum+multi;
multi=1;
}
为什么会是dim不应该是我输入的 下标 吗?如果我输入的是3维数组
如果查询 我知道应该是2*3*2+2*2+0*1=16 所以是elem
但是这个嵌套是怎么实现的呢?
源代码
#include<iostream>
using namespace std;
#define maxdim 3 //可定义数组的最大维数
#define maxnum 10 //定义数组的最大个数
#define max 100 //自定义数组中含的最大元素个数
typedefint ElemType;
typedefstruct
{
ElemType lower; //下标下界
ElemType upper; //下标上界
int boundnum; //该维的坐标数目,如行数、列数
}Boundi; //第i维下标的上下界
typedef struct
{
int dim; //数组维数
Boundi bound; //各维的上下界
int total; //数组中的元素个数
int elem; //将该n维数组中的元素以行序为主序存储在一一维数组中,elem 为
//指向该数组的指针
}NArray;
NArray creatone() //创建一多维数组
{
cout<<"******************创建一个多维数组******************"<<endl;
int n,i,total=1,j;
NArray A;
cout<<"*请输入要创建数组的维数:";
cin>>n;
A.dim=n; //数组维数
cout<<"*请输入所创建数组的各维的上下标:"<<endl;
for(i=1;i<=A.dim;i++) //各维的上下界
{
cout<<"*第"<<i<<"维:"<<endl;
cin>>A.bound.lower;
cin>>A.bound.upper;
A.bound.boundnum=A.bound.upper-A.bound.lower+1;
total=total*A.bound.boundnum;
}
A.total=total; //数组中的元素个数
for(i=0;i<total;i++) //将该n维数组中的元素以行序为主序存储在一一维数组中,elem 为指向该数组的指针
A.elem=0;
cout<<"*现在要初始化该数组的数值部分吗?Y-1,N(此时数组中各元素均为0)-0"<<endl;
cin>>j;
switch(j)
{
case 1:
{
cout<<"请以行序为主序输入该多维数组的"<<A.total<<"个元素:"<<endl;
for(i=0;i<total;i++)
cin>>A.elem;
}
case 0: ;
}
cout<<"******************数组创建成功!******************"<<endl<<endl;
return A;
}
//创建一多维数组,赋值函数
int qualify(NArray&A,NArray &B)
{
int i;
if(B.dim!=A.dim)
{
cout<<"这两个多维数组不是同类型的,不能相互赋值!"<<endl;
return 0;
}
for(i=0;i<A.dim;i++)
{
if(B.bound.boundnum!=A.bound.boundnum)
{
cout<<"这两个多维数组不是同类型的,不能相互赋值!"<<endl;
return 0;
}
}
for(i=0;i<A.total;i++)
B.elem=A.elem;
cout<<"赋值成功!"<<endl;
return 0;
}
//打印多维数组的有关信息
void printit(NArray A)
{
int i;
cout<<"这是一个"<<A.dim<<"维数组 NArray";
for(i=1;i<=A.dim;i++)
{
cout<<"["<<A.bound.lower<<"…"<<A.bound.upper<<"]";
}
cout<<"该数组中所含元素个数为:"<<A.total<<endl;
}
//
void find(NArray&A)
{
int i,sum=0,multi=1,j;
int a;
cout<<"请输入你所要查找的元素的下标:";
for(i=0;i<A.dim;i++)cin>>a;
for(i=0;i<A.dim;i++)
{
for(j=i+1;j<A.dim;j++)multi=multi*A.bound.boundnum;
sum=sum+multi;
multi=1;
}
cout<<"元素 NArray";
for(i=0;i<A.dim;i++)
cout<<"["<<a<<"]";
cout<<"的值为:elem["<<sum<<"]="<<A.elem<<" 找到了对应的目标值!"<<endl;
cout<<"要更改这个值吗?Y-1,N-0:";cin>>i;
if(i==1)
{
cout<<"请输入替换的值:"<<endl;
cin>>j;
A.elem=j;
}
cout<<"替换后的数组为:"<<endl;
for(i=0;i<A.total;i++)
cout<<A.elem<<" ";
cout<<endl;
}
//主函数
int main()
{
NArray a,b,c;
cout<<"*************分别创建三个多维数组如下:*************"<<endl<<endl;
a=creatone();
b=creatone();
c=creatone();
cout<<"创建的这三个数组的有关信息如下:"<<endl;
cout<<"多维数组a:";
printit(a);
cout<<"多维数组b:";
printit(b);
cout<<"多维数组c:";
printit(c);
cout<<endl<<"数组之间相互赋值的结果如下:"<<endl;
cout<<"将多维数组a的值赋给多维数组b ";
qualify(a,b);
cout<<"将多维数组a的值赋给多维数组c ";
qualify(a,c);
cout<<endl<<"随机存取数组中的指定元素:"<<endl;
find(a);
return 0;
}
我来骗点鱼币,代码太长了,我还小,等我长大了在来回答
页:
[1]