社区
C语言
帖子详情
各位前辈 帮个忙阿 我真快急死了
hksblct
2006-11-26 07:03:20
要用c编一个计算n阶行列式值的程序
可惜我新手 说来不怕笑 都想了一个星期了
还是没想出 哪位大哥 能给个代码 并解释一下吗
小弟不胜感激
...全文
221
11
打赏
收藏
各位前辈 帮个忙阿 我真快急死了
要用c编一个计算n阶行列式值的程序 可惜我新手 说来不怕笑 都想了一个星期了 还是没想出 哪位大哥 能给个代码 并解释一下吗 小弟不胜感激
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
大家不屑回答吗?
软件逆向高级工程
补丁篇:说到补丁,同学们可能第一个想到的就是对方一些网络验证所用到的技巧,我的课程这一方面虽有涉及,但是补丁技术远远不止这一点,我的课程会详解更多的补丁知识原理,包括什么是补丁,补丁的真正概念,
前辈
们...
笔记本用过无线网之后就无法连接宽带了
我最近8月份刚买了华硕的笔记本,原系统是VISTA的,后来,我叫我哥帮我换了个XP德的系统!...请各位
前辈
帮帮
忙
!显示感叹号就是你的驱动有问题, 驱动之家重新找个版本装上试试. 无线网卡设
【刷题有奖】刷题活动2期-参与奖&;欧气奖第二周获奖名单
救命啊,,,,快给我个结果吧,
急死了
急死了
真的
急死了
,什么事情都没心情干,好的也好坏的也好,快给个结果吧,好想要个offer,快给我一个吧球球了球球了,孩子真的。秋招的时候,在腾讯投递了软件开发-后台开发...
分手后每天给女朋友一条短信笑话
希望各位
前辈
赐教!因为是短信,所以希望是精短的爆笑的。希望各位支持我,我永远不会跑的。 这里的是我这30天发的笑话。 1.医院,一个电工走入手术室,对一位戴着氧气罩的垂危病人说道:"你听好,好好...
关于蔡学镛
前辈
《Java夜未眠》的一些摘要
关于蔡学镛
前辈
《Java夜未眠》的一些摘要 转自:http://www.blogjava.net/guoyongfei/archive/2009/02/06/253571.html 题记:最近看了《 java 夜未眠》这本书,感觉很不错,里面将当时(包括现在)的一些现状,...
C语言
69,371
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章