|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 小水 于 2013-7-16 23:36 编辑
最近要做一个课程设计 里面有个void find(Naray &A) 函数看不懂特别是这里
for(i=0;i<A.dim;i++) cin>>a[i];
for(i=0;i<A.dim;i++)
{
for(j=i+1;j<A.dim;j++)multi=multi*A.bound[j].boundnum;
sum=sum+multi;
multi=1;
}
为什么会是dim 不应该是我输入的 下标 吗?如果我输入的是3维数组 [0...3][0...2][0...1]
如果查询[2][2][0] 我知道应该是2*3*2+2*2+0*1=16 所以是elem[16]
但是这个嵌套是怎么实现的呢?
源代码
#include<iostream>
using namespace std;
#define maxdim 3 //可定义数组的最大维数
#define maxnum 10 //定义数组的最大个数
#define max 100 //自定义数组中含的最大元素个数
typedef int ElemType;
typedef struct
{
ElemType lower; //下标下界
ElemType upper; //下标上界
int boundnum; //该维的坐标数目,如行数、列数
}Boundi; //第i维下标的上下界
typedef struct
{
int dim; //数组维数
Boundi bound[maxdim]; //各维的上下界
int total; //数组中的元素个数
int elem[max]; //将该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[i-1].lower;
cin>>A.bound[i-1].upper;
A.bound[i-1].boundnum=A.bound[i-1].upper-A.bound[i-1].lower+1;
total=total*A.bound[i-1].boundnum;
}
A.total=total; //数组中的元素个数
for(i=0;i<total;i++) //将该n维数组中的元素以行序为主序存储在一一维数组中,elem 为指向该数组的指针
A.elem[i]=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[i];
}
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[i].boundnum!=A.bound[i].boundnum)
{
cout<<"这两个多维数组不是同类型的,不能相互赋值!"<<endl;
return 0;
}
}
for(i=0;i<A.total;i++)
B.elem[i]=A.elem[i];
cout<<"赋值成功!"<<endl;
return 0;
}
//打印多维数组的有关信息
void printit(NArray A)
{
int i;
cout<<"这是一个"<<A.dim<<"维数组 NArray";
for(i=1;i<=A.dim;i++)
{
cout<<"["<<A.bound[i-1].lower<<"…"<<A.bound[i-1].upper<<"]";
}
cout<<" 该数组中所含元素个数为:"<<A.total<<endl;
}
//
void find(NArray&A)
{
int i,sum=0,multi=1,j;
int a[maxdim];
cout<<"请输入你所要查找的元素的下标:";
for(i=0;i<A.dim;i++) cin>>a[i];
for(i=0;i<A.dim;i++)
{
for(j=i+1;j<A.dim;j++)multi=multi*A.bound[j].boundnum;
sum=sum+multi;
multi=1;
}
cout<<"元素 NArray";
for(i=0;i<A.dim;i++)
cout<<"["<<a[i]<<"]";
cout<<"的值为:elem["<<sum<<"]="<<A.elem[sum]<<" 找到了对应的目标值!"<<endl;
cout<<"要更改这个值吗?Y-1,N-0:";cin>>i;
if(i==1)
{
cout<<"请输入替换的值:"<<endl;
cin>>j;
A.elem[sum]=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;
}
[/i][/i][/i][/i][/i][/i][/i][/i][/i] |
|