
代码如下
#include
using namespace std;
int main()
{
double l[3][3] ={{1,0,0},{0,1,0},{0,0,1},},u[3][3] ={{0,0,0},{0,0,0},{0,0,0},},a[3][3] ={{2,1,1},{1,3,2},{1,2,2},}, x[3], y[3], b[3] = { {4}, {5}, {6}, };
int k = 1, j = 1, n = 3, r = 1, i = 1;for (k; k <= n; k++)/*开始分解*/{for (j = k; j <= n; j++)/*求U中第k行元素*/{u[k][j] = a[k][j];for (r; r <= k - 1; r++){u[k][j] = u[k][j] - l[k][r] * u[r][j];}}for (i = k + 1; i <= n; i++)/*求L中第k列元素*/{l[i][k] = a[i][k];for (r; r <= k - 1; r++){l[i][k] = l[i][k] - l[i][r] * u[r][k];}l[i][k] = l[i][k] / u[k][k];}}/*结束分解*/for (i; i <= n; i++)/*由Ly=b求出y[i]*/{y[i] = b[i];for (j; j <= i - 1; j++){y[i] = y[i] - l[i][j] * y[j];}}for (i = n; i >= 1; i--)/由Ux=y求出x[i]/
{x[i] = y[i];for (j = i + 1; j >= n; j--){y[i] = y[i] - u[i][j] * x[j];}x[i] = y[i] / u[i][i];}cout << x[i] <<" "<< endl;system("pause");
return 0;
}
C++数组的下标是从0开始的,3行3列的数组下标范围是[0,2],你代码中都是从1开始的,[1,3],当k,j,i 等于3的时候,数组越界了