2014-12-04 76 views
-1

请指导我如何创建一个C程序,该程序可以找到由二维(2D)阵列表示的5阶矩阵的转置。使用初始化程序列表,用原始矩阵中的元素初始化二维数组。显示原始矩阵和转置。程序中只能有一个2D数组。Matrix 2D阵列的移调

实施例:

原始矩阵

1 2 3 4  5 

6  7  8  9  10 

11  12  13  14  15 

16  17  18  19  20 

21  22  23  24  25 

移调矩阵的:

1  6  11  16  21 

2  7  12  17  22 

3  8  13  18  23 

4  9  14  19  24 

5  10  15  20  25 
+1

请出示一些实际的代码来代表矩阵。 – Codor 2014-12-04 07:47:38

+0

你想换位矩阵吗?想想你如何扭转一个清单:你做了一系列交换,直到完成。现在考虑矩阵的情况:A [i,j] <-> A [j,i]。我在那里闻到一个嵌套循环... – 2014-12-04 07:49:46

回答

0

由于必须有在程序中仅一个阵列,一个有效的方法是转置矩阵在原地,这可以通过下面的嵌套循环来完成。

for(int i = 0; i < n; i++) 
{ 
    for (j = i+1; j < n; j++) // only the upper is iterated 
    { 
     swap(&(a[i][j]), &(a[j][i])); 
    } 
} 

下面的子例程将执行交换,其中使用指针int。在上面的调用代码中,这些是通过使用要交换的元素的地址获得的。

void swap(int* arg1, int* arg2) 
{ 
    int buffer = *arg1; 
    *arg1 = *arg2; 
    *arg2 = buffer; 
} 
+1

也不允许交换索引。 ( – FrancisDoy 2014-12-04 07:52:53

+0

)将矩阵转换到原位是否有效?如果是这样,可以通过遍历右上三角形并沿对角线交换条目来完成,但这也涉及到索引的交换,但矩阵之后显式存储 – Codor 2014-12-04 07:55:01

+0

是的我认为它是有效的 – FrancisDoy 2014-12-04 07:58:00

0
int array[5][5]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25}; 

//transpose 
cout<<"TRANSPOSE"<<endl; 
for(int i=0;i<=4;i++){ 
    for(int j=0;j<=4;j++) {  
    if(array[i]>array[j]){   
     int temp;    
     temp=array[i][j];    
     array[i][j]=array[j][i];     
     array[j][i]=temp; 
    }  
    } 
} 
0

由于问题只要求显示转置...这应该很容易。

int matrix[5][5] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25}; 
for(int i=0;i<5;i++) { 
    for (int j=0;j<5;j++) { 
     std::cout<<matrix[j][i]<<" "; 
    } 
    std::cout<<"\n"; 
} 

编辑1:printf的替代COUT得到它的C编译器的工作

3

给定矩阵的转置可以按照以下公式计算:

#include<stdio.h> 
void main() 
{ 
    int c,r,i,j; 
    printf("Enter number of rows and columns : "); 
    scanf("%d %d",&r,&c); 
    int arr[r][c]; 
    for(i=0;i<r;i++) 
    { 
     for(j=0;j<c;j++) 
     { 
      printf("\nEnter element : "); 
      scanf("%d",&arr[i][j]); 
     } 
    } 
    printf("\nOriginal array is : \n"); 
    for(i=0;i<r;i++) 
    { 
     for(j=0;j<c;j++) 
     { 
      printf("%d\t",arr[i][j]); 
     } 
     printf("\n"); 

    } 
    printf("\nTranspose array is : \n"); 
    for(i=0;i<c;i++) 
    { 
     for(j=0;j<r;j++) 
     { 
      printf("%d\t",arr[j][i]); 
     } 
     printf("\n"); 

    } 
}