帮忙看下!!!!
帮忙看下!!!!这个程序用于求方阵的行列式,方法是用第一行倍加到其余行,使其余行首元素归零.....最后得到上三角阵,把对角线上元素相乘即得行列式值.
错误已经发现,就是/*......*/之间的部分,请问怎么错了?
#include <stdio.h>
#include <math.h>
void main()
{
int size,//方阵的阶数
h,j,k,//控制变量
switchtime=0;//交换次数
float D,//存放方阵
result=1,//行列式值
temp,//交换中介
flag;//倍加系数
FILE *fp;//文件指针
fp=fopen("fzsj.txt","r");
fscanf(fp,"%d",&size);//读取方阵阶数
for(h=0;h<size;h++)//读取方阵数据
for(j=0;j<size;j++)
fscanf(fp,"%f",&D);
for(k=0;k<size;k++)
{
/* for(h=k;h<size;h++)//寻找首元素非零的行
if(D!=0)
break;//找到后退出此循环
if(h>k)
{
for(j=k;j<size;j++)//交换两行
{
temp=D;
D=D;
D=temp;
}
switchtime++;//换行控制变量自增
}
*/
for(h=k+1;h<size;h++)//倍加归零
{
flag=D/D;
for(j=k;j<size;j++)
D-=D*flag;
}
}
for(h=0;h<size;h++)
result*=D;
/*for(h=0;h<switchtime;h++)
result=(-result);
*/
printf("%f\n",result);
} 给你个能用的代码吧。
这段代码是用选主元的Gauss消去法(就是你说的化为对角阵)解线性方程组的程序。先把矩阵化为上三角阵,再解方程。你把解方程组的代码删了就行了。void solve(double fdao, double vec_delta, double f)
{
int i, j, k, ik;
double tmp, mik;
for(k = 0; k < M-1; k++)
{
ik = k;
for(i = k; i < M; i++)if(fabs(fdao) < fabs(fdao))ik = i;//找出行首元最大的行;
for(j = k; j < M; j++)
{
tmp = fdao; fdao = fdao; fdao = tmp;//交换当前行与最大行;
}
tmp = f; f = f; f = tmp;
for(i = k + 1; i < M; i++)
{
mik = fdao / fdao;
for(j = k; j < M; j++)fdao = fdao - mik * fdao;
f-= mik * f;
}
}
vec_delta = f / fdao;//以下为解方程;
for(k = M-2; k >= 0; k--)
{
tmp = 0;
for(j = k+1; j < M; j++)tmp+= fdao * vec_delta;
vec_delta = (f - tmp) / fdao;
}
}选主元的Gauss消去法仍然是数值分析的内容。
回复 2# 的帖子
我的目的不是想得到一个能用的程序,这只是个学习过程,我还是想知道我的程序哪里错了,不然我睡不着觉啊,呵呵,还望大哥帮忙!/*,,,,,,,,,,*/中间的部分到底怎么错了? 不经意间不知道怎么回事这个程序居然又能用了,难道。。。。。?太让我费解了! 找bug也是个学习过程。所以自己找吧。:loveliness:回复 5# 的帖子
我只是凭借着以前对C的一点知识加上兴趣来学习,由于是业余,能力显然也很弱,以后还请多费心指导.
页:
[1]