如何使用c中的指针计算矩阵的行列式?

时间:2018-12-15 15:27:07

标签: c pointers matrix multiplication

我正在编写一个程序,使用大小最大为3x3的指针来计算矩阵的行列式,并且我从编写2x2矩阵的公式开始。

我遇到一个错误,它在乘法表达式的开头的括号内显示“表达式必须具有算术类型”。

该程序似乎将值识别为指针,而不是仅将值相乘,但是我不确定。我该如何解决?

void determinant(int size, int matrix[][MAXSIZE])
{
    int d;
    if(size == 2)
    {
        d = matrix * ((matrix + 1) + 1) - ((matrix + 1) + 0) * ((matrix + 0) + 1);
        printf("Determinant of your matrix: %d\n", d);
    }
}

2 个答案:

答案 0 :(得分:2)

为什么不只是matrix[0][0] * matrix[1][1] - matrix[1][0] * matrix[0][1]

不过,您可能应该向函数传递比int matrix[][]更类型安全的参数(例如,创建某种struct MATRIX_2_2)。

为了便于练习,如果您真的想使用指针算术,则可能需要编写如下内容:

d = (**matrix) * (*(*(matrix + 1) + 1)) - (*(*(matrix + 0) + 1)) * (*(*(matrix + 1) + 0));

在这里,每个第一个取消引用(即星号)都将获取矩阵的一维数组,第二个将获取一个特定值。

答案 1 :(得分:1)

计算determinant的问题是一个基本的数学问题(与C完全无关),大多数线性代数课程都会解释如何做到这一点。您实际上需要了解如何“手动”计算。

一个不同的问题是如何在C程序中表示矩阵(作为abstract data type)。我建议使用flexible array members(以及包含它们的指向struct的指针),我将在this答案中详细说明如何做到这一点(当然,您需要根据需要完成此操作) )。

通过结合两种方法(数学方面和编程方面),您可以完成家庭作业。

编译时不要忘记启用所有警告和调试信息(例如,使用GCChere一起使用gcc -Wall -Wextra -g进行编译,并阅读{{3} }。