WEB开发网
开发学院软件开发C++ 数据结构题集--数组(二维数组) 阅读

数据结构题集--数组(二维数组)

 2008-03-08 12:49:19 来源:WEB开发网   
核心提示:设计一个矩阵相乘的程序假设有 1 5 7 3 3 9 1 4 1 4A= 3 6 3 9 B= 5 6 7 9 0 3 1 2 8 7 3 2 7 2 5 6 0 3 1 9 9 7 4 7 8 0 3 2 5 4求出A*B的矩阵程序构思:我
设计一个矩阵相乘的程序
假设有 

  1  5  7  3       3  9  1  4  1  4
A= 3  6  3  9     B= 5  6  7  9  0  3
  1  2  8  7       3  2  7  2  5  6
  0  3  1  9       9  7  4  7  8  0
  3  2  5  4

求出A*B的矩阵
程序构思:
我们所知的矩阵乘法运算的算式如下:

Cij = Aik X Bkj  的k从1到 n 的和,那么可以用一个3层循环来运算此算式:

C(1,1)=A(1,1)*B(1,1)+A(1,2)*B(2,1)+A(1,3)*B(3,1)+A(1,4)*B(4,1)
    =(1*3)+(5*5)+(7*3)+(3*9)
    =3+25+21+27
    =76
同理
C(1,2)=A(1,1)*B(1,2)+A(1,2)*B(2,2)+A(1,3)*B(3,2)+A(1,4)*B(2,2)
    =(1*9)+(5*6)+(7*2)+(3*7)
    =9+30+14+21
    =74
依此类推,我们可以求得矩阵A与矩阵B的矩阵乘积。
void main(void)
{
   int matrixa[5][4]={1,5,7,3,
            3,6,3,9,
            1,2,8,7,
            0,3,1,9,
            3,2,5,4};
   int matrixb[4][6]={3,9,1,4,1,4,
            5,6,7,9,0,3,
            3,2,7,2,5,6,
            9,7,4,7,8,0};
   int matrixc[5][6];
   int i,j,k;
   for(i=0;i<5;i++)
     for(j=0;j<6;j++)
     {
       matrixc[i][j]=0;
       for(k=0;k<4;k++)
         matrixc[i][j]+=matrixa[i][k]*matrixb[k][j];
     }
  PRintf("The matrix A:\n");
   for(i=0;i<5;i++)
   {
     for(k=0;k<4;k++)
       printf("%5d",matrixa[i][k]);
     printf("\n");
   }
   printf("\nThe matrixb:\n");
   for(k=0;k<4;k++)
   {
      for(j=0;j<6;j++)
        printf("%5d",matrixb[k][j]);
     printf("\n");
   }
   printf("\nMatrix C=Matrix A* Matrix B\n");
   for(i=0;i<5;i++)
   {
     for(j=0;j<6;j++)
       printf("%5d",Matrixc[i][j]);
     printf("\n");
   }
}
运行结果:
The Matrix A:
1  5  7  3
3  6  3  9
1  2  8  7
0  3  1  9
3  2  5  4

The Matrix B:
3  9  1  4  1  4
5  6  7  9  0  3
3  2  7  2  5  6
9  7  4  7  8  0

Matrix C=Matrix A*Matrix B:
  76   74   97   84  60  61
  129  132  102  135  90  48
  100  86   99   87  97  58
  99  83  64  92  77  15
  70  77  68  68  60  48

二维数组行列互换
程序实例:
   设计一个能将二维数组转换成以列为主的一维数组和以行为主的一维数组。
   默认二维数组数据为:
      9  7  6  6
      3  5  3  3
   Data = 6  6  4  7
      7  5  1  4
      1  2  8  0
程序构思:
   依题意知道,本程序所运用的数据结构为“二维数组”,上报为进行数组以列为主和以行为主的转换。
已知该二维数组的大小为 5*4
以行为主的数组转换公式为:
   Data[i][j]的位置=(i*4)+j
以列为主的数组的转换公式为:
   Data[i][j]的位置=(j*5)+i
声明一个大小为20的一维数组,用来存久违转换以列为主后的数据,并声明一个大小为20的一维数组,用来存久违转换后以行为主的数据。
void main(void)
{
   int data[5][4]={ 9,7,6,6,
           3,5,3,5,
           6,6,4,7,
           7,5,1,4,
           1,2,8,0};
   int rawdata[20];
   int coldata[20];
   int i,j;
   printf("The Data of two dimensional array:\n");
   for(i=0;i<5;i++)
  {
     for(j=0;j<4;j++)
       printf("%4d",data[i][j]);
     printf("\n");
   }
   for(i=0;i<5;i++)
     for(j=-;j<4;j++)
       rowdata[i*4+j]=data[i][j];
   printf("\nThe Row Major Matrix:\n");
   for(i=0;i<20;i++)
     printf("%3d",rowdata[i]);
   printf("\n");
   for(i=0;i<5;i++)
     for(j=0;j<4;j++)
       coldata[j*5+i]=data[i][j];
   printf("\nThe Column Major Matrix:\n");
   for(i=0;i<20;i++)
 &nbs

Tags:数据结构 数组 二维

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接