我是C的新手,我正在学习" C&C编程作者:Stephen G. Cochan。我接受了下一次练习:
12.具有i行的矩阵M,j列可以转置为具有j行的矩阵N. 和i列只需设置N a,b的值等于M b的值,a为all a和b的相关值。a)编写一个transposeMatrix函数,它将一个4 x 5矩阵作为参数 和一个5 x 4矩阵。具有转换4 x 5矩阵的功能并存储 结果在5 x 4矩阵中。还要写一个主程序来测试函数。
我对这些论点做错了。
我得到的错误是: 警告:返回从指针生成整数而没有强制转换[默认启用]
传递'transposeMatrix'的参数1使得整数指针没有强制转换[默认启用]
期望'int(*)[5]'但是参数的类型是'int'(在我看来这样可以忽略)
等......所有关于论点.. 我知道代码并不完美,但我认为如果数组被正确返回并且参数被修复了它应该可以工作..但我找不到修复它的方法..
// Program to transpose M matrix to N matrix
#include <stdio.h>
int transposeMatrix(int matrixM[][5], int matrixN[][4]) {
int i, j;
i = 0;
j = 0;
for (i = 0; i < 4; i++) {
for (j = 0; j < 5; j++) {
matrixN[j][i] = matrixM[i][j];
}
}
return matrixN;
}
int main(void) {
int i, j;
int matrixM[4][5] = {{12, 25, 47, 87, 54},
{16, 89, 78, 63, 58},
{45, 21, 47, 62, 82},
{14, 56, 47, 41, 98}};
int matrixN[5][4];
transposeMatrix(matrixM[4][5], matrixN[5][4]);
i = 0;
j = 0;
for (j = 0; j < 5; j++) {
for (i = 0; i < 4; i++) {
printf("%i ", matrixN[j][i]);
}
printf("\n");
}
return 0;
}
答案 0 :(得分:1)
函数有两种方法可以将数据传递回调用者:
第一种方式涉及复制,而对于较大的值则效率低下。当需要返回大值而不复制,或者需要返回多个结果时,第二种方式是首选。
另一个问题是传递数组:你的调用应该传递没有索引的数组名,如下所示:
transposeMatrix(matrixM,matrixN);
您的代码正在使用第二种策略。但是,它不需要返回任何其他内容。因此,您的函数的正确返回类型应为void
,而不是int
。更改返回类型,并删除return语句以解决此问题。
答案 1 :(得分:0)
实际上上面链接的代码并没有真正起作用,它只是通过在printf()调用中用列切换行来打印转置矩阵,它并不像练习所要求的那样真正转置矩阵(你可以完全避免调用transposeMatrix,结果是一样的)。注意练习的措辞,你应该使用一个函数并将结果存储在 new 矩阵中。此外,在本书的这一点上,我们不应该使用指针(还)。
我就这样做了:
/*
A matrix M with i rows, j columns can be transposed into a matrix N having j rows and i columns
by simply setting the value of Na,b equal to the value of Mb,a for all relevant values of a and b.
Write a function transposeMatrix() that takes as an argument a 4 × 5 matrix and a 5 × 4
matrix. Have the function transpose the 4 × 5 matrix and store the results in the 5 × 4 matrix. Also
write a main() routine to test the function.
*/
#include <stdio.h>
void transposeMatrix(int matrix45[4][5], int matrix54[5][4])
{
int x, y;
for (x = 0; x < 4; x++)
for (y = 0; y < 5; y++)
matrix54[y][x] = matrix45[x][y];
}
int main(void)
{
int x, y;
int myMatrix[4][5] = { {0, 1, 2, 3, 4},
{5, 6, 7, 8, 9},
{10, 11, 12, 13, 14},
{15, 16, 17, 18, 19} };
int myTransposedMatrix[5][4];
printf("Original Matrix: \n\n");
for (x = 0; x < 4; x++)
{
for (y = 0; y < 5; y++)
{
printf("%3i", myMatrix[x][y]);
}
printf("\n");
}
transposeMatrix(myMatrix, myTransposedMatrix);
printf("\nTransposed Matrix: \n\n");
for (x = 0; x < 5; x++)
{
for (y = 0; y < 4; y++)
{
printf("%3i", myTransposedMatrix[x][y]);
}
printf("\n");
}
return 0;
}