C++三元一次方程组算法

       本程序皆为个人所创。

       算法解析:

(1)本程序之所以用指针和结构体,1.是为了节省空间  2.是为了方便统计变量,实验变量在21个往上走。

(2)应用初中数学的知识,方程一和方程二统一倍律后消去变量z,列出一个新方程12;方程一和方程三统一倍律后消去变量z,列出一个新方程13;

然后方程13,方程12就可列成一个新的二元一次方程组,然后再方程12和方程13统一倍律后消去变量x或y,求出其中之一,在带入方程13或方程12,

求出y或x,两个变量的值都知道了,自然就可以求出最后一个了。

#include <iostream>
using namespace std;
//三元一次方程组
struct equation
{
	float x1,x2,x3;
	float y1,y2,y3;
	float z1,z2,z3;
	float numx1, numx2, numx3;
	float numy1, numy2, numy3;
	float numz1, numz2, numz3;
	float sum1, sum2, sum3;
};

int main() {
	equation s = {  };  //先建设一个空的结构题,方便后续定义
	struct equation *p = &s;    //struct可以省略
	cout << "请输入x前的系数(numx1)" << endl;
	cin>> p->numx1;
	//cout << "请输入x的值(x1)" << endl;
	//cin >> p->x1;
	cout << "请输入y前的系数(numy1)" << endl;
	cin >> p->numy1;
	cout << "请输入z前的系数(numz1)" << endl;
	cin >> p->numz1;
	cout << "请输入sum的值(sum1)" << endl;
	cin >> p->sum1;
	cout << "方程为一:" << p->numx1 << "x" << "+" << p->numy1 << "y" << "+" << p->numz1 << "z" <<"="<< p->sum1 << endl;
	cout << endl;//以上为方程一

	cout << "请输入x前的系数(numx2)" << endl;
	cin >> p->numx2;
	//cout << "请输入x的值(x2)" << endl;
	//cin >> p->x2;
	cout << "请输入y前的系数(numy2)" << endl;
	cin >> p->numy2;
	cout << "请输入z前的系数(numz2)" << endl;
	cin >> p->numz2;
	cout << "请输入sum的值(sum2)" << endl;
	cin >> p->sum2;
	cout << "方程为二:" << p->numx2 << "x" << "+" << p->numy2 << "y" << "+" << p->numz2 << "z" << "=" << p->sum2 << endl;
	cout << endl;//以上是方程二

	cout << "请输入x前的系数(numx3)" << endl;
	cin >> p->numx3;
	//cout << "请输入x的值(x3)" << endl;
	//cin >> p->x3;
	cout << "请输入y前的系数(numy3)" << endl;
	cin >> p->numy3;
	cout << "请输入z前的系数(numz3)" << endl;
	cin >> p->numz3;
	cout << "请输入sum的值(sum3)" << endl;
	cin >> p->sum3;
	cout << "方程为:" << p->numx3 << "x" << "+" << p->numy3 << "y" <<"+"<< p->numz3 << "z" << "=" << p->sum3 << endl;
	cout << endl;//以上是方程三

	float num12z = p->numz2 / p->numz1;   //这里是使1,2方程倍数相同消去变量z
	float num13z = p->numz3 / p->numz1;  //这里是使1,3方程倍数相同消去变量z
	float num12y = (p->numy1)*num12z - p->numy2;  //此处是为了求出二元一次方程组y的系数
	float num13y = (p->numy1)*num13z - p->numy3;
	float num12x = (p->numx1)*num12z - p->numx2;  //此处是为了求出二元一次方程组x的系数
	float num13x = (p->numx1)*num13z - p->numx3;
	float sum12 = p->sum1*num12z - p->sum2;
	float sum13 = p->sum1*num13z - p->sum3;

	float num3 = num13x/num12x;         //num3是为了让x前的系数相同,再计算y的值
	float val = num3*num12y - num13y;  //y之间的差值
	float val2 = sum12*num3 - sum13;         //sum是指之间系数差值
	float y = val2 / val;                //
	float x = (sum12 - num12y * y) / num12x;
	float z = (p->sum3 - p->numx3*x - p->numy3*y) / p->numz3;
	cout << "x的值为" << x << endl;
	cout << "y的值为" << y << endl;
	cout << "z的值为" << z << endl;
	return 0;

	//cout << p << endl;//访问指针位置,十六进制
	//cout << p->numx1 << endl;
}

学好数学,为己所用。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RouDragon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值