请告诉我如何创建一个C程序,找到由二维(2D)数组表示的5阶矩阵的转置。使用初始化列表在原始矩阵中使用如下所示的元素初始化2D数组。显示原始矩阵和转置。程序中只能有一个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
答案 0 :(得分: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");
}
}
答案 1 :(得分:1)
由于程序中只能有一个数组,因此有效的方法是将矩阵就地转置,这可以通过以下嵌套循环来完成。
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;
}
答案 2 :(得分: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;
}
}
}
答案 3 :(得分: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编译器中工作