用C中的指针转置方阵。输出错误
目标是打印“矩阵”的转置 为了创建方阵,我从键盘上得到了“行”。 行与列相同,所以我只声明了“行” 我需要帮助的问题就在下面↓用C中的指针转置方阵。输出错误,c,matrix,C,Matrix,目标是打印“矩阵”的转置 为了创建方阵,我从键盘上得到了“行”。 行与列相同,所以我只声明了“行” 我需要帮助的问题就在下面↓ /*input*/ 5 4 1 9 0 1 6 5 7 /*output I want*/ 5 9 6 4 0 5 1 1 7 /*wrong output I get*/ 0 4 -30838770 0 7 2 0 5 7 这是我的密码。每个函数中的矩阵必须通过引用调用。我也想知道我是否做对了 //code start int Generate(int r
/*input*/
5 4 1
9 0 1
6 5 7
/*output I want*/
5 9 6
4 0 5
1 1 7
/*wrong output I get*/
0 4 -30838770
0 7 2
0 5 7
这是我的密码。每个函数中的矩阵必须通过引用调用。我也想知道我是否做对了
//code start
int Generate(int row, int (*Matrix)[row])
{
srand(time(NULL)); //make random number
int i, j;
printf("Matrix = ");
for(i=0; i<row; i++){
for(j=0; j<row; j++){
Matrix[i][j] = (rand() % 10); //insert random number from 0 to 10
printf("%d ", Matrix[i][j]); //print matrix before transposing
}
printf("\n");
}
return 0;
}
void Transpose(int row, int (*Matrix)[row])
{
int i, j;
for(i=0; i<row; i++){
for(j=0; j<row; j++){
int transpose[i][j];
transpose[i][j] = Matrix[j][i];
printf("%d ", transpose[i][j]);
}
printf("\n");
}
}
int main() {
int input; //for switch case
int row = 0; //row has to be 2 or 3
int Matrix[row][row]; //2d array. largest index should be Matrix [row-1][row-1]
while(1){
scanf("%d", &input);
switch(input){
case 1: // Generate random square matrix
scanf("%d", &row); //insert row
Generate(row, Matrix);
break;
case 2: //transpose matrix
Transpose(row, Matrix);
break;
default:
return 0;
}
}
}
//code end
//代码开始
int生成(int行,int(*矩阵)[行])
{
srand(time(NULL));//生成随机数
int i,j;
printf(“矩阵=”);
对于(i=0;i您的程序正在尝试打印转置,因此您不需要存储任何内容。使用转置[i][j]
删除所有内容,只需打印矩阵[j][i]
。正如注释中指出的,您正在分配(在堆栈上)每次迭代时都会出现一个新的ixj形矩阵,这毫无意义。您的程序正在尝试打印转置,因此您不需要存储任何内容。使用转置[i][j]
删除所有内容,只需打印矩阵[j][i]
。正如注释中指出的,您正在分配(在堆栈上)每次迭代时都会出现一个新的ixj形矩阵,这毫无意义。您在transpose()的内部循环的每次迭代中都会创建一个新矩阵
,这可能不是您想要做的。只需改进程序的用户交互。我不会得到任何像您这样的错误输出。您在转置()的内部循环的每次迭代中创建一个新矩阵
,这可能不是你想要做的。只要改进你程序的用户交互。我不会得到任何像你一样的错误输出。运行它,你会得到一个分段错误,当行>3
@Lucas为什么行大于3?为什么不大于3?这不是OP要求的。根据他,应该是2或更多3,没关系。但是如果row>3
。@Lucas循环变量转到row
。你到底在说什么?让我们来看看。运行它,你会得到一个分段错误,当row>3
。@Lucas为什么行大于3?为什么不大于3?这不是OP所问的问题。根据他,应该是2或3,这就是没关系。但是如果行>3
?@Lucas循环变量转到行
。你到底在说什么?我们来看看。