发新话题
打印

帮忙看下!!!!

帮忙看下!!!!

这个程序用于求方阵的行列式,方法是用第一行倍加到其余行,使其余行首元素归零.....最后得到上三角阵,把对角线上元素相乘即得行列式值.
错误已经发现,就是/*......*/之间的部分,请问怎么错了?
#include <stdio.h>
#include <math.h>
void main()
{
        int size,//方阵的阶数
                h,j,k,//控制变量
                switchtime=0;//交换次数
        float D[99][99],//存放方阵
                  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[h][j]);

        for(k=0;k<size;k++)
        {
        /*        for(h=k;h<size;h++)//寻找首元素非零的行
                        if(D[h][k]!=0)
                                break;//找到后退出此循环
               
               
                if(h>k)
                {
                        for(j=k;j<size;j++)//交换两行
                        {
                                temp=D[h][j];
                                D[h][j]=D[k][j];
                                D[k][j]=temp;
                        }
                        switchtime++;//换行控制变量自增
                }
*/
               
                for(h=k+1;h<size;h++)//倍加归零
                {
                        flag=D[h][k]/D[k][k];
                        for(j=k;j<size;j++)
                                D[h][j]-=D[k][j]*flag;
                }
        }

        for(h=0;h<size;h++)
                result*=D[h][h];
        /*for(h=0;h<switchtime;h++)
                result=(-result);
    */
        printf("%f\n",result);
}

TOP

我觉得算法和实现都没问题,虽然有点繁琐
你确定数都从文件中正确读入了吗?
因为梦想而努力,因为有你而精彩!
mail: qianzongming@gmail.com

TOP

数据读取是没有问题的,我把/*..........*/中的部分不要的话找个合适的方阵可以得到正确的结果呢,
另外你所说的繁琐是指哪里而言?能不能说明白一些,怎么更简洁一些?
我只知道把第二个/*......*/中改为
if(switchtime%2)
     result=-result;
这样更简洁些
还有其它要改的吗?

[ 本帖最后由 bobnie 于 2008-6-18 10:26 编辑 ]

TOP

发新话题