gpt4 book ai didi

c - 使用c中的结构对数组进行变量赋值的问题

转载 作者:太空宇宙 更新时间:2023-11-04 04:57:45 25 4
gpt4 key购买 nike

所以我正在尝试用 c 语言乘以矩阵。但是,当我尝试将两个数组中的数字相乘,并将它们放入答案数组时,它始终为零。这是该方法的代码,谢谢。

我的矩阵结构:

typedef struct matrix {
int r;
int c;
double **mat;
} *matrix_t;

我的矩阵乘法:

matrix_t mat_mult(matrix_t a, matrix_t b)
{
int i, j, k;
double x, temp1, temp2;
double tempsol = 0.0;
x = temp1 = temp2 = 0;
matrix_t answer;

if(a -> c == b -> r)
{
answer = mat_new(a -> r, b -> c);

for(i = 0; i < a -> r; i++)
for( j = 0; j < b -> c; j++)
{

for( k = 0; k < a -> c; k++)
{
tempsol += a->mat[i][k] * b->mat[k][j];
answer-> mat[i][j] = tempsol;
}

}

return answer;
}
else if(a -> r == b -> c)
{
answer = mat_new(a -> c, b -> r);
return answer;
}
else
{
printf("Matrices could not be multiplied");
exit(1);
return;
}
}

这也是我的 mat_new 的代码

matrix_t mat_new(int r,int c)
{
int i = 0;
double **a;
matrix_t matrix_a;

a = (double**)malloc(r *sizeof(double *));
for(i = 0; i < r; i++)
{
a[i] = (double*)malloc(c *sizeof(double));
}
matrix_a = (matrix_t) malloc ( sizeof(struct matrix));
matrix_a -> mat = a;
matrix_a -> r = r;
matrix_a -> c = c;

return matrix_a;
}

最佳答案

您需要释放您的对象。您需要重置 tempsol。但最重要的是,您需要检查您的 mat_mult()

matrix_t mat_mult(matrix_t a, matrix_t b)
{
/* ... */
if(a -> c == b -> r)
{
/* ... */
}
else if(a -> r == b -> c)
{
/* BZZZZT! */
answer = mat_new(a -> c, b -> r); /* BZZZZT! mat_mult(b, a); */
/* BZZZZT! */
return answer;
}
else
{
/* ... */
}
}

关于c - 使用c中的结构对数组进行变量赋值的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3697006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com