admin 发表于 2022-10-8 09:29:55

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]
查看完整版本: C++:多元一次方程组的解法