这是线代里面矩阵的基本运算
转置就是行和列的下标互换: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;
}
?没问题!运行一下还可以. 有问题欢迎留言。
转载请注明原文地址: https://mac.8miu.com/read-16125.html