网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 网络学院 >> 程序设计 >> VC编程 >> 文章正文
  数据结构题集--数组(二维数组)            【字体:
数据结构题集--数组(二维数组)
作者:佚名    文章来源:不详    点击数:    更新时间:2007-8-1    
设计一个矩阵相乘的程序
假设有  

   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

站内文章搜索 高级搜索
文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
     directx 图形接口指南(…
     win2k下的api函数的拦截
     用crypto  api  实现公钥…
     根据别人的md5源码封装的…
     vc中使用gdi+合并jpg图片
     document/view的交互 --…
     windows下的函数hook技术
     windows api函数大全一
     用vc 6.0实现串行通信的…
     vc++技术内幕(第四版)…
  • 开发手记---JAVA数据库连接池

  • 解决JSP数据输入中文乱码问题

  • ava与数据库连接的四种方法

  • javabean+mysql数据库连接池

  • ymbian视图结构 在 CCoeCont…

  • 静态成员,友元,共享数据保…

  • VB.NET的数据库基础编程

  • 手把手教你做一个简单的VB数…

  • Delphi和C++数据类型对照表

  • 在delphi7下实现省市县的三级…

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    网络学院©2007 www.23book.net
    为您提供web编程,vb编程,vc编程,服务器架设管理,数据库设计等方面的知识 站长:David