威望0
积分7946
贡献0
在线时间763 小时
UID1
注册时间2021-4-14
最后登录2024-11-21
管理员
- UID
- 1
- 威望
- 0
- 积分
- 7946
- 贡献
- 0
- 注册时间
- 2021-4-14
- 最后登录
- 2024-11-21
- 在线时间
- 763 小时
|
[mw_shl_code=cpp,true]#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[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[j])){
imax = fabs(a[j]);
max = a[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[j];
if(c == 0) continue;
for(int s = j;s < n + 1;s++){
double tempdata = a;
a = a - a[j] * 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[j];
double data1 = a[n];
double data2 = a[j][n];
a[n] = a[n] - a[j][n] * a[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: "<<"\n";
for(int i = 0; i < iWidth; i++)
{
for(int j = 0; j < iHigh;j++)
{
cout<<pArray[j]<<" ";
}
cout<<endl;
}
}[/mw_shl_code] |
|