C++:多元一次方程组的解法
#include<iostream>#include<math.h>
#include<fstream>
#include<stdlib.h>
using namespace std;
#define MaxElement4
void print(double (*pArray), int iWidth,int iHigh);
void main(){
int n,m;
double a = {
//3
// {100, 10, 1, 10},
// {400, 20, 1, 20},
// {900, 30, 1, 10},
//4
{1,1,1,1,0},
{1,2,3,4,-6},
{2,6,4,5,-3},
{3,4,-1,6,-12},
};//第四列是增广矩阵
int i,j;
n = MaxElement;
cout<<"输入方程组介数:";
cout<<n<<endl;
cout<<"输入增广矩阵:"<<endl;
for(i = 0; i < n; i++){
for(j = 0; j < n + 1;j++){
cout<<a<<"";
}
cout<<endl;
}
for(j = 0; j < n; j++)
{
double max = 0;
double imax = 0;
for(i = j; i < n; i++)
{
if(imax < fabs(a)){
imax = fabs(a);
max = a;//得到各行中所在列最大元素
m = i;
}
}
if(fabs(a) != max)
{
double b = 0;
for(int k = j;k < n + 1; k++){
b = a;
a = a;
a = b;
}
}
print(a, MaxElement, MaxElement + 1);
for(int r = j;r < n + 1;r++)
{
a = a / max;//让该行的所在列除以所在列的第一个元素,目的是让首元素为1
}
print(a, MaxElement, MaxElement + 1);
for(i = j + 1;i < n; i++)
{
double c = a;
if(c == 0) continue;
for(int s = j;s < n + 1;s++){
double tempdata = a;
a = a - a * c;//前后行数相减,使下一行或者上一行的首元素为0
print(a, MaxElement, MaxElement + 1);
}
print(a, MaxElement, MaxElement + 1);
}
print(a, MaxElement, MaxElement + 1);
}
for(i = n - 2; i >= 0; i--)
{
for(j = i + 1;j < n; j++)
{
double tempData = a;
double data1 = a;
double data2 = a;
a = a - a * a;
print(a, MaxElement, MaxElement + 1);
}
}
print(a, MaxElement, MaxElement + 1);
cout<<"方程组的解是:"<<endl;
for(int k = 0; k < n; k++){
cout<<"x"<<k<<" = "<<a<<endl;
}
}
void print(double (*pArray), int iWidth,int iHigh) {
std::cout<<"Array: "<<"\n";
for(int i = 0; i < iWidth; i++)
{
for(int j = 0; j < iHigh;j++)
{
cout<<pArray<<"";
}
cout<<endl;
}
}
页:
[1]