📄 gauss_070460.cpp
字号:
#include<iostream.h>
#include<math.h>
#include<fstream.h>
#include<iomanip.h>
int maxrow;
double max_value(double a[100][100],int n,int column)//找主元方程
{
double max;
int i=0;
max=a[n][n];
extern int maxrow=n;
for(i=n+1;i<column;i++)
{
if(fabs(a[i][n])>fabs(max))
{
max=a[i][n];
maxrow=i;
}
}
return (max);
}
void main()
{
ifstream infile;
infile.open("xishu.txt",ios::in);
double matrix[100][100];
double b[100];
double x[100];
double p,z,sum;
int n,m,k,l,q=0,i,j,t,g=0,h=0,u=0;
int column,an;
char as;
do{
//设置方程组的系数
cout<<"若对书中所给方程组进行计算请选择1:"<<endl;
cout<<"若对其它任意阶数方程组计算请选择2:"<<endl;
cin>>an;
if(an==1)
{
column=9;
cout<<"书中例题的增广矩阵系数为:"<<endl;
for( g=0;g<column;g++)
{
for( h=0;h<column;h++)
{
infile>>matrix[g][h];
cout<<setw(2)<<matrix[g][h]<<'\t';
}
infile>>b[g];
cout<<setw(3)<<b[g]<<endl;
}
g=0;h=0;
}
if(an==2)
{
cout<<"请输入方程阶数n:";
cin>>column;
cout<<endl;
for(g=0;g<column;g++)
{
cout<<"请输入增广矩阵的第"<<g+1<<"行系数:"<<endl;
for(h=0;h<column;h++)
cin>>matrix[g][h];
cin>>b[g];
}
g=0;h=0;u=0;
}
for(n=0;(n<column)&&(q==0);n++)
{
max_value(matrix,n,column);//找主元
//判断方程是否可解
if(max_value==0)
{
q=1;
cout<<"此矩阵奇异,方程有无穷解!"<<endl;
}
//将方程系数用列主元高斯变换法进行变换
else
{
if(maxrow!=n)
{
for(m=n;m<column;m++)
{
z=matrix[n][m];
matrix[n][m]=matrix[maxrow][m];
matrix[maxrow][m]=z;
}
z=b[n];
b[n]=b[maxrow];
b[maxrow]=z;
}
}
for(k=n+1;k<column;k++)//消元
{
p=matrix[k][n]/matrix[n][n];
for(l=n;l<column;l++)
{
matrix[k][l]-=matrix[n][l]*p;
}
b[k]-=b[n]*p;
}
}
//回代求出X的值
for(i=column-1;i>=0;i--)
{
sum=0;
for(j=i+1;j<column;j++)
{
sum+=x[j]*matrix[i][j];
}
x[i]=(b[i]-sum)/matrix[i][i];
}
//输出结果
cout<<"方程组的解为:"<<"X[";
for(t=0;t<column;t++)
{
cout<<x[t]<<",";
}
cout<<"]"<<endl;
cout<<"继续请按Y,退出按其它键:";
cin>>as;
}
while(as=='y');
infile.close();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -