2014-12-04 75 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"); 

    } 
}