从2x3阵列矩阵计算行列式

时间:2013-12-12 20:11:03

标签: c arrays matrix boolean

所以我编写了下面的代码作为解决二维线性方程组的程序。

#include <stdio.h>

int main( )
{
  int eq[2][3];

  int D, Dx, Dy;

  int sol[2];

  printf("Enter cofficients of first equation: ");
  scanf("%d %d %d", &eq[0][0], &eq[0][1], &eq[0][2]); 

  printf("Enter cofficients of second equation: ");
  scanf("%d %d %d", &eq[1][0], &eq[1][1], &eq[1][2]);

  D = eq[0][0]*eq[1][1] - eq[1][0]*eq[0][1];
  Dx = eq[0][2]*eq[1][1] - eq[1][2]*eq[0][1];
  Dy = eq[0][0]*eq[1][2] - eq[1][0]*eq[0][2];

  if(D != 0){
    sol[0] = Dx/D;   // x solution
    sol[1] = Dy/D;   // y solution

    printf("x = %d, y = %d \n", sol[0], sol[1]);
  }
  else{
    printf("No unique solutions exist. \n");
  }

  return 0;
}

我现在的任务是使用原型将其转换为函数:

 bool determinantFunction(int e[][3], int s[]);

我的问题是我不知道从哪里开始。我已经阅读了尽可能多地使用C语言中的布尔值,但我不明白我是如何或为什么要实现它来制作一个决定性函数。

2 个答案:

答案 0 :(得分:1)

所以,只需将现有代码放在这样的函数中(我并不是说你的代码是对还是错),你会得到类似的东西:

bool determinantFunction(int e[][3], int s[])
{
    int D, Dx, Dy;

    // calculate determinant
    D  = e[0][0]*e[1][1] - e[1][0]*e[0][1];
    Dx = e[0][2]*e[1][1] - e[1][2]*e[0][1];
    Dy = e[0][0]*e[1][2] - e[1][0]*e[0][2];

    // if non-singular ...
    if (D != 0)
    {
        // success
        s[0] = Dx/D;   // return x solution
        s[1] = Dy/D;   // return y solution
        return true;
    }

    // no solution
    return false;
}

然后你的main会变成这样(未经测试):

int main( )
{
    int eq[2][3];
    int sol[2];

    printf("Enter cofficients of first equation: ");
    scanf("%d %d %d", &eq[0][0], &eq[0][1], &eq[0][2]); 

    printf("Enter cofficients of second equation: ");
    scanf("%d %d %d", &eq[1][0], &eq[1][1], &eq[1][2]);

    if (determinantFunction(eq, sol))
    {
        printf("x = %d, y = %d \n", sol[0], sol[1]);
    }
    else{
        printf("No unique solutions exist. \n");
    }

    return 0;
}

对于您的示例:4x - 3y = -14和3x - 5y = -5,与以下内容相同:

4x - 3y + 14 = 0
3x - 5y + 5 = 0

你会得到:

result

好的,上次更新 - 硬编码系数:

int eq[2][3] = {{4, -3, 14}, {3, -5, 5}};
int sol[2];
if (determinantFunction(eq, sol))
{
    printf("x = %d, y = %d \n", sol[0], sol[1]);
}
else{
    printf("No unique solutions exist. \n");
}

答案 1 :(得分:0)

此类功能可行的一种可能方式是,如果存在唯一解决方案则返回true,否则返回false。如果确实找到了解决方案,它将存储在作为第二个参数传递的数组中。

基本上,您只需将现有代码移动到一个函数中即可。您的sol数组将作为第一个参数传递给您。

int main()
{
    int eq[2][3];
    // ...
    int sol[2];
    if (determinantFunction(eq, sol)) {
        printf("%d %d\n", sol[0], sol[1]);
    } else {
        printf("No unique solutions exist.\n");
    }
}