编写C++程序函数,求行列式的值
template<class T>T det(T *a, int n)
{
}
其中a是存储元素的一维数组,n是行列式的阶数。
例如,二阶行列:
1 3
4 5
则在数组a中的存储形式为:1 3 4 5 ,n=2
再如,三阶行列式:
1 4 7
3 2 5
9 1 8
则在数组a中的存储形式为:1 4 7 3 2 5 9 1 8,n=3
依次类推,要求写出函数体,求行列式的值
template<class T>T det(T *a, int n)
{
}
其中a是存储元素的一维数组,n是行列式的阶数。
例如,二阶行列:
1 3
4 5
则在数组a中的存储形式为:1 3 4 5 ,n=2
再如,三阶行列式:
1 4 7
3 2 5
9 1 8
则在数组a中的存储形式为:1 4 7 3 2 5 9 1 8,n=3
依次类推,要求写出函数体,求行列式的值
答案:#include<iostream>
using namespace std;template<class T>
T det(T *a, int n)
{
int i, j, m, c;
T s, *b;
if(n==1)return a[0];
b= new T[(n-1)*(n-1)];
s=0;
for( m=1; m<=n; m++)
{
c=0;
for(i=0; i<n; i++)
for(j=0; j<n; j++)
{
if( !(i==0 || (j+1)==m) )
b[c++]=a[ i*n+j ];
}
if( (m+1)%2 )
s += -1*a[m-1]*det(b,n-1);
else
s += a[m-1]*det(b,n-1);
}
delete[]b;
return s;
}int main()
{
double *a;
int n, i, j;
cout<<"你想求多少阶的行列式的值?n= ";
cin>>n;
a=new double[n*n];
cout<<"请输入该行列式:"<<endl;
for(i=0; i<n; i++)
for(j=0; j<n; j++)
cin>>a[i*n+j];
cout<<"该行列式的值为: ";
cout<<det(a,n)<<endl;
delete[]a;
return 0;
}
上一个:诚请C++高手帮忙,非常感谢
下一个:在C++中,对象的赋值的区别