求逆矩阵
调试出现下面这种提示然后屏幕出现很多奇怪的代码,不知道咋办了,希望各路UU康康,蟹蟹!
'0x007138A9 处有未经处理的异常(在 解方程.EXE 中): 0xC00000FD: Stack overflow (参数: 0x00000000, 0x00E02000)"
如下
#include <cmath>
#include <iomanip>
using namespace std;
//函数声明
int determinant(int A) { return 0; }
int main()
{
int n;
float a = 0.0;
cout << "输入方阵的阶" << endl;
cin >> n;
float A[256][256];
float b[256][256];
float A_1[256][256];
int I[256][256];
//输入方阵
cout << "按行输入方阵元素" << endl;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
cin >> A[i][j];
}
//计算行列式
a = determinant(A[256][256]);
//计算转置
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
b[i][j] = A[j][i];
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
A_1[i][j] = b[i][j] / a;
}
//输出A的逆矩阵
cout << "A的逆矩阵为:" << endl;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
cout<<A_1[i][j];
cout << "\n";
}
//检验
cout << "AA_1=\n";
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
I[i][j] =(int)A[i][j]*A_1[i][j];
}
}
//输出A与A_1的乘积
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
cout << I[i][j];
cout << "\n";
}
return 0;
}
Stack overflow 堆栈溢出了,可以使用动态数组。
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
//函数声明
int determinant(int A) { return 0; }
template <typename T>
void init(T **a, int n)//生成二维数组
{
for (int i = 0; i < n; i++)
{
a[i] = new T[n];
}
}
int main()
{
int n;
float a = 0.0;
cout << "输入方阵的阶" << endl;
cin >> n;
float **A = new float *[n]; //A[256][256];
init(A, n);
float **b = new float *[n]; //b[256][256];
init(b, n);
float **A_1 = new float *[n]; //A_1[256][256];
init(A_1, n);
int **I = new int *[n]; //I[256][256];
init(I, n);
//输入方阵
cout << "按行输入方阵元素" << endl;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
cin >> A[i][j];
}
//计算行列式
a = 1; //a = determinant(A[256][256]); 函数返回0,a在后面当做除数导致数据错误。
//计算转置
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
b[i][j] = A[j][i];
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
A_1[i][j] = b[i][j] / a;
}
//输出A的逆矩阵
cout << "A的逆矩阵为:" << endl;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
cout << A_1[i][j] << " ";
cout << endl;
}
//检验
cout << "AA_1=" << endl;
;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
I[i][j] = (int)(A[i][j] * A_1[i][j]); //I[i][j] = (int)A[i][j] * A_1[i][j];
}
}
//输出A与A_1的乘积
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
cout << I[i][j] << " ";
cout << endl;
}
return 0;
}
看看是不是数组越界了