网站首页 语言 会计 电脑 医学 资格证 职场 文艺体育 范文
当前位置:书香门第 > 计算机 > C语言

C语言解3元1次方程组示例

栏目: C语言 / 发布于: / 人气:7.75K

3元1次方程很多算法都和矩阵相关,怎样写个算线性方程组的程序呢?以下是为大家分享的C语言解3元1次方程组示例,供大家参考借鉴,欢迎浏览!

C语言解3元1次方程组示例

复制代码 代码如下:

#include "stdafx.h"//VS2010需要

#include "stdio.h"

#include "stdlib.h"

#include "math.h"

double x[3];//存放解x,y,z,使用数组便于输出

//x=1,y=2,z=3

//double A[3][4]=

//{

//1,1,1,-6,

//1,1,-1,0,

//1,-1,1,-2

//};

//x=2,y=5,z=10

double A[3][4]=

{

1,2,3,-42,

2,-1,5,-49,

-1,3,-3,17

};

//A的第一个方程分别与2、3个方程联合消去z,得到x,y的'两个方程,存入B

double B[2][4];

//B的两个方程联合消去y,得到x

double C[1][4];

void CombineB(int i)//A[0]与A[1]或A[2]消去z

{

double m0=abs(A[i][2]);

int b=A[0][2]*A[i][2]>0?-1:1;

double mi=b*abs(A[0][2]);

//printf("m0=%lf,mi=%lfn",m0,mi);//调试用

for(int j=0;j<4;j++)

{

B[i-1][j]=A[0][j]*m0+A[i][j]*mi;

}

}

void CombineC()//B[0]与B[1]消去y

{

double m0=abs(B[1][1]);

int b=B[0][1]*B[1][1]>0?-1:1;

double m1=b*abs(B[0][1]);

for(int j=0;j<4;j++)

{

C[0][j]=B[0][j]*m0+B[1][j]*m1;

}

}

//显示4个参数

void Show(double N[][4],int d1)

{

char W[3]={'x','y','z'};

for(int i=0;i<d1;i++)

{

for(int j=0;j<3;j++)

{

printf("%lf * %c + ",N[i][j],W[j]);

}

printf("%lf = 0n",N[i][3]);

}

printf("nn");

}

int _tmain(int argc, _TCHAR* argv[])

{

Show(A,3);

CombineB(1);

CombineB(2);

Show(B,2);

CombineC();

Show(C,1);

//得到x后则依次算出其他数字

x[0]=(0-C[0][3])/C[0][0];

x[1]=(0-B[0][3]-B[0][0]*x[0])/B[0][1];

x[2]=(0-A[0][3]-A[0][0]*x[0]-A[0][1]*x[1])/A[0][2];

//输出结果

for(int i=0;i<3;i++)

printf("x[%d]=%lft",i,x[i]);

printf("n");

system("pause");

return 0;

}

2.截图