返回顶部

收藏

矩阵乘法

更多
/* 
  矩阵的乘法 :规定 只有当第一个矩阵的列数等于第二个矩阵
的行数时,两个矩阵才能相乘. m*n矩阵 乘以n*k矩阵结果为一个m*k的矩阵 

*/
#include<iostream>
using namespace std;

void Dispaly(int a[][30],int row,int col);   //矩阵元素显示函数
void Input(int a[][30],int row,int col);  //矩阵输入函数 
void Fuck(int sum[][30],int a[][30],int b[][30],int row,int col); //矩阵乘法 

int main()
{

    int a[30][30];
    int b[30][30];
    int sum[30][30];
    int row1,col1,col2; 
    while (1)
    { 
        cout<<"请输入第一个矩阵的行和列数:";
        cin>>row1;
        cin>>col1;
        Input(a,row1,col1);

        cout<<"第二个矩阵的行数已为"<<col1<<",请在输入列数:"<<endl;
        cin>>col2;
        Input(b,col1,col2); 

        cout<<"乘矩阵如下:"<<endl;
        Dispaly(a,row1,col1);
        cout<<"被乘矩阵如下:"<<endl;
        Dispaly(b,col1,col2);

        Fuck(sum,a,b,row1,col2);          
        cout<<"两矩阵的乘积为:"<<endl;
        Dispaly(sum,row1,col2);

    }
    system("pause");
    return 0;
}
//////////////////////////////////////////
void Input(int a[][30],int row,int col)  //矩阵输入函数
{
     int i,j;
     cout<<"请输入矩阵元素:"<<endl;
     for (i=0; i<row; i++)
     {
         for (j=0; j<col; j++)
         {
             cin>>a[i][j]; 
         }
     } 
}
//////////////////////////////////////////
void Dispaly(int a[][30],int row,int col)   //矩阵元素显示函数
{
     int i,j;

     for (i=0; i<row; i++)
     {
         for (j=0; j<col; j++)
         {
             cout<<a[i][j]<<"  ";
         }
         cout<<endl;
     }
}
////////////////////////////////////////////
void Fuck(int sum[][30],int a[][30],int b[][30],int row,int col) //矩阵乘法
{
     int i,j,h;
     int k = 0;

     int temp ;
     int mysum  = 0;
     for (i=0; i<row; i++)            //row 为乘矩阵的行数 
     {
         for (j=0; j<col; j++)       //col为被乘矩阵的列数 
         {
             for (h=0; h<col; h++)
             {
               temp =  a[i][h]*b[h][j];       //行乘以列 
               mysum  = mysum+temp;                   //行乘以列之和
             } 
             sum[i][k] = mysum;
             mysum = 0;
             k++; 

             if (k==col)
             {
                 k = 0;
             }
         }
     }
}
//该片段来自于http://outofmemory.cn

标签:c++,算法

收藏

0人收藏

支持

0

反对

0

»更多 您可能感兴趣的代码
  1. 2014-03-03 17:55:22每对结点之间最短路径的C++实现 by 千万不要郁闷
  2. 2014-04-17 21:20:07C++算法之数据查找 by niutao.linux
  3. 2014-05-13 16:11:58哈希表 by aiheng1988
  4. 2014-05-19 16:58:04约瑟夫问题 数组解决 by sxgkwei
  5. 2014-05-21 14:51:02金刚石图案算法 by 小项
  6. 2014-05-22 19:39:57二叉树的建立及递归遍历 by sxgkwei
  7. 2014-05-27 13:49:48化方阵为下三角阵 by 灵剑子
  8. 2014-06-05 11:08:41层次遍历二叉树 by niutao.linux
  9. 2014-06-15 18:31:24c++实现哈夫曼编码的代码 by sxgkwei
  10. 2014-06-26 13:02:20数据结构队列的应用 by aiheng1988
  11. 2014-07-12 11:24:11二叉树的中序遍历(非递归) by 小项
相关聚客文章
  1. dianlujitao 发表 2014-10-17 13:52:22 POJ 2388 Who’s in the Middle
  2. surgesoft 发表 2014-10-28 08:01:58 LeetCode OJ: Restore IP Addresses
  3. espace 发表 2015-07-18 17:43:14 Two Sum
  4. bystander 发表 2013-04-16 00:42:58 模板优先级队列及堆排序(C++实现)
  5. abyssss 发表 2014-05-20 03:23:39 数据结构 最小堆 数组实现
  6. dianlujitao 发表 2014-10-17 13:56:48 POJ 1611 The Suspects
  7. dianlujitao 发表 2014-10-17 14:11:26 POJ 1328 Radar Installation
  8. bystander 发表 2013-05-15 10:37:24 倒水问题求解(C++)
  9. bystander 发表 2013-04-01 10:12:37 [藏]关于B树的一篇文章
  10. lvfuyu 发表 2015-04-12 08:53:30 [hihocoder]矩阵快速幂
  11. lvfuyu 发表 2015-04-18 09:13:32 [hihocoder]二分查找
  12. dianlujitao 发表 2013-11-04 11:49:12 【NOIP2012提高组】Vigenère密码 模拟 打表

发表评论