设备管理精细化答案:一道编C++程题

来源:百度文库 编辑:高校问答 时间:2024/04/30 21:24:33
如何编写一个程序计算n阶行列式的值?从键盘输入n的值和n个数.

#include <stdio.h>
#include <iostream.h>
double HangLSH(double *h,int n)
{
double *p=h,*q;
double jieguo=0;
int flag,i,j,k;
double a[10][10],b[10][10],c[100];
for(i=0;i<n;i++)
{
for (j=0;j<n;j++)
{
a[i][j]=*(p++);
b[i][j]=a[i][j];;

}

}

if (n==2)
{
return a[0][0]*a[1][1]-a[1][0]*a[0][1];
}
else
{
for (k=0;k<n ;k++)
{
if ((k+n-1)%2)
flag=-1;
else
flag=1;
for (i=0;i<n-1;i++)
{
for (j=0;j<k;j++)
a[i][j]=b[i][j];
for (j=k;j<n-1;j++)
a[i][j]=b[i][j+1];
}

for (i=0;i<n-1;i++)
{
for (j=0;j<n-1;j++)
c[i*(n-1)+j]=a[i][j];

}

jieguo+=b[n-1][k]*HangLSH(c,n-1)*flag;

}
return jieguo;
}
}
int main()
{
int n;
double jieguo;
cout<<"输入行列式的阶数"<<endl;
cin>>n;
double hlsh[100];
for (int i=0;i<n ;i++ )
{
cout<<"输入第"<<i+1<<"行"<<endl;
for (int j=0;j<n ;j++ )
{
cin>>hlsh[i*n+j];
}
}
jieguo=HangLSH(hlsh,n);
cout<<"行列式的值是:"<<jieguo<<endl;
return 0;
}

#include <stdio.h>

int Calc(int *m, int n)
{
int i, j;
int k, l;
int temp = 1;
int ret = 0;

if(n == 2)
{
return m[0] * m[3] - m[1] * m[2];
}
int * tm = new int[(n - 1) * (n - 1)];

for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
{
temp = (i + j) % 2 ? -1 : 1;
//construct another one
for(k = 0; k < i; k++)
{
for(l = 0; l < j; l++)
{
tm[k * (n - 1) + l] = m[k * n + l];
}
}
for(k = 0; k < i; k++)
{
for(l = j + 1; l < n; l++)
{
tm[k * (n - 1) + l - 1] = m[k * n + l];
}
}
for(k = i + 1; k < n; k++)
{
for(l = 0; l < j; l++)
{
tm[(k - 1) * (n - 1) + l] = m[k * n + l];
}
}
for(k = i + 1; k < n; k++)
{
for(l = j + 1; l < n; l++)
{
tm[(k - 1) * (n - 1) + l - 1] = m[k * n + l];
}
}
ret += temp * Calc(tm, n - 1);
}
}
delete []tm;

return ret;
}

int main(int argc, char *argv[])
{
int n = 0, i, j;
int *m = NULL;

do
{
printf("n : \n");
scanf("%d", &n);
} while (n <= 0);

m = new int[n * n];

printf("n * n : \n");
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
{
scanf("%d", &m[i * n + j]);
}
}

printf("Original : \n");
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
{
printf("%d\t", m[i * n + j]);
}
printf("\n");
}

printf("Value : %d\n", Calc(m, n));

delete []m;
m = NULL;

return 0;
}

使用递归调用,把行列式和维数传进去就可以了。

如果我有时间我会考虑一下!