我目前遇到的问题是在C中找到方形矩阵的转置。我使用的算法是创建一个二维数组来存储我想要找到的转置矩阵。然后我调用一个实际转换它的函数(因为数组通过引用传递),以便在调用函数后它被转置。 该函数的代码如下: -
//transpose of n by n matrix
#include<stdio.h>
void transpose(int arr[int][int]); //prototype declaration line 3
void transpose(int arr[int r][int c]){ //line 4
int i,j;
int matB[c][r];
for(i=0;i<c;i++){
for(j=0;j<r;j++){
matB[i][j]=arr[j][i];
}
}
for(i=0;i<r;i++){
for(j=0;j<c;j++){
arr[i][j]=matB[i][j];
}
}
}
int main(){
int n,i,j;
printf("enter the dimensions of square matrix :-");
int mat[n][n];
scanf("%d",n);
printf("please enter the elements of the matrix :-->\n");
for(i=0;i<n;i++){
for(j=0;j<n;j++){
scanf("%d",&mat[i][j]);
}
}
transpose(mat);
printf("the transpose of the given matrix is:- \n ");
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("%d\t",mat[n][n]);
}
printf("/n");
}
}
但我收到以下错误: -
第3行: - [错误]预期表达式&#39; int&#39;
第4行: - [错误]预期表达式&#39; int&#39;
第3行和第4行对应函数void()的原型声明和函数定义,如代码所示
我目前正在使用DEV C ++作为编译器.. 我的节目快照: - click here to see the snapshot of my program
这里&#39;编译时得到的错误: - click here to see the scanpshot of error i got
答案 0 :(得分:2)
上面的代码段有两个问题。
你可以这样做。
#define R 10
#define C 100
void transpose(int arr[][C]); // prototype declaration line 2
void transpose(int arr[][C]) { // line 3
int i, j;
int matB[C][R];
for (i = 0; i<C; i++) {
for (j = 0; j<R; j++) {
matB[i][j] = arr[j][i];
}
}
for (i = 0; i<R; i++) {
for (j = 0; j<C; j++) {
arr[i][j] = matB[i][j];
}
}
}
答案 1 :(得分:1)
将是
#define R 10
void transpose(int (*arr)[R]); // prototype declaration line 2
或
void transpose(int arr[][R]); // prototype declaration line 2
R
应该是一个常数。如果不是C99
void transpose(int r,int c, int (*arr)[r]){ // This will work as prototype
然后
void transpose(int r,int c, int (*arr)[r]){
....
}
更清晰易用
void transpose(int r,int c, int arr[c][r]){
如果您不理解,请记住2d数组(数组数组)转换为指向第一个元素的指针 - 第一个元素是一个数组,因此指向第一个元素的指针将是int (*)[]
。从那时起,早期的解决方案就来了。
例如,为了澄清先前的想法 - 传递单维数组也同样如此。假设你有这个功能,
int a[10];
f(a);
...
void f(int a[])
or
void f(int *a)
事情也在这里,第一个元素的衰变发生了。这只不过是int*
。