【问题标题】:Calculate the determinant of any matrix nxn using function使用函数计算任何矩阵 nxn 的行列式
【发布时间】:2020-12-15 15:33:59
【问题描述】:

伙计们,我想计算任何矩阵 nxn 的行列式,我尝试过这种方式,但它一直向我显示 错误,例如:

56: error: subscripted value is neither array nor pointer nor vector 
return((tab[0][0] * tab[1][1])-(tab[0][1] * tab[1][0]));*

代码:

#include <stdlib.h>
#include <math.h>
#define Tmax 100

int determinant (int dim, int tab);

int main(){
    int tab[Tmax][Tmax];
    int dim, i, j;
    int det=0;
    do{
        printf("Enter the dimention of the matrix n x n /n");
        scanf("%d", &dim);
    } while (dim<0 || dim>Tmax);
    for (i=0; i<dim; i++){
        for (j=0; j<dim; j++){
            printf("Enter the element in the %d row and %d column:\n", i+1, j+1);
            scanf("%d",&tab[i][j]);
        }
    }
    for (i=0; i<dim; i++){
        for (j=0; j<dim; j++){
            det = det + determinant(dim, tab[i][j]);
        }
    }
    printf("%d", det);
    return 0;
}

int determinant (int dim, int tab[][])
    int i, j;
    if (dim==1)
        return tab[0][0];
    else if (dim==2)
        return((tab[0][0] * tab[1][1])-(tab[0][1] * tab[1][0]));
    else
        return (pow(-1 , i+1+j+1) * tab[0][j] * determinant(i+1,tab));
}

对此我有什么办法吗?还有有什么简单的方法吗?

注意:请不要破坏只是提示

【问题讨论】:

  • determinant 中,tabint,而不是二维数组。
  • C 不允许像int tab[][] 这样的声明,您必须指定除最右边之外的所有维度。
  • 提示:不要使用pow(-1, foo),这太过分了。使用(foo % 2 == 0) ? 1 : -1
  • 这个原型:int determinant (int dim, int tab);与函数定义不匹配:int determinant (int dim, int tab[][])
  • 我的理解是你尝试实现cofactor方法。但是,这里的编码并不完全是这样

标签: c


【解决方案1】:

几个问题:这个:

return (pow(-1 , i+1+j+1) * tab[0][j] * determinant(i+1,tab));

正在使用 ij 而没有先被初始化。改变:

    int i, j; 

收件人:

    int i=0, j=0;

关于:

error: subscripted value is neither array nor pointer nor vector return((tab[0][0] * tab[1][1])-(tab[0][1] * tab[1][0]));*"_

以下原型:

int determinant (int dim, int tab); 

与函数定义不匹配(反正语法不正确,[][] 数组形成不合法 C):

int determinant (int dim, int tab[][]){

以下语法正确:

int determinant (int dim, int tab){//fix argument list to match prototype
    int i=0, j=0;
    if (dim==1)
        return tab;
    else if (dim==2)
        return((tab * tab)-(tab * tab));
    else
        return (pow(-1,i+1+j+1) * tab * determinant(i+1,tab));
} 

但逻辑上有问题。建议审查nxn行列式的算法并重构。

提示:similar question is here(使用可行的算法。)请参阅已接受的唯一问题答案。

【讨论】:

    猜你喜欢
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 2023-03-20
    • 2013-05-12
    • 1970-01-01
    相关资源
    最近更新 更多