三元一次方程组 公式 c语言

Python026

三元一次方程组 公式 c语言,第1张

不知你那公式怎么来的,建议采用线性代数的克莱姆方法来解:

为方便和完善期间,增加一个变量H,把x=,y=,z=那三行和后面那一行

替换为:

H=a*(B*g-C*f)-A*(b*g-c*f)+e*(b*C-c*B)

if(H==0) printf("次方程无解!")

else

{x=(d*(B*g-C*f)-D*(b*g-c*f)+h*(b*C-c*B))/H

y=(d*(A*g-C*e)-D*(a*g-c*e)+h*(a*C-c*A))/H

z=(d*(A*f-B*e)-D*(a*f-b*e)+h*(a*B-b*A))/H

printf("%lf\n%lf\n%lf",x,y,z)}

试验一下,不行再问。其实你的变量设置不大好,为了尽量保持原貌,未做改动。

#include <stdio.h>#define EPSINON 0.000001void main(){

float a[3][3],detA,detA1,detA2,detA3float b[3],x,y,zint i,jprintf("3元一次方程组的格式如下:\n")printf("a[0][0]x+a[0][1]y+a[0][2]z = b[0]\n")printf("a[1][0]x+a[1][1]y+a[1][2]z = b[1]\n")printf("a[2][0]x+a[2][1]y+a[2][2]z = b[2]\n")printf("请依次输入方程系数:\n")

for(i=0i<3i++){ for(j=0j<3j++) {printf("a[%d][%d]=", i, j) scanf("%f", &a[i][j]) }}printf("依次输入方式右边参数:\n")for(i=0i<3i++){ printf("b[%d]=",i) scanf("%f",&b[i])}

detA = a[0][0]*a[1][1]*a[2][2]+a[0][1]*a[1][2]*a[2][0]+ a[0][2]*a[1][0]*a[2][1]-a[0][0]*a[1][2]*a[2][1]- a[0][1]*a[1][0]*a[2][2]-a[0][2]*a[1][1]*a[2][0]

detA1 = b[0]*a[1][1]*a[2][2]+a[0][1]*a[1][2]*b[2]+ a[0][2]*b[1]*a[2][1]-b[0]*a[1][2]*a[2][1]- a[0][1]*b[1]*a[2][2]-a[0][2]*a[1][1]*b[2]

detA2 = a[0][0]*b[1]*a[2][2]+b[0]*a[1][2]*a[2][0]+ a[0][2]*a[1][0]*b[2]-a[0][0]*a[1][2]*b[2]- b[0]*a[1][0]*a[2][2]-a[0][2]*b[1]*a[2][0]

detA3 = a[0][0]*a[1][1]*b[2]+a[0][1]*b[1]*a[2][0]+ b[0]*a[1][0]*a[2][1]-a[0][0]*b[1]*a[2][1]- a[0][1]*a[1][0]*b[2]-b[0]*a[1][1]*a[2][0]

x = detA1/detAy = detA2/detAz = detA3/detAif ((detA >= -EPSINON) &&(detA <= EPSINON)){ printf("方程无唯一解!\n") }else{ printf("方程组的根为:x=%f,y=%f,z=%f\n", x, y, z) }}

网上搜的用法是:3x-y+z=3 方程系数依次是输入3-11 方式右边参数是输入3