矩阵的转置、加和乘法写入C++

简介: 矩阵的转置、加和乘法写入C++

这是线代里面矩阵的基本运算

转置就是行和列的下标互换:b[i][j]=a[j]][i]

相加矩阵的行列必须相同:c[i][j]=a[i][j]+b[i][j]

相乘矩阵a的m行*n列与矩阵b的n行*k列相乘得一个m行*k列的矩阵
行乘列:c[i][j]=a[i][j]*b[j][i]
(c矩阵是m行k列)

我写了一个c++的小程序,很简单!

#include<iostream>
#define maxsize 100
using namespace std;
void trasmat(int a[][maxsize],int b[][maxsize],int m,int n){
  for(int i=0;i<m;++i){
    for(int j=0;j<n;++j){
      b[j][i]=a[i][j];//转置 
    }
  }
}
void addmat(int a[][maxsize],int b[][maxsize],int c[][maxsize],int m,int n){
  for(int i=0;i<m;++i){
    for(int j=0;j<n;++j){
      c[i][j]=a[i][j]+b[i][j];//相加 
    }
  }
}
void mutmat(int a[][maxsize],int b[][maxsize],int c[][maxsize],int m,int n,int k){
  for(int i=0;i<m;++i){
    for(int j=0;j<k;++j){
      c[i][j]=0;
      for(int l=0;l<n;++l){
        c[i][j]+=a[i][l]*b[l][j];//相乘 
      }
    }
  }
}
void printmat(int c[][maxsize],int m,int n){
  for(int i=0;i<m;++i){
    for(int j=0;j<n;++j){
      cout<<c[i][j]<<" ";
    }
    cout<<"\n";
  }
}
int main(){
  cout<<"矩阵转置相加相乘\n";
  int input,m,n;
  int a[maxsize][maxsize],b[maxsize][maxsize],c[maxsize][maxsize];
  bool flag=1;
  while(flag){
    cout<<"\n矩阵的装置请按1  两个矩阵相加请按2  进行矩阵相乘请按3\n";
    cin>>input;
    switch(input){
      case 1:
        cout<<"输入需要转置矩阵的行数m和列数n:"<<endl;
        cin>>m>>n;
        cout<<"输入数据:\n";
        for(int i=0;i<m;++i){
          for(int j=0;j<n;++j){
            cin>>a[i][j];//输入 
          }
        }
        trasmat(a,b,m,n);
        cout<<"转置结果:\n";
        printmat(b,n,m);
        break;
      case 2:
        cout<<"输入第一个矩阵的行数m和列数n:"<<endl;
        cin>>m>>n;
        cout<<"第一个矩阵数据:\n";
        for(int i=0;i<m;++i){
          for(int j=0;j<n;++j){
            cin>>a[i][j];//输入 
          }
        }
        cout<<"第二个矩阵数据:\n";
        for(int i=0;i<m;++i){
          for(int j=0;j<n;++j){
            cin>>b[i][j];//输入 
          }
        }
        cout<<"相加结果:\n";
        addmat(a,b,c,m,n);
        printmat(c,m,n);
        break;
      case 3:
        cout<<"输入第一个矩阵的行数m和列数n:"<<endl;
        cin>>m>>n;
        cout<<"第一个矩阵数据:\n";
        for(int i=0;i<m;++i){
          for(int j=0;j<n;++j){
            cin>>a[i][j];//输入 
          }
        }
        int k;
        cout<<"输入第二个矩阵的行数n和列数k:"<<endl;
        cin>>n>>k;
        cout<<"第二个矩阵数据:\n";
        for(int i=0;i<n;++i){
          for(int j=0;j<k;++j){
            cin>>b[i][j];//输入 
          }
        }
        cout<<"相乘结果:\n";
        mutmat(a,b,c,m,n,k);
        printmat(c,m,k);
        break;
      default:
        cout<<"输入错误!!!\n";
        break;
    }
    cout<<"退出程序输入end,继续请输入again"<<endl;
    string s;
    cin>>s;
    if(s!="again"&&s!="end"){
      cout<<"指令错误重新输入\n";
      cin>>s;
    }
    if(s=="again"){
      flag=true;
    }
    else if(s=="end"){
      flag=false;
    }
  }
  return 0;
} 

?没问题!运行一下还可以.

有问题欢迎留言。

目录
相关文章
|
3月前
|
算法 测试技术 C++
【动态规划】【矩阵快速幂】【滚动向量】C++算法552. 学生出勤记录 II
【动态规划】【矩阵快速幂】【滚动向量】C++算法552. 学生出勤记录 II
|
26天前
|
算法 测试技术 Serverless
【二分查找】【C++算法】378. 有序矩阵中第 K 小的元素
【二分查找】【C++算法】378. 有序矩阵中第 K 小的元素
|
2月前
|
传感器 人工智能 算法
掌握C++中的状态-事件回调矩阵:打造强大的有限状态机
掌握C++中的状态-事件回调矩阵:打造强大的有限状态机
39 0
|
2月前
|
存储 人工智能 算法
【C/C++ 数据结构 】三角矩阵的基本了解
【C/C++ 数据结构 】三角矩阵的基本了解
24 0
|
3月前
|
算法 测试技术 C++
【字符串】【 LCP】【C++算法】2573找出对应 LCP 矩阵的字符串
【字符串】【 LCP】【C++算法】2573找出对应 LCP 矩阵的字符串
|
3月前
|
算法 C++
【动态规划】【矩阵】C++算法329矩阵中的最长递增路径
【动态规划】【矩阵】C++算法329矩阵中的最长递增路径
|
3月前
|
C++
【PTA】​ L1-080 乘法口诀数列​(C++)
【PTA】​ L1-080 乘法口诀数列​(C++)
50 0
【PTA】​ L1-080 乘法口诀数列​(C++)
|
3月前
|
C++
【PTA】​L1-048 矩阵A乘以B​ (C++)
【PTA】​L1-048 矩阵A乘以B​ (C++)
34 0
【PTA】​L1-048 矩阵A乘以B​ (C++)
|
4月前
|
算法 Java Go
Rust每日一练(Leetday0018) N皇后II、最大子数组和、螺旋矩阵
Rust每日一练(Leetday0018) N皇后II、最大子数组和、螺旋矩阵
25 1
Rust每日一练(Leetday0018) N皇后II、最大子数组和、螺旋矩阵
|
5天前
|
编译器 C++
【C++】一文全解四种经典 [ 特殊类 ]的设计
【C++】一文全解四种经典 [ 特殊类 ]的设计