这实际上是一个持续存在的问题。首先,我们的想法是从一维数组中附加一个矩阵。现在我希望它纯粹是2D。和第一次一样,我遇到了分段故障的问题,而且我不确定问题出在哪里,因为我不知道如何正确使用2D数组。程序崩溃时使用以下代码。我一直在摆弄它,但无法让它正常工作。
#include <stdio.h>
#include <stdlib.h>
#define ROWS 10
#define COLUMNS 10
void fillMatrix (int *matrix[ROWS][COLUMNS], int rows, int columns)
{
int i, j;
for(i = 0; i < rows; i++)
{
for(j= 0; j < columns; j++)
{
matrix[i][j] = (rand() % 10) + 1;
}
}
}
void printMatrix (int *matrix[ROWS][COLUMNS], int rows, int columns)
{
int i, j;
for(i = 0; i < rows; i++)
{
for(j= 0; j < columns; j++)
{
printf("%2d ", matrix[i][j]);
}
printf("\n\n");
}
}
void sumMatrix (int *matrix[ROWS][COLUMNS], int *matrixA[ROWS][COLUMNS], int *matrixB[ROWS][COLUMNS], int rows, int columns)
{
int i, j;
for(i = 0; i < rows; i++)
{
for(j= 0; j < columns; j++)
{
matrix[i][j] = *matrixA[i][j] + *matrixB[i][j];
}
}
}
int main()
{
int matrix[ROWS][COLUMNS], r, s, i;
srand((unsigned) time(NULL));
do{
printf("Rows and columns (min 1 1, max 10 10) ");
scanf("%d %d", &r, &s);
}while(r > ROWS || r < 1 || s > COLUMNS || s < 1);
int** matrixA;
matrixA=(int**)malloc(r*sizeof(int*));
for (i=0; i<r; i++)
matrixA[i]=(int*)malloc(s*sizeof(int));
printf("\nMatrix A:\n\n");
fillMatrix(matrixA, r, s);
printMatrix(matrixA, r, s);
int** matrixB;
matrixB=(int**)malloc(r*sizeof(int*));
for (i=0; i<r; i++)
matrixB[i]=(int*)malloc(s*sizeof(int));
printf("\nMatrix B:\n\n");
fillMatrix(matrixB, r, s);
printMatrix(matrixB, r, s);
int** matrixC;
matrixC=(int**)malloc(r*sizeof(int*));
for (i=0; i<r; i++)
matrixC[i]=(int*)malloc(s*sizeof(int));
printf("\nSummed up (Matrix C):\n\n");
sumMatrix(matrixC, matrixA, matrixB, r, s);
printMatrix(matrixC, r, s);
free(matrixA);
free(matrixB);
free(matrixC);
return 0;
}
答案 0 :(得分:0)
将time.h
添加到顶部并将函数参数声明为指向指针的指针,它应该可以工作。
现在你有一个三指针(一个2d指针数组)。对于所有类似的参数,将其更改为int ** matrix
。
同样,从函数内的矩阵运算中删除所有前置星号:
matrix[i][j] = *matrixA[i][j] + *matrixB[i][j];
应该是
matrix[i][j] = matrixA[i][j] + matrixB[i][j];
我删除了括号,所以答案不会太长,您可能应该将它们保存在代码中。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROWS 10
#define COLUMNS 10
void fillMatrix (int **matrix, int rows, int columns)
{
int i, j;
for(i = 0; i < rows; i++)
for(j= 0; j < columns; j++)
matrix[i][j] = (rand() % 10) + 1;
}
void printMatrix (int **matrix, int rows, int columns)
{
int i, j;
for(i = 0; i < rows; i++)
{
for(j= 0; j < columns; j++)
printf("%2d ", matrix[i][j]);
printf("\n\n");
}
}
void sumMatrix (int **matrix, int **matrixA, int **matrixB, int rows, int columns)
{
int i, j;
for(i = 0; i < rows; i++)
for(j = 0; j < columns; j++)
matrix[i][j] = matrixA[i][j] + matrixB[i][j];
}
int main()
{
//...
}