行列式求值--C语言
Description求N阶方阵对应的行列式值。Input输入数据包含多组测试案例。每组测试案例由N(0<N≤10)开头,N表示方阵阶数,后续N行每行包含N个实数Outp...
Description
求 N 阶方阵对应的行列式值。
Input
输入数据包含多组测试案例。每组测试案例由N(0<N≤10)开头,N表示方阵阶数,后续N行每行包含N个实数
Output
对于每个测试用例,行列式值打印在单独一行上,保留两位小数
Sample Input
1
1
2
1 1.2
3 -3.4
Sample Output
1.00
-7.00 展开
求 N 阶方阵对应的行列式值。
Input
输入数据包含多组测试案例。每组测试案例由N(0<N≤10)开头,N表示方阵阶数,后续N行每行包含N个实数
Output
对于每个测试用例,行列式值打印在单独一行上,保留两位小数
Sample Input
1
1
2
1 1.2
3 -3.4
Sample Output
1.00
-7.00 展开
1个回答
展开全部
#include<stdio.h>
#include<stdlib.h>
void main()
{
float f(float *a,int n);
int i,j,n;
scanf("%d",&n);
float *a=(float *)malloc(n*sizeof(float));
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%f",a+i*n+j);
printf("行列式如下:\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%-5.2f ",*(a+i*n+j));
printf("\n");
}
printf("%-8.2f\n",f(a,n));
}
float f(float *a,int n)
{
int i,j,k,p=1;
float *b=(float *)malloc(n*n*sizeof(float));
for(i=0;i<n;i++)
for(j=0;j<n;j++)
*(b+i*n+j)=0;
float s=0;
if(n==1)
return *a;
if(n==2)
return *a**(a+n+1)-*(a+1)**(a+n);
else
for(i=0;i<n;i++)
{
for(j=0;j<n-1;j++)
for(k=0;k<n-1;k++)
if(k>=i)
*(b+n*j+k)=*(a+n*j+k+1);
else
*(b+n*j+k)=*(a+n*j+k);
s+=p**(a+n*(n-1)+i)*f(b,n-1);
p*=-1;
}
return s;
}
#include<stdlib.h>
void main()
{
float f(float *a,int n);
int i,j,n;
scanf("%d",&n);
float *a=(float *)malloc(n*sizeof(float));
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%f",a+i*n+j);
printf("行列式如下:\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%-5.2f ",*(a+i*n+j));
printf("\n");
}
printf("%-8.2f\n",f(a,n));
}
float f(float *a,int n)
{
int i,j,k,p=1;
float *b=(float *)malloc(n*n*sizeof(float));
for(i=0;i<n;i++)
for(j=0;j<n;j++)
*(b+i*n+j)=0;
float s=0;
if(n==1)
return *a;
if(n==2)
return *a**(a+n+1)-*(a+1)**(a+n);
else
for(i=0;i<n;i++)
{
for(j=0;j<n-1;j++)
for(k=0;k<n-1;k++)
if(k>=i)
*(b+n*j+k)=*(a+n*j+k+1);
else
*(b+n*j+k)=*(a+n*j+k);
s+=p**(a+n*(n-1)+i)*f(b,n-1);
p*=-1;
}
return s;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询