发新话题
打印

帮忙看下这个地方怎么错了?

帮忙看下这个地方怎么错了?

#include <stdio.h>
#include <math.h>
void main()
{
        int size,//方阵的阶数
                i,j,k,//控制变量
                switchtime=0;//交换次数
        float D[99][99],//存放方阵
                  result=1,//行列式值
              temp,//交换中介
                  flag;//倍加系数
        FILE *fp;//文件指针

        fp=fopen("fzsj.txt","r");
        fscanf(fp,"%d",&size);//读取方阵阶数

        for(i=0;i<size;i++)//读取方阵数据
                for(j=0;j<size;j++)
                        fscanf(fp,"%f",&D[j]);

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

               
                for(i=k+1;i<size;i++)//倍加归零
                {
                        flag=D[k]/D[k][k];
                        for(j=k;j<size;j++)
                                D[j]-=D[k][j]*flag;
                }
        }

        for(i=0;i<size;i++)
                result*=D;
        for(i=0;i<switchtime;i++)
                result=(-result);
        printf("%f\n",result);
}
这个程序用于求方阵的行列式,方法是用第一行倍加到其余行,使其余行首元素归零.....最后得到上三角阵,把对角线上元素相乘即得行列式值.
错误已经发现,就是/*......*/之间的部分,请问怎么错了?

TOP

你先把下标i换成别的标识符。
因为梦想而努力,因为有你而精彩!
mail: qianzongming@gmail.com

TOP

现在改过来了,为什么i加上中括号就显示不了呢?
#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

发新话题