多元一次方程解法 C++

#include<iostream> 
#include<math.h> 
#include<fstream> 
#include<stdlib.h> 
using namespace std; 
#define MaxElement  4

void print(double (*pArray)[MaxElement + 1], int iWidth,int iHigh); 
void main(){ 
    int n,m; 
    double a[MaxElement][MaxElement + 1] = { 
        //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[i][j]<<"  "; 
        } 
        cout<<endl; 
    } 
    for(j = 0; j < n; j++)
    { 
        double max = 0; 
        double imax = 0; 
        for(i = j; i < n; i++)
        { 
            if(imax < fabs(a[i][j])){ 
                imax = fabs(a[i][j]); 
                max = a[i][j];//得到各行中所在列最大元素 
                m = i; 
            } 
        } 
        if(fabs(a[j][j]) != max) 
        { 
            double b = 0; 
            for(int k = j;k < n + 1; k++){ 
                b = a[j][k]; 
                a[j][k] = a[m][k]; 
                a[m][k] = b; 
            } 
        } 
        print(a, MaxElement, MaxElement + 1); 
        for(int r = j;r < n + 1;r++)
        { 
            a[j][r] = a[j][r] / max;//让该行的所在列除以所在列的第一个元素,目的是让首元素为1 
        } 
        print(a, MaxElement, MaxElement + 1); 
        for(i = j + 1;i < n; i++)
        { 
            double c = a[i][j]; 
            if(c == 0) continue; 
            for(int s = j;s < n + 1;s++){ 
                double tempdata = a[i][s]; 
                a[i][s] = a[i][s] - a[j][s] * 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[i][j]; 
            double data1 = a[i][n]; 
            double data2 = a[j][n]; 
            a[i][n] = a[i][n] - a[j][n] * a[i][j]; 
            print(a, MaxElement, MaxElement + 1); 
        } 
    } 
    print(a, MaxElement, MaxElement + 1); 
    cout<<"方程组的解是:"<<endl; 
    for(int k = 0; k < n; k++){ 
        cout<<"x"<<k<<" = "<<a[k][n]<<endl; 
    } 
} 
void print(double (*pArray)[MaxElement + 1], int iWidth,int iHigh) { 
    std::cout<<"Array: "<<"
"; 
    for(int i = 0; i < iWidth; i++)
    { 
        for(int j = 0; j < iHigh;j++)
        { 
            cout<<pArray[i][j]<<"  "; 
        } 
        cout<<endl; 
    } 
}
原文地址:https://www.cnblogs.com/profession/p/8385202.html