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);
}

これは行列を印刷して転置するための私の関数ですが、今はメインから関数に配列を渡そうとしています。メインで関数に渡すことができる配列をどのように宣言するのか疑問に思っています。ありがとう

4

3 に答える 3

2

の宣言はTranspose、それの使用と一致しません。次のように宣言されているため:

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

それはによって呼び出されるべきです

Transpose(a, 4, 5);

また、何の10ためですか?そして、声明は

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

動作する可能性は低いです。


変数にはより適切な名前を選択する必要があります。との代わりにmnを使用nRowsnColumnsます。rowcolumnの代わりにiとを使用しjます。

于 2013-09-23T00:14:06.640 に答える
0

次のコードを使用してそれを行うことができます。

#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;
}

出力:

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 に答える