我想尝试在转置矩阵上工作的每个人 到目前为止,这是我的代码。
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函数。我只是想知道如何声明main中的数组可以传递给函数。感谢
答案 0 :(得分:2)
您对Transpose
的声明与您对它的使用不符。因为它被声明为:
void Transpose(int mt[][10], int m, int n) {...}
应该由
调用Transpose(a, 4, 5);
另外,10
是什么?声明
printf("ARRAY: %d", a[][5]);
不太可行。
您应该为变量选择更好的名称。使用m
和n
代替nRows
和nColumns
。使用row
和column
代替i
和j
。
答案 1 :(得分: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
答案 2 :(得分: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]
}
这很麻烦,但这是你为极快的阵列访问付出的代价。