首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 語言求解二元一次方程組:克拉默法則實現

     編輯:關於C語言

數學模型

通用形式:

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

健壯性增強建議

  1. 檢測 D == 0,輸出「無唯一解」並返回標誌
  2. 使用 fabs(D) < 1e-9 判斷浮點數近似為零
  3. 增加輸入驗證,防止非數字導致程序崩潰
  4. 擴展為高斯消元法求解 n 元線性方程組

總結

克拉默法則代碼簡潔、數學原理清晰,適合二元/三元小規模方程組。工程實際中大規模線性系統優先使用高斯消元、LU 分解或迭代法(如共軛梯度)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved