2014.3.3修改
之前犯了很严重的错误,b[MAXNUM][MAXNUM]数组放在complemet_calculate函数内部,为自动变量,而返回的时候返回的b数组的指针,返回函数体内部声明定义的数组地址是很不安全的,之前能够正确运行的原因是函数结束时释放该自动变量,但该地址所拥有的数据暂时没有改动,系统知识标记了该部分数据可以修改,并不是进行数据的清空,所以指向该处的指针仍然可以正确读取数据。而一旦系统修改了这部分数据,程序就会出现不可预知的错误。
安全的做法应当是在不需要同时存在的情况下,把b数组声明为外部数组,就不会产生上述问题了。
2014.1.3
1.因为有了行列式计算的函数,于是就写了矩阵求逆的函数加了进去,现在已经可以计算行列式大小,输出伴随矩阵,输出余子式,代数余子式。矩阵的迹很好算,就先没有写,未来再加入计算A^2,计算矩阵的秩,计算矩阵特征值等等。(开始时因为只是想算行列式,输入函数写的时候只能输入为方阵,为了让函数有广泛适用性,添加着几个功能的时候应该还要修改一下输入函数。)
2.发现代数余子式的正负号似乎是错的,改了一下
#include "stdio.h"
#include"math.h"
#include "conio.h"
#define MAXNUM100
float b[MAXNUM][MAXNUM];//complemet_calculate函数的临时数组,声明为外部变量防止数据丢失
float* complement_calculate(float a[][MAXNUM],int n,int x,int y)//余子式矩阵计算函数,返回一个n-1阶二维数组指针
{