0

到目前为止,我在这里尝试处理转置矩阵的每个人都是我的代码。

    void Transpose(int mt[][10], int m, int n)
{
  int c,d,temp;
  for (c = 0; c < m; c++)
    {
      for (d = c+1; d < n; d++)
        {
          temp = mt[c][d];
          mt[c][d]=mt[d][c];
          mt[d][c] = temp;
        }
    }
}
void print(int pose[][10], int m, int o)
{
  int i,j;
  for(i = 0; i < m; i++)
    {
      for(j = 0; j < o; j++)
        {
          printf("%d\n",pose[j][i]);
        }
    }
}
int main()
{
  /*The body of your source code will go here */
  int a[4][5] = {{1,2,3,4,5},{6,7,8,9,10},{10,9,8,7,6},{5,4,3,2,1}};
  printf("ARRAY: %d",a[][5]);
  Transpose();                                                               
  return (0);
}

这是我用于打印和转置矩阵的函数,但现在我试图将数组从我的 main.h 传递到函数中。我只是想知道如何声明 main 中可以传递给函数的数组。谢谢

4

3 回答 3

2

您的声明Transpose与您对它的使用不符。因为它被声明为:

void Transpose(int mt[][10], int m, int n) {...}

它应该被调用

Transpose(a, 4, 5);

还有,有什么10用?而且,声明

printf("ARRAY: %d", a[][5]);

不太可能工作。


您应该为变量选择更好的名称。代替mand n,使用nRowsand nColumns。使用rowandcolumn代替iand j

于 2013-09-23T00:14:06.640 回答
0

You can use the following code to do it.

#include<stdio.h>
// Print Matrix
void printArr(int *A, int row,int col)
{
    int i,j;
    for(i=0;i<row;i++)
    {
        printf("\n");
        for(j=0;j<col;j++)
            printf("%d\t",*(A+(col*i)+j));
    }
}

//Find the Transpose(TA) of Matrix(A) 
void Transpose(int *A,int *TA,int row,int col)
{
   int i,j;
   for(i=0;i<row;i++)
       for(j=0;j<col;j++)
       *(TA+(j*row)+i)=*(A+(col*i)+j);
}
// Start of Main
int main()
{
   int A[4][5]={{1,2,3,4,5},{6,7,8,9,10},{10,9,8,7,6},{5,4,3,2,1}};
   int *TA=malloc(sizeof(int)*4*5); // Allocate Memory for TA
   int i,j;
   printf("Matrix A:");
   printArr(A,4,5); //Print Array A
   Transpose(A,TA,4,5); //Call Transpose
   printf("\nTranspose Matrix A:"); 
   printArr(TA,5,4); // Print Array TA
   return 0;
}

Output:

Matrix A:
    1   2   3   4   5   
    6   7   8   9   10  
    10  9   8   7   6    
    5   4   3   2   1
Transpose Matrix A:
    1   6   10  5   
    2   7   9   4   
    3   8   8   3   
    4   9   7   2   
    5   10  6   1   
于 2013-09-23T08:28:56.907 回答
0

C 编程语言不像其他编程语言那样记住数组的长度。这使得使用多维数组变得困难。

要在 C 中将多维数组作为参数传递,您要么必须在编译时知道数组的维度:

#define HEIGHT 10
#define WIDTH 13

void function_prototype(int M[HEIGHT][WIDTH]) {
  access M normally with M[y][x]
}

或者您必须传递一维数组和长度作为参数:

void function_prototype(int* M, int height, int width) {
  access M as M[y * width + x]
}

这很麻烦,但这是您为获得极快的阵列访问所付出的代价。

于 2013-09-23T09:35:57.407 回答