通用形式:
a1 x + b1 y = c1 a2 x + b2 y = c2
例題:
2x + y = 3 x - y = 6
D = a1*b2 - b1*a2 D1 = c1*b2 - b1*c2 D2 = a1*c2 - c1*a2 x = D1 / D y = D2 / D
前提:D != 0(唯一解),若 D == 0 需判斷無解或無限解。
#include <stdio.h>
typedef struct {
double a, b, c;
} Equation;
typedef struct {
double x, y;
} Solution;
Solution solve(Equation e1, Equation e2) {
Solution s;
double a1=e1.a, b1=e1.b, c1=e1.c;
double a2=e2.a, b2=e2.b, c2=e2.c;
double D = a1*b2 - b1*a2;
double D1 = c1*b2 - b1*c2;
double D2 = a1*c2 - c1*a2;
s.x = D1 / D;
s.y = D2 / D;
return s;
}
int main(void) {
Equation e1, e2;
Solution ans;
printf("請輸入第一個方程係數:\n");
printf("a1 = "); scanf("%lf", &e1.a);
printf("b1 = "); scanf("%lf", &e1.b);
printf("c1 = "); scanf("%lf", &e1.c);
printf("\n請輸入第二個方程係數:\n");
printf("a2 = "); scanf("%lf", &e2.a);
printf("b2 = "); scanf("%lf", &e2.b);
printf("c2 = "); scanf("%lf", &e2.c);
ans = solve(e1, e2);
printf("\nx = %lf\ny = %lf\n", ans.x, ans.y);
return 0;
}
請輸入第一個方程係數: a1 = 2 b1 = 1 c1 = 3 請輸入第二個方程係數: a2 = 1 b2 = -1 c2 = 6 x = 3.000000 y = -3.000000
D == 0,輸出「無唯一解」並返回標誌fabs(D) < 1e-9 判斷浮點數近似為零克拉默法則代碼簡潔、數學原理清晰,適合二元/三元小規模方程組。工程實際中大規模線性系統優先使用高斯消元、LU 分解或迭代法(如共軛梯度)。