小水 发表于 2013-7-16 23:34:58

求大神解析 考试急 数据结构 用户定义的多维数组

本帖最后由 小水 于 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;
}





澄蓝雨 发表于 2013-7-25 18:10:46

我来骗点鱼币,代码太长了,我还小,等我长大了在来回答
页: [1]
查看完整版本: 求大神解析 考试急 数据结构 用户定义的多维数组