社区
C语言
帖子详情
各位前辈 帮个忙阿 我真快急死了
hksblct
2006-11-26 07:03:20
要用c编一个计算n阶行列式值的程序
可惜我新手 说来不怕笑 都想了一个星期了
还是没想出 哪位大哥 能给个代码 并解释一下吗
小弟不胜感激
...全文
237
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德的系统!一开始用宽带连接都可以上的,后来去姑妈家用内置无线网卡上网,回来后发现宽带连接不上去了,错误代码是678!我把IP地址换了好几个都连不上去,是我IP没换好,还是VISTA系统换成XP都有问题啊!Atheros AR928X Wireless Network Adapter这个驱动显示感叹号!都快急死我了!请各位
前辈
帮帮
忙
!显示感叹号就是你的驱动有问题, 驱动之家重新找个版本装上试试.
无线网卡设
【刷题有奖】刷题活动2期-参与奖&;欧气奖第二周获奖名单
平台技术部,一面全是八股和一些基础,加上一道Medium手撕题重拍链表二面历时1h的虐杀,心态全崩,我到底是什么菜狗[牛泪]自我介绍什么时候接触前端,为什么选择。多多金融后台开发岗,九月底前筛选完简历,免笔试直接推面试程序,孩子想挣内推钱,有兴趣的简历直接发我,我帮你们催hr推进度!救命啊,,,,快给我个结果吧,
急死了
急死了
真的
急死了
,什么事情都没心情干,好的也好坏的也好,快给个结果吧,好想要个offer,快给我一个吧球球了球球了,孩子真的。秋招的时候,在腾讯投递了软件开发-后台开发方向。
分手后每天给女朋友一条短信笑话
和女朋友分手了,而且还很想挽留回这段感情。虽然知道这样是没用的,但还是希望她每天都快乐,所以每天给她发一条短信笑话!希望各位
前辈
赐教!因为是短信,所以希望是精短的爆笑的。希望各位支持我,我永远不会跑的。 这里的是我这30天发的笑话。 1.医院,一个电工走入手术室,对一位戴着氧气罩的垂危病人说道:"你听好,好好深呼吸,我需要停电五分钟!" 2.儿子做错了事,被老...
关于蔡学镛
前辈
《Java夜未眠》的一些摘要
关于蔡学镛
前辈
《Java夜未眠》的一些摘要 转自:http://www.blogjava.net/guoyongfei/archive/2009/02/06/253571.html 题记:最近看了《 java 夜未眠》这本书,感觉很不错,里面将当时(包括现在)的一些现状,以及一些知识点分析的很清楚、很透彻,而且浅显易懂,写作风格幽默风趣,读起来也不费力;虽然有些地方比较偏激,但那是不可否认的...
记录一下:星环科技Hadoop实习生岗位面试
我刚毕业时在西安高新区工作,住在公司附近的一个城中村,步行20分钟上下班,每天下班回家经过科技路和高新路的十字路口,看着灯璧辉煌的城市中陕西电信、人民银行陕西分。快速更新:通过HMR,Vite能够在开发阶段实现快速更新,将变更仅限于修改的模块,而不需要重新构建和刷新整个页面。#华为# 各位同学,有没有正在找工作的,招聘Java开发,测试等岗位。目前手上的offer如下,都是base深圳,总包价格差不多:荣耀:结构工程师,
忙
,薪资如选项,比较打动我的是hr和我说培养新人以及绩效考核都比较科学;
C语言
70,040
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章