我有我的代码用于转置我的矩阵:
for(j=0; j<col; j++) {
for(k=0; k<row; k++) {
mat2[j][k] = mat[k][j];
}
它似乎适用于方形矩阵,但不适用于非方形矩阵。帮帮我们!
答案 0 :(得分:3)
它适用于非方形矩阵,但您必须确保mat2
中的行数与mat
中的列数相匹配,反之亦然。即,如果mat
是NxM
矩阵,则mat2
必须是MxN
矩阵。
答案 1 :(得分:2)
这是您在应用程序中使用的实际代码吗?因为这是错的。
for
语句的语法是:
for (Initialization; Condition to continue with the loop; Step Operation) {}
在你的情况下,你应该使用这样的东西:
#define COLS 10
#define ROWS 5
int mat[COLS][ROWS];
int mat2[ROWS][COLS];
int i, j;
for (i = 0; i < COLS; i ++) {
for (j = 0; j < ROWS; j++) {
mat2[j][i] = mat[i][j];
}
}
这样可以转置你的矩阵。 当然,这种方式您需要事先知道矩阵的尺寸。另一种方法是使用一些用户提供的数据来动态初始化矩阵,如下所示:
int ** mat;
int ** mat2;
int cols, rows;
int i, j;
/* Get matrix dimension from the user */
mat = (int **) malloc (sizeof(int *) * cols);
for (i = 0; i < cols; i++) {
mat[i] = (int *) malloc (sizeof(int) * rows);
}
这样你就可以用矩阵初始化一个矩阵,然后你可以像以前一样转置它。
答案 2 :(得分:0)
如果col是mat2中的行数(以及mat中的列),而row是mat2中的列数(以及mat中的行),那么这应该可行。
你需要一个额外的卷曲,但我认为你的代码中有这个。
答案 3 :(得分:0)
在c ++中使用预定义尺寸转换非方形矩阵的代码如下所示:
#include <iostream>
using namespace std;
int main()
{
int a[7][6],b[6][7],x,i,j,k;
/*Input Matrix from user*/
cout<<"Enter elements for matrix A\n";
for(i=0;i<7;i++)
{for(j=0;j<6;j++)
{
cin>>a[i][j];
}
}
/*Print Input Matrix A*/
cout<<"MATRIX A:-"<<endl;
for(i=0;i<7;i++)
{for(j=0;j<6;j++)
{
cout<<a[i][j];
}
cout<<endl;
}
/*calculate TRANSPOSE*/
for(i=0;i<7;i++)
{for(j=0,k=5;j<6;j++,k--)
{
x=j+(k-j);
b[x][i]=a[i][j];
}
}
/*Print Output Matrix B*/
cout<<"matrix B:-\n";
for(i=0;i<6;i++)
{for(j=0;j<7;j++)
{
cout<<b[i][j];
}
cout<<endl;
}
}
您可以使用适当的标题和print / scan语句替换以在C中编写代码,也可以从用户那里获取输入并实现相同的功能。
答案 4 :(得分:0)
#include<conio.h>
#include<ctype.h>
#include<iostream.h>
void trans(int [][10], int , int );
int main()
{
int a[10][10],n,m,i,j;
clrscr();
cout<<"Enter the no. of rows and Columns: ";
cin>>n>>m;
cout<<"\n Enter the Matrix now:";
for(i=0;i<n;i++)
for(j=0;j<m;j++)
cin>>a[i][j];
trans(a,n,m);
getch();
return 0;
}
void trans( int a[][10] , int n , int m )
{
int i,b[10][10],j;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
b[j][i]=a[i][j];
}
cout<<"\n\nSize before Transpose "<<n<<"x"<<m<<"\n\n";
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
cout<<b[i][j]<<"\t";
cout<<"\n";
}
cout<<"\n\nSize after transpose "<<m<<"x"<<n;
}
答案 5 :(得分:-1)
#include<conio.h>
#include<stdio.h>
main()
int a[5][5],i,j,t;
clrscr();
for(i=1;i<=4;i++)
{
for(j=1;j<=5;j++)
scanf("%d",&a[i][j]);
}
for(i=1;i<=4;i++)
{
for(j=i;j<=5;j++)
{
if(i<=4&&j<=4)
{
t=a[j][i];
a[j][i]=a[i][j];
a[i][j]=t;
}
else
a[j][i]=a[i][j];
}
}
for(i=1;i<=5;i++)
{
for(j=1;j<=4;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
getch();
}