这是线代里面矩阵的基本运算
转置就是行和列的下标互换: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;
}
?没问题!运行一下还可以.
有问题欢迎留言。