#include<iostream>
using namespace std;
int main()
{
int n;
double t,e=0.01;
cout<<"输入矩阵系数的个数n:"<<endl;
cin>>n;
double *a=new double [n+1][n+1];
double *b=new double [n+1];
double *x=new double [n+1];
double *s=new double [n+1];
for(int k=1;k<n;k++)
{
if(abs(a[n][n])<=e)
cout<<"fail"<<endl;
else
{
for(int i=k+1;i<n;i++)
{
t=a[i][k]/a[k][k];
b[i]=b[i]-t*b[k];
}
for(int j=k+1;j<n;j++)
a[i][j]=a[i][j]-t*a[k][j];
x[n]=b[n]/a[n][n];
for(int ii=n-1;ii>0;ii++)
{
for(int jj=ii+1;ii<=n;ii++)
s[jj]=a[ii][jj]*x[jj];
x[ii]=(b[ii]-s[jj])/a[ii];
}
for(int f=1;f<=n;f++)
cout<<x[f]<<endl;
}
}
//这是哪里出问题啦?这个是顺序高斯消去法的求解算法。
高手帮忙看一下C++代码
答案:2 悬赏:30 手机版
解决时间 2021-04-25 09:18
- 提问者网友:夢醒日落
- 2021-04-24 18:22
最佳答案
- 五星知识达人网友:北城痞子
- 2021-04-24 19:16
#include<iostream>
using namespace std;
int main()
{
int n;
double t,e=0.01;
cout<<"输入矩阵系数的个数n:"<<endl;
cin>>n;
double** a=new double*[n+1]; // 这样申请动态二维数组
for(int i = 0; i < n+1; ++i)
a[i] = new double[n+1];
double *b=new double [n+1];
double *x=new double [n+1];
double *s=new double [n+1];
for(int k=1;k<n;k++)
{
if(abs(a[n][n])<=e)
cout<<"fail"<<endl;
else
{
for(int i=k+1;i<n;i++)
{
t=a[i][k]/a[k][k];
b[i]=b[i]-t*b[k];
}
for(int j=k+1;j<n;j++)
a[i][j]=a[i][j]-t*a[k][j];
x[n]=b[n]/a[n][n];
for(int ii=n-1;ii>0;ii++)
{
for(int jj=ii+1;ii<=n;ii++)
s[jj]=a[ii][jj]*x[jj];
x[ii]=(b[ii]-s[jj])/a[ii]; // 这里还有个编译错误,你根据自己的逻辑改一下
}
for(int f=1;f<=n;f++)
cout<<x[f]<<endl;
}
}
using namespace std;
int main()
{
int n;
double t,e=0.01;
cout<<"输入矩阵系数的个数n:"<<endl;
cin>>n;
double** a=new double*[n+1]; // 这样申请动态二维数组
for(int i = 0; i < n+1; ++i)
a[i] = new double[n+1];
double *b=new double [n+1];
double *x=new double [n+1];
double *s=new double [n+1];
for(int k=1;k<n;k++)
{
if(abs(a[n][n])<=e)
cout<<"fail"<<endl;
else
{
for(int i=k+1;i<n;i++)
{
t=a[i][k]/a[k][k];
b[i]=b[i]-t*b[k];
}
for(int j=k+1;j<n;j++)
a[i][j]=a[i][j]-t*a[k][j];
x[n]=b[n]/a[n][n];
for(int ii=n-1;ii>0;ii++)
{
for(int jj=ii+1;ii<=n;ii++)
s[jj]=a[ii][jj]*x[jj];
x[ii]=(b[ii]-s[jj])/a[ii]; // 这里还有个编译错误,你根据自己的逻辑改一下
}
for(int f=1;f<=n;f++)
cout<<x[f]<<endl;
}
}
全部回答
- 1楼网友:北方的南先生
- 2021-04-24 20:39
double *a=new double [n+1][n+1];
申请二围空间不是这么申请的啊
double **a=new (double *)[]
for(申请n维)
a[i]=new double[]
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯