各位前辈 帮个忙阿 我真快急死了

hksblct 2006-11-26 07:03:20
要用c编一个计算n阶行列式值的程序
可惜我新手 说来不怕笑 都想了一个星期了
还是没想出 哪位大哥 能给个代码 并解释一下吗
小弟不胜感激
...全文
221 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hksblct 2006-11-26
  • 打赏
  • 举报
回复
4
1 2 3 4
5 0 0 0
-1 2 3 6
5 -1 1 -2
正确应该是50 可先按上面的是-20 不理解为什么
hksblct 2006-11-26
  • 打赏
  • 举报
回复
刚才一直在改
可惜有三个错误数据
medie2005 2006-11-26
  • 打赏
  • 举报
回复
对不起,上次发的有错。下面是改正后的。

代码:

//------------------------------------------
// 行列式求值
//
// 本程序使用降阶法, 用递归实现.
//
//
//------------------------------------------
#include <stdio.h>
#define MAX 20

float value(int n,float *a)
{
float sum=0;/*符号为+*/
float sub=0;/*符号为-*/
int i;

if(!n)
return 0.0;
if(n==1)
return a[0];
if(n==2)
return a[0]*a[3]-a[1]*a[2];

for(i=0;i<n;i++)
{
{
float total=1.0;
int row=0,con;
int num=0;
for(con=i;con<n;con++,row++)
{
total*=a[row*n+con];
num++;
}
row=num;

for(con=0;row<n&&num!=n;con++,row++)
total*=a[row*n+con];

sum+=total;
}

{
float total=1.0;
int row=0,con;
int num=0;

for(con=i;con>=0;con--,row++)
{
total*=a[row*n+con];
num++;
}

row=num;

for(con=n-1;row<n&&num!=n;con--,row++)
total*=a[row*n+con];
sub+=total;
}
}
return sum-sub;
}

void main()
{
int n; /*阶数*/
int i;
float a[MAX*MAX];
float result;

printf("\n输入阶数(<%d):",MAX);
scanf("%d",&n);

printf("\n依序输入行列式(行展开的顺序):\n");
for(i=0;i<n*n;i++)
scanf("%f",&a[i]);

printf("\n******输入的行列式******\n");
for(i=0;i<n*n;i++)
{
printf("%f\t",a[i]);
if(i%n==n-1) printf("\n");
}

result=value(n,a);

printf("***行列式结果为:%f \n",result);
}
jixingzhong 2006-11-26
  • 打赏
  • 举报
回复
晕啊 ~~

我的意思是 输入 n
是行列式的阶数 然后输入行列式的元素 输出行列式的制
n<10就行
===========
基本就不需要改了啊,
注意一下输入数据格式就足够了 ...
hksblct 2006-11-26
  • 打赏
  • 举报
回复
呵呵 这个也改过 可惜就是没弄好
medie2005 2006-11-26
  • 打赏
  • 举报
回复
楼主看下面的合适不?

代码:

//------------------------------------------
// 行列式求值
//
// 本程序使用降阶法, 用递归实现.
//
//
//------------------------------------------
#include <stdio.h>

#define MAX 20

float value(int n,float *a)
{
float sum=0;/*符号为+*/
float sub=0;/*符号为-*/
int i;
if(n==0)
return 0.0;
if(n==1)
return a[0];
if(n==2)
return a[0]*a[3]-a[1]*a[2];
for(i=0;i<n;i++)
{
{
float total=1.0;
int row=0,con;
int num=0;
for(con=i;con<n;con++,row++){
total*=a[row*n+con];
num++;}
row=num;
for(con=0;row<n&&num!=n;con++,row++)
total*=a[row*n+con];
sum+=total;
}

{
float total=1.0;
int row=0,con;
int num=0;
for(con=i;con>=0;con--,row++)
{
total*=a[row*n+con];
num++;
}
row=num;
for(con=n-1;row<n&&num!=n;con--,row++)
total*=a[row*n+con];
sub+=total;
}
}
return sum-sub;
}

int main()
{
int n; /*阶数*/
int i;
float a[MAX*MAX];
float result;

printf("\n输入阶数:");
scanf("%d",&n);

printf("\n依序输入行列式(行展开的顺序):\n");
for(i=0;i<n*n;i++)
scanf("%f",&a[i]);

printf("\n******输入的行列式******\n");
for(i=0;i<n*n;i++)
{
printf("%f\t",&a[i]);
if(i%n==n-1)
printf("\n");
}

result=value(n,a);

printf("***行列式结果为:%f \n",&result);

return 1;

}
hksblct 2006-11-26
  • 打赏
  • 举报
回复
我也知道有花三角式 和递归 可毕竟是新手阿 怎么也想不出怎么编
hksblct 2006-11-26
  • 打赏
  • 举报
回复
这种算法我看过可惜不好用
这几天几乎把网上能看得都看了
能改的都改了
很多都有错误

我的意思是 输入 n
是行列式的阶数 然后输入行列式的元素 输出行列式的制
n<10就行
youlvconlin 2006-11-26
  • 打赏
  • 举报
回复
网上的一种递归算法
#define N 5

swap(int j,int n,int a[N][N])
// 把a[n][n]中的除n-1行和j列以外的元素放到a的前(n-1)^2个元素中
{ int x,y;
for(y=j;y<n;y++)
for(x=0;x<=n-1;x++)//只交换前n行
a[x][y]=a[x][y+1];
}

int hls(int n, int a[N][N])
//求a的前n^2个元素组成的行列式的值
{ //思路:
//保存b[x][y]=a[x][y];
//把a[n][n]中的n-1行和0列上以外的元素放到a的前(n-1)*(n-1)个元素中
//计算a[n-1][0]*hls(n-1,a)*(-1)^(n-1+0)
//恢复a
//...
////把a[n][n]中的n-1行和j列以外的元素放到a的前(n-1)*(n-1)个元素中
//计算a[n-1][j]*hls(n-1,a)*(-1)^(n-1+j)
//恢复a
//...
//返回上述之和
int x,y,j,s=0,b[N][N];
if(n==2) return a[0][0]*a[1][1]-a[0][1]*a[1][0];

for(j=0;j<n;j++)
{
for(x=0;x<N;x++)
for(y=0;y<N;y++)
b[x][y]=a[x][y];

swap(j,n-1,a);
if((j+n-1)%2) s-=a[n-1][j]*hls(n-1,a);
else s+=a[n-1][j]*hls(n-1,a);


for(x=0;x<N;x++)
for(y=0;y<N;y++)
a[x][y]=b[x][y];
}

return s;

}

main()
{ int a[N][N];
printf("输入%d个数:",N*N);
for(int i=0;i<N;i++)
for(int j=0;j<N;j++)
scanf("%d",&a[i][j]);
printf("结果=%d\n",hls(N,a));
}
jackzhhuang 2006-11-26
  • 打赏
  • 举报
回复
什么叫"计算n阶行列式值的程序"???说清楚点好吗?
hksblct 2006-11-26
  • 打赏
  • 举报
回复
大家不屑回答吗?

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧