懂C++的人请进

来源:百度知道 编辑:UC知道 时间:2024/05/16 00:18:23
我想用高斯消去法来解线性方程组,这是我的程序,老是提示有一个错误,不知道为什么,请高手看看:
#include<iostream.h>
void main()
{
int n;
cout<<"请输入要求的方程组的维数:";
cin>>n;
cout<<endl;
double x[n],a[n][n+1], A;
cout<<"请依次输入各个方程的x系数和常数:"<<endl;
for(int i=0;i<=n-1;i++)
{
for(int j=0;j<=n;j++)
{
cin>>A;
a[i][j]=A;
}

}
for(int e=0;e<=n-1;e++)
{
for(int f=1;f<=n-1-e;f++)
{
for(int h=e;h<=n;h++)
{
a[e+f][h]=a[e+f][h]*(a[e][e]/a[e+f][e])-a[e][h];
}

}

}
for(int r=0;r<=n-1;r++)
{
for(int q=1;q<=n-r-1;q++)
{
a[r][n]-=x[r+1]*a[r][r+q];
}
x[r]=a[r][n]/a[r][r];
}
for(int s=0;s<=n-1;s++)
{
cout<<"X"<<s+1<<"的值为:"<<x[s]<<endl;
}
}

double x[n],a[n][n+1], A;
不能这样定义,应该是用new来动态生成。
应该改为:
你想要的x[n]这个数组应该为:double* x = new double[n];这样来动态分配出一块空间
同样你想要的a[n][n+1]这个二维数组应该为:
double** a = new double*[n];
int i;
for (i=0; i<n; i++)
{
a[i] = new double[n+1];
}
这样来动态分配二维数组空间。
剩下一个变量A,就用double A没有问题。
最后一点,别忘了,以上动态分配的数组在不用的时候,要删除,以免造成内存泄露。删除可以用delete []x;x = NULL;这种形式来删除。

数组在编译器编译时就必须知道它的大小,否则编译出错。而你的程序中n是变量,程序在运行时输入n的值后才知道大小,所以不行。你可以用malloc动态分配。

cout<<"请输入要求的方程组的维数:";
cin>>n;
cout<<endl;
double *x=new double[n];
double **a=new double*[n+1];
//double x[n],a[n][n+1], A;
double A;
cout<<"请依次输入各个方程的x系数和常数:"<<endl;
for(int i=0;i<=n-1;i++)
{ a[i]=new double[n+1];
for(int j=0;j<=n;j++)
{
cin>>A;
a[i][j]=A;
}

定义数组,数组的大小得给定,因为数组正如楼上的大侠们所说,是动态分配的。否则编译出错。