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);
}
void transpose(int arr[][10] , int rows ,int cols){
int x = min(rows,cols); // minmum of rows or cols;
for(int i=0 ; i<rows ; i++){
for(int j=0 ; j<cols ; j++){
// first we will transpose the largest square matrix can form i.e(x X x) from given matrix
//,and then swap remaining elements
if(i<x && j<x ){
if(i<j)
swap(arr[i][j] , arr[j][i]);
}
else {
swap(arr[i][j] , arr[j][i]);
}
}
}
}
#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;
}
7条答案
按热度按时间jecbmhm31#
它适用于非方矩阵,但必须确保
mat2
的行数与mat
的列数匹配,反之亦然,即如果mat
是NxM
矩阵,则mat2
必须是MxN
矩阵。w8rqjzmb2#
这是你在应用程序中使用的实际代码吗?因为它是错误的。
for
语句的语法为:在您的情况下,您应该使用类似这样的内容:
这样就可以转置你的矩阵。当然,这样你就需要事先知道矩阵的维数。另一种方法是使用用户提供的数据动态初始化你的矩阵,如下所示:
这样你就可以动态地初始化一个矩阵,然后你可以像以前一样转置它。
xt0899hw3#
如果col是mat2中的行数(和mat中的列数),row是mat2中的列数(和mat中的行数),那么这应该有效。
你需要一个额外的 curl ,但我想你已经在你的代码。
h5qlskok4#
在c++中,具有预定义维数的非方阵转置的代码如下所示:
您可以替换为适当的头文件和print/scan语句,以便用C编写代码,或者从用户那里获取输入并实现相同的代码。
x7rlezfr5#
dbf7pr2w6#
bxgwgixi7#