//【例5.5】矩阵运算:矩阵转置与矩阵相乘。
#include <iostream>
#include <iomanip>
using namespace std;
void inverse(int [3][6], int [6][3]);
void multi(int [6][3], int [3][4], int [6][4]);
void output(int [6][4]);
int main(){
int middle[6][3], result[6][4];
int matrix1[3][6]={8,10,12,23,1,3,5,7,9,2,4,6,34,45,56,2,4,6};
int matrix2[3][4]={3,2,1,0,-1,-2,9,8,7,6,5,4};
inverse(matrix1,middle);
multi(middle,matrix2,result);
output(result);
return 0;
}
void inverse(int matrix1[3][6],int middle[6][3]){
int i,j;
for (i=0;i<3;i++)
for (j=0;j<6;j++)
middle[j][i]=matrix1[i][j];
return;
}
void multi(int middle[6][3],int matrix2[3][4],int result[6][4]){
int i,j,k;
for (i=0;i<6;i++){
for (j=0;j<4;j++){
result[i][j] = 0;
for (k=0;k<3;k++)
result[i][j]+=middle[i][k]*matrix2[k][j];
}
}
return;
}
void output(int result[6][4]){
int i,j;
cout <<"result"<<'\n';
for (i=0;i<6;i++){
for (j=0;j<4;j++)
cout <<setw(6)<<result[i][j];
cout<<'\n';
}
return;
}
要求:将此例题改为用一维数组,附加行、列参数,实现通用算法。
求解。。
C++二维数组改为一维数组使用的问题
答案:1 悬赏:70
解决时间 2021-02-21 11:33
- 提问者网友:星空下的寂寞
- 2021-02-20 14:59
最佳答案
- 二级知识专家网友:有钳、任性
- 2021-02-20 15:22
#include <iostream>
#include <iomanip>
using namespace std;
void inverse(int [3][6], int [6][3]);
void multi(int [6][3], int [3][4], int [6][4]);
void output(int [6][4]);
int main(){
int middle[6][3], result[6][4];
int matrix1[3][6]={8,10,12,23,1,3,5,7,9,2,4,6,34,45,56,2,4,6};
int matrix2[3][4]={3,2,1,0,-1,-2,9,8,7,6,5,4};
inverse(matrix1,middle);
multi(middle,matrix2,result);
output(result);
system("pause");
return 0;
}
void inverse(int matrix1[3][6],int middle[6][3]){
int i,j;
for (i=0;i<3;i++)
for (j=0;j<6;j++)
middle[j][i]=matrix1[i][j];
return;
}
void multi(int middle[6][3],int matrix2[3][4],int result[6][4]){
int i,j,k;
for (i=0;i<6;i++){
for (j=0;j<4;j++){
result[i][j] = 0;
for (k=0;k<3;k++)
result[i][j]+=middle[i][k]*matrix2[k][j];
}
}
return;
}
void output(int result[6][4]){
int i,j;
cout <<"result"<<'\n';
for (i=0;i<6;i++){
for (j=0;j<4;j++)
cout <<setw(6)<<result[i][j];
cout<<'\n';
}
return;
}
修改一下访问方式即可,修改后如下:
#include <iostream>
#include <iomanip>
using namespace std;
void inverse(int matrix1[],int m,int n,int middle[]){
int i,j;
for (i=0;i<m;i++)
for (j=0;j<n;j++)
middle[j*m+i]=matrix1[i*n+j];
return;
}
void multi(int middle[],int m1,int n,int matrix2[],int m2,int result[]){
//m1,n row col of middle;
//n,m2 row col of matrix2;
//m1,m2 row col of result
int i,j,k;
for (i=0;i<m1;i++){
for (j=0;j<m2;j++){
result[i*m2+j] = 0;
for (k=0;k<n;k++)
result[i*m2+j]+=middle[i*n+k]*matrix2[k*m2+j];
}
}
return;
}
void output(int result[],int m,int n){
int i,j;
//cout <<"result"<<'\n';
for (i=0;i<m;i++){
for (j=0;j<n;j++){
cout <<setw(m)<<result[i*n+j];
}
cout<<'\n';
}
return;
}
int main(){
int matrix1[18]={8,10,12,23,1,3,5,7,9,2,4,6,34,45,56,2,4,6}; //3,6
int middle[18];//6,3
int matrix2[12]={3,2,1,0,-1,-2,9,8,7,6,5,4};//3,4
int result[24];//6,4
cout << "matrix1:"<<endl;
output(matrix1,3,6);
inverse(matrix1,3,6,middle);
cout << "middle:" << endl;
output(middle,6,3);
multi(middle,6,3,matrix2,4,result);
cout << "middl * matrix2:"<<endl;
output(result,6,4);
system("pause");
return 0;
}
#include <iomanip>
using namespace std;
void inverse(int [3][6], int [6][3]);
void multi(int [6][3], int [3][4], int [6][4]);
void output(int [6][4]);
int main(){
int middle[6][3], result[6][4];
int matrix1[3][6]={8,10,12,23,1,3,5,7,9,2,4,6,34,45,56,2,4,6};
int matrix2[3][4]={3,2,1,0,-1,-2,9,8,7,6,5,4};
inverse(matrix1,middle);
multi(middle,matrix2,result);
output(result);
system("pause");
return 0;
}
void inverse(int matrix1[3][6],int middle[6][3]){
int i,j;
for (i=0;i<3;i++)
for (j=0;j<6;j++)
middle[j][i]=matrix1[i][j];
return;
}
void multi(int middle[6][3],int matrix2[3][4],int result[6][4]){
int i,j,k;
for (i=0;i<6;i++){
for (j=0;j<4;j++){
result[i][j] = 0;
for (k=0;k<3;k++)
result[i][j]+=middle[i][k]*matrix2[k][j];
}
}
return;
}
void output(int result[6][4]){
int i,j;
cout <<"result"<<'\n';
for (i=0;i<6;i++){
for (j=0;j<4;j++)
cout <<setw(6)<<result[i][j];
cout<<'\n';
}
return;
}
修改一下访问方式即可,修改后如下:
#include <iostream>
#include <iomanip>
using namespace std;
void inverse(int matrix1[],int m,int n,int middle[]){
int i,j;
for (i=0;i<m;i++)
for (j=0;j<n;j++)
middle[j*m+i]=matrix1[i*n+j];
return;
}
void multi(int middle[],int m1,int n,int matrix2[],int m2,int result[]){
//m1,n row col of middle;
//n,m2 row col of matrix2;
//m1,m2 row col of result
int i,j,k;
for (i=0;i<m1;i++){
for (j=0;j<m2;j++){
result[i*m2+j] = 0;
for (k=0;k<n;k++)
result[i*m2+j]+=middle[i*n+k]*matrix2[k*m2+j];
}
}
return;
}
void output(int result[],int m,int n){
int i,j;
//cout <<"result"<<'\n';
for (i=0;i<m;i++){
for (j=0;j<n;j++){
cout <<setw(m)<<result[i*n+j];
}
cout<<'\n';
}
return;
}
int main(){
int matrix1[18]={8,10,12,23,1,3,5,7,9,2,4,6,34,45,56,2,4,6}; //3,6
int middle[18];//6,3
int matrix2[12]={3,2,1,0,-1,-2,9,8,7,6,5,4};//3,4
int result[24];//6,4
cout << "matrix1:"<<endl;
output(matrix1,3,6);
inverse(matrix1,3,6,middle);
cout << "middle:" << endl;
output(middle,6,3);
multi(middle,6,3,matrix2,4,result);
cout << "middl * matrix2:"<<endl;
output(result,6,4);
system("pause");
return 0;
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯