用C或C++怎么编写求N阶行列式的值?要求有具体算法和程序.

 我来答
百度网友85f9498
2017-10-11
知道答主
回答量:1
采纳率:0%
帮助的人:954
展开全部
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int N;
cout<<"请输入阶数: ";
cin>>N;
int *ps=new int[N];
 double ** a = new double *[N];  
    for(int i = 0;i < N;i++)  
        a[i] = new double[N];   
    for(int j = 0;j < N;j++)  
        for(int k = 0;k<N ;k++)  
            cin>>a[j][k];  
 
double Dete=0;
for(int i=0;i<N;i++)
ps[i]=i;
do
{

int count=0;
for(int i=N-1;i>0;i--)
{
for(int j=i-1;j>=0;j--)
{
if(ps[j]>ps[i])
count++;
}

double pro=1;
for(int i=0;i<N;i++)
pro*=a[i][ps[i]];
if(count%2)
pro=-pro;
Dete+=pro;
     /*for(int i=0;i<N;i++)
cout<<ps[i]<<" ";
cout<<count<<endl;*/
}while(next_permutation(ps,ps+N));
cout<<"行列式的值为:"<<Dete; 
return 0; 
}

可进行浮点数输入,默认六位有效数字,有精度需求的自己再改下吧。虽然是个老问题,但还是答一下。

匿名用户
2013-08-21
展开全部
#include <stdio.h>
int main()
{
int a[100][100],b[100][100],c[100][100],n,i,j,h;
printf("first:\n");
scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);

printf("second:\n"); //由矩阵的乘法原则 两个如果都是方阵 阶数 必须相同!
printf("%d\n",n); //所以直接打印出 第二个的阶数 输入第二个方阵
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&b[i][j]);

for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
c[i][j]=0;
for(h=0;h<n;h++)
c[i][j] = c[i][j] + a[i][h]*b[h][j];
}
}
printf("result:\n");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
printf("%d ",c[i][j]);
if(j==n-1)
printf("\n");
}
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-08-21
展开全部
#include<stdio.h>
int s(int i,int n)
{ int j,k=-1;
for(j=1;j<=i+n+1;j++)
k*=(-1);
return(k);
}
float f( float a[][],int n)
{ int i; float q;
if(n==0) q=a[0][0];
else
{ for(i=0;i<=n;i++)
q=f(n-1)*a[n][i]*s(i,n);
}
return(q);
}
void main()
{ float a[3][3],q; int i,j;
for(i=0;i<3;i++)
scanf("%f",&a[i][j]);
q=f(a,3);
printf('%f",q);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式