| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 798 人关注过本帖
标题:行列式的计算问题
只看楼主 加入收藏
浮云之冰雪
Rank: 2
等 级:论坛游民
帖 子:74
专家分:89
注 册:2013-5-11
结帖率:90.91%
收藏
已结贴  问题点数:20 回复次数:5 
行列式的计算问题
//用来计算二、三阶的函数好像没有调用成功,总之不起作用
程序代码:
/**************************************************************
/*
/*                用于计算线性代数  n阶矩阵
/*                       2013-10-12
***************************************************************/

/*
/*   一些声明
/*/
void   display_front();                           //  用户指南
void   *input(double *inp,int flag);              //  获取数据
double execute(int flag);                         //  主执行函数
void   display_sterm(double *out,double result,
                     int flag);                   //  输出结果

#include <stdio.h>

#define N 100
#define M 100

double a[N][M];           //  原始矩阵

void
main()
{
    double *inp=a[0];     //  用于处理数据
    double result;        //  储存计算结果
    int       flag;          //  阶数
    char   ch='a';        //  控制循环的小小元素

    display_front();                 //  用户指南

    do
    {
        printf("请输入阶数:\n");
        scanf("%d",&flag);               //  获取阶数

        input(inp,flag);                 //  获得行列式数据

        result=execute(flag);            //  计算并返回结果
        display_sterm(inp,result,flag);  //  输出结果
    }while((ch=getch())!='N');
}

void display_front()
{
    printf("可以计算n阶行列式\n");
}

void *input(double *inp,int flag)
{
    int i,j;
    int f=0;

    printf("请键入数据:\n");
    for(i=0;i<flag;i++)
        for(j=0;j<flag;j++)
        {
            if(f==flag)
            {
                printf("\n");
                f=0;
            }
            scanf("%lf",inp++);   
            f++;
        }
}

/*********************************************************************************/

/*/
/* 本函数的一些子函数的声明
/*/

double one(void);
double two(void);
double three(void);
//double four(void);
//double five(void);

double execute(int flag)
{
    double result=0;
    switch(flag)
    {
        case 1 : result=one();break;
        case 2 : result=two();break;
        case 3 : result=three();break;

        default : printf("您的要求太高,我无法做到!\n");
    }
    return result;
}

double one(void)                  //  一阶算法
{
    return a[0][0];
}

double two(void)                  //  二阶算法
{
    return a[0][0]*a[1][1] - a[0][1]*a[1][0];
}

double three(void)                //  三阶算法
{
    return
        a[0][0]*a[1][1]*a[2][2] + a[0][1]*a[1][2]*a[2][0] + a[0][2]*a[1][0]*
        a[2][1] - a[0][2]*a[1][1]*a[2][0] - a[0][1]*a[1][0]*a[2][2] - a[0][0]
        *a[2][1]*a[2][2];
}

/*********************************************************************************/

void display_sterm(double *out,double result,int flag)
{
    int i,j;
    int f=0;

    printf("需要计算的行列式为:\n");

    for(i=0;i<flag;i++)
        for(j=0;j<flag;j++)
        {       
            printf(" %.0lf",*out++);   
            f++;
            if(f==flag)
            {
                printf("\n");
                f=0;
            }
        }
    printf("\n计算结果为:%.2lf\n\n",result);
}
搜索更多相关主题的帖子: color 行列式 
2013-10-14 13:38
dyh839911010
Rank: 2
来 自:武汉
等 级:论坛游民
帖 子:63
专家分:71
注 册:2011-9-14
收藏
得分:10 
如果只是计算乘法没必要搞这么复杂

把简单做到纯粹,自然有生活的成就。
游戏开发吧诚邀各位的驻足!
2013-10-14 13:43
在这里爬起
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:43
专家分:113
注 册:2013-8-9
收藏
得分:10 
程序代码:
#include <stdio.h>
#define N 100
#define M 100
void   display_front();                           //  用户指南
void   *input(double *inp,int flag);              //  获取数据
double execute(double *inp,int flag);                         //  主执行函数
void   display_sterm(double a[][M],double result,
                   int flag);                   //  输出结果


double a[N][M];           //  原始矩阵

void main()
{
    double *inp;       //  用于处理数据
    inp=&a[0][0];
    double result;        //  储存计算结果
    int   k,k1,flag;          //  阶数
    char   ch='a';        //  控制循环的小小元素

    display_front();                 //  用户指南

    do
    {
        printf("请输入阶数:\n");
        scanf("%d",&flag);               //  获取阶数
        input(inp,flag);              //  获得行列式数据
        for(k=0;k<flag;k++)
            for(k1=0;k1<flag;k1++)
            {
                a[k][k1]=*inp;
                inp++;
            }
        result=execute(inp,flag);    //  计算并返回结果
        display_sterm(a,result,flag);  //  输出结果
    }while((ch=getchar())!='N');
}

void display_front()
{
    printf("可以计算n阶行列式\n");
}

void *input(double *inp,int flag)
{
    int i,j;
    int f=0;

    printf("请键入数据:\n");
    for(i=0;i<flag;i++)
        for(j=0;j<flag;j++)
        {
            if(f==flag)
            {
                printf("\n");
                f=0;
            }
            scanf("%lf",inp++);  
            f++;
        }
        return 0;
}

/*********************************************************************************/

/*/
/* 本函数的一些子函数的声明
/*/

double one(void);
double two(void);
double three(void);
//double four(void);
//double five(void);

double execute(double *inp,int flag)
{
     inp=&a[0][0];
    double result=0;
    switch(flag)
    {
        case 1 : result=one();break;
        case 2 : result=two();break;
        case 3 : result=three();break;

        default : printf("您的要求太高,我无法做到!\n");
    }
    return result;
}

double one(void)                  //  一阶算法
{
    return a[0][0];
}

double two(void)                  //  二阶算法
{
    return a[0][0]*a[1][1] - a[0][1]*a[1][0];
}

double three(void)                //  三阶算法
{
    return
        a[0][0]*a[1][1]*a[2][2] + a[0][1]*a[1][2]*a[2][0] + a[0][2]*a[1][0]*
        a[2][1] - a[0][2]*a[1][1]*a[2][0] - a[0][1]*a[1][0]*a[2][2] - a[0][0]
        *a[2][1]*a[2][2];
}

/*********************************************************************************/

void display_sterm(double a[][M],double result,int flag)
{
    int i,j;
    int f=0;       
    printf("需要计算的行列式为:\n");
    for(i=0;i<flag;i++)
        for(j=0;j<flag;j++)
        { 
             if(f==flag)
            {
                printf("\n");
                f=0;
            }
            printf("% 0.lf",a[i][j]);
            f++;
        }
    printf("\n计算结果为:%.2lf\n\n",result);
}
我稍微改了一下,运行是正确的,LZ最主要的问题是你没有把数组和你设定的指针联系起来,那样就没有运行结果了。
2013-10-14 17:18
浮云之冰雪
Rank: 2
等 级:论坛游民
帖 子:74
专家分:89
注 册:2013-5-11
收藏
得分:0 
我仍然找不出错误,请明示!

潇洒不可少!
2013-10-15 14:47
在这里爬起
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:43
专家分:113
注 册:2013-8-9
收藏
得分:0 
回复 4楼 浮云之冰雪
虽然input(inp,flag) 获得了行列式。但是调用execute(flag)函数时要用到输入的行列式,你没有把inp作为参数调用。           
2013-10-15 15:59
浮云之冰雪
Rank: 2
等 级:论坛游民
帖 子:74
专家分:89
注 册:2013-5-11
收藏
得分:0 
依然如此!

潇洒不可少!
2013-10-16 22:24
快速回复:行列式的计算问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036277 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved