首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言求解二元一次方程組:assert 判斷邏輯與公式錯誤修正

     編輯:程式設計綜合問答

原代碼問題

assert(fabs(a*e - d*b) < 1.0e-8); // 錯誤:應判斷行列式非零
printf("x=%lf\ny=%lf\n", (c*e-b*f)/(a*c-d*b), (d*c-a*f)/(d*b-a*c)); // 公式錯誤

正確邏輯

方程組:
ax + by = c
dx + ey = f

克拉默法則:
行列式 D = a*e - b*d
Dx = c*e - b*f
Dy = a*f - c*d
唯一解條件:|D| > eps
x = Dx / D, y = Dy / D

修正代碼

#include <stdio.h>
#include <math.h>
#include <assert.h>
int main() {
  double a,b,c,d,e,f;
  scanf("%lf %lf %lf %lf %lf %lf", &a,&b,&c,&d,&e,&f);
  double D = a*e - b*d;
  assert(fabs(D) > 1.0e-8); // 行列式非零才有唯一解
  double x = (c*e - b*f) / D;
  double y = (a*f - c*d) / D;
  printf("x=%lf\ny=%lf\n", x, y);
  return 0;
}

測試輸入

輸入 5 1 8 20 4 6:
D = 5*4 - 1*20 = 0 → 觸發 assert 終止程序,符合預期「解不唯一/無解」退出。

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