社区
C语言
帖子详情
各位前辈 帮个忙阿 我真快急死了
hksblct
2006-11-26 07:03:20
要用c编一个计算n阶行列式值的程序
可惜我新手 说来不怕笑 都想了一个星期了
还是没想出 哪位大哥 能给个代码 并解释一下吗
小弟不胜感激
...全文
250
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
打赏
举报
回复
大家不屑回答吗?
Linux 下修改Oracle 的字符集
参考: Linux 下修改Oracle 的字符集:WE8ISO8859P1 修改为 ZHS16GBK 问题描述:在Linux下静默安装的Oracle,默认的字符集没有修改,使用的是WE8ISO8859P1,imp导入后的数据中文全显示为???。问题出在oracle服务端的字符集不支持中文导致。 可以通过: select userenv(‘language’) from dual
Linux下修改Oracle数据库字符集命令及步骤
如果需要将现有数据转换为新的字符集,可以使用Oracle提供的工具和方法来执行此操作。在Linux操作系统下,我们可以使用以下命令和步骤来修改Oracle数据库的字符集。b. 根据扫描结果,使用适当的方法和工具(例如"ALTER TABLE"语句、"ALTER SESSION"语句等)将数据转换为新的字符集。确保使用支持的字符集,并确保新字符集与您的数据和应用程序要求相匹配。a. 使用Oracle提供的字符集转换工具(例如"CSSCAN")扫描数据库,以检测可能需要转换的对象。该参数定义了数据库的字符集。
Linux下修改Oracle数据库字符集
最近一直到折腾这Oracle数据库。在Linux下安装Oracle真的是很头痛。好不容易成功了,才发现字符集没有设置对。在网上也搜了不少,发现很多修改命令居然都报错,不知道是为什么。 今天就把自己的亲测可用的代码记录下来以备以后使用啊: SQL> conn /as sysdba; SQL>select userenv('language') from ...
linux服务器上修改oracle数据库的字符集
linux服务器上修改oracle数据库的字符集 linux服务器上以dba身份进入:sqlplus / as sysdba; 依次执行以下命令: shutdown immediate; startup mount; alter system enable restricted session; alter system set job_queue_processes=0; alter syste...
linux下修改oracle数据库的字符集
1、登录oracle所在服务器 2、plsql连接数据库 #>plsql /nolog --注意/前面有一个空格 #>conn sys/sys as dba 3、执行下面命令修改字符集编码 #>SHUTDOWN IMMEDIATE; --关闭数据库 #>STARTUP MOUNT; --启动数据库 #>ALTER SESSION SET SQL_TRACE=
C语言
70,040
社区成员
243,237
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章