3元1次方程c语言,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=%lf\n",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

{

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

{

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

}

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

}

printf("\n\n");

}

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]=%lf\t",i,x[i]);

printf("\n");

system("pause");

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值