这是我编写的一个小程序,用于将 2 个方阵相加。
当我输入第二个矩阵时,第一个矩阵的值被更改,结果随后为假。它对于 2x2 矩阵效果很好,但对于任何更大的矩阵则效果不佳。 该算法在不使用函数的情况下也能很好地工作。 请帮我解决这个问题。
这是代码:
#include <stdio.h>
#include <stdlib.h>
int n;
void PrintMatrix(int P[n][n])
{
int i,j;
for(i=0;i<n;i++)
{
printf("\n");
for(j=0;j<n;j++)
{
printf("%d\t", P[i][j]);
}
}printf("\n");
}
void ReadMatrix(int P[n][n])
{
int i,j;
for(i=0;i<n;i++)
{
printf("input row %d\n", i+1);
for(j=0;j<n;j++)
{
scanf("%d", &P[i][j]);
}
}
}
void AddMatrix(int P[n][n], int Q[n][n], int Result[n][n])
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
Result[i][j]=P[i][j]+Q[i][j];
}
}
}
int main()
{
int i,j;
int A[n][n];
int B[n][n];
int Sum[n][n];
printf("input matrix size:");
scanf("%d", &n);
printf("input first matrix\n");
ReadMatrix(A);
PrintMatrix(A);
printf("input second matrix\n");
ReadMatrix(B);
PrintMatrix(B);
AddMatrix(A,B,Sum);
PrintMatrix(Sum);
return 0;
}
最佳答案
您可以使用结构体定义自己的矩阵类型,例如:
typedef struct
{
int* data;
size_t width;
size_t height
} matrix_t;
或者,如果你有一个现代的 C 编译器,你可以编写类似的函数
void func (size_t width, size_t height, int matrix[width][height])
但结构版本可能更受欢迎。
<小时/>编辑
至于为什么你的程序有bug,你必须将n
初始化为一个值。如果您在从用户处读取n
之后将数组声明为大小为[n][n]的可变长度数组,那么它应该可以正常工作。 p>
关于c - 如何正确使用数组函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24550351/