首先能不能帮我查一下错误:
#include<math.h>
#include<malloc.h>
#include<iomanip.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#define N 10
float MatDet(float *p, int n);
float Creat_M(float *p, int m, int n, int k);
void print(float *p, int n);
bool Gauss(float A[][N], float B[][N], int n);
int main()
{
float *q;
float *p;
int c;
int d;
int i,j;
float e;
float a[N][N], b[N][N];
int n;
int z;
ii:
printf("请选择求逆矩阵方法:\n");
printf("按 1 定义法求逆矩阵\n");
printf("按 2 高斯消去法求逆矩阵\n");
printf("按 3 退出\n");
scanf("%d",&z);
if(z==1)
{
system("cls");
printf("请输入方阵的维数: ");
scanf("%d",&c);
d=2*c*c;
q=(float *)calloc(d, sizeof(float)); //分配内存单元
p=q;
if(NULL!=p)
{
for(i=0;i<c;i++)
{
printf("请输入第%d行:",i+1);
for(j=0;j<c;j++)
{
scanf("%f",p++);
}
}
}
else
{
printf("内存分配错误\n");
}
printf("原矩阵为:\n");
print(q, c); //打印该矩阵
e=MatDet(q, c); //求整个矩阵的行列式
p=q+c*c;
if(e!=0)
{
printf("矩阵行列式值为%f\n",e);
for(i=0;i<c;i++) //求逆矩阵
{
for(j=0;j<c;j++)
{
*(p+j*c+i)=Creat_M(q,i,j,c)/e;
}
}
printf("逆矩阵为:\n");
print(p,c); //打印该矩阵
}
else
{
printf("行列式值为0,矩阵不可逆!\n");
}
free(q); //释放内存空间
if(getch()==13)
system("cls");
goto ii;
}
if(z==2)
{
system("cls");
printf("请输入方阵的阶数: ");
scanf("%d",&n);
printf("请输入n阶方阵:");
//输入一个n阶方阵
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
if (Gauss(a, b, n))
{
printf("该方阵的逆矩阵为:\n");
for (i=0;i<n;i++)
{
setw(4);
for (j=0;j<n;j++)
{
printf("%d",b[i][j]);
setw(10);
}
printf("\n");
}
}
if(getch()==13)
system("cls");
goto ii;
return 0;
}
}
float MatDet(float *p, int n)
{
int r;
int c;
int m;
int l=0;
float a=0;
float b=1;
if(n!=1)
{
l=(n==2)?1:n;
for(m=0; m<l;m++)
{
b=1;
for(r=0,c=m;r<n;r++,c++)
{
b=b*(*(p+r*n+c%n));
}
a+=b;
}
for(m=0;m<l;m++)
{
b=1;
for(r=0,c=n-1-m+n;r<n;r++,c--)
{
b=b*(*(p+r*n+c%n));
}
a-=b;
}
}
else
a=*p;
return a;
}
float Creat_M(float *p, int m, int n, int k)
{
int l;
int i;
int j;
float r=0;
int sign = 1;
float *p_creat, *p_mid;
l=(k-1)*(k-1);
p_creat=(float*)calloc(l, sizeof(float));
p_mid=p_creat;
for(i=0; i<k;i++)
{
for (j=0; j<k;j++)
{
if(i!=m&&j!=n)
{
*p_mid++=*(p+i*k+j);
}
}
}
sign=(m+n)%2==0?1:-1;
r=(float)sign*MatDet(p_creat,k-1);
free(p_creat);
return r;
}
void print(float *p, int n)
{
int i,j;
for(i=0;i<n;i++)
{
cout << setw(4);
for(j=0;j<n;j++)
{
cout << setiosflags(ios::right) << *p++ << setw(10);
}
cout << endl;
}
}
{
int i,j,k;
float max,temp;
float t[N][N];
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
t[i][j]=A[i][j];
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
B[i][j]=(i==j)?(float)1:0;
}
}
for(i=0;i<n;i++)
{
max=t[i][i];
k=i;
for(j=i+1;j<n;j++)
{
if(fabs(t[j][i])>fabs(max))
{
max=t[j][i];
k=j;
}
}
if(k!=i)
{
for(j=0;j<n;j++)
{
temp=t[i][j];
t[i][j]=t[k][j];
t[k][j]=temp;
//B伴随交换
temp=B[i][j];
B[i][j]=B[k][j];
B[k][j]=temp;
}
}
if(t[i][i]==0)
{
printf("无逆矩阵");
return false;
}
temp=t[i][i];
for(j=0;j<n;j++)
{
t[i][j]=t[i][j]/temp;
B[i][j]=B[i][j]/temp;
}
for(j=0;j<n;j++)
{
if(j!=i)
{
temp=t[j][i];
for (k=0;k<n;k++)
{
t[j][k]=t[j][k]-t[i][k]*temp;
B[j][k]=B[j][k]-B[i][k]*temp;
}
}
}
}
return true;
}
其中方法二用高斯法求逆矩阵为什么是错的;
求大神帮忙吧C++的语言换成C的,万分感谢。
我怎么吧这里面的C++的语言转化成C的语言,为什么我把cout<<endl改成printf(“\n”)就不可以