| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 383 人关注过本帖
标题:请各位帮帮忙,一个比较厉害的程序设计!!
只看楼主 加入收藏
glj1211
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2010-6-7
结帖率:0
收藏
 问题点数:0 回复次数:0 
请各位帮帮忙,一个比较厉害的程序设计!!
题目:直接法解线性方程组算法设计
直接法解线性方程组可以采用Gauss列主元素消去法或直接三角分解法。应具有解决任意阶(n<10)线性方程组的能力,包含以下模块:
(1)输入系数矩阵
(2)消元(或分解)
(3)回代
(4)输出结果
要求:用VC构建一个像VB的界面,其中我已经把C代码写好了,请各位看看怎么整理。
#include "iostream.h"
#include "stdlib.h"
#include "math.h"
#include "stdio.h"
#define MAX 200
int Guass(double a[],double b[],int n)
{//int n;
//double a[],b[];

    int *s,l,k,i,j,m,p,q;
    double d,t;
    s=new int(n*sizeof(int));
    l=1;
    for (k=0;k<=n-2;k++)
    {
        d=0.0;
        /*下面是换主元部分,即从系数矩阵A的第K行,第K列之下的部分选出
        绝对值最大的元,交换到对角线上。*/
        for (i=k;i<=n-1;i++)
            for (j=k;j<=n-1;j++)
            {
                t=fabs(a[i*n+j]); /*fabs()定义在math.h中,含义是求一个浮点数的绝对值。*/
                if (t>d) { d=t; s[k]=j; m=i;}
            }
        if (d+1.0==1.0) l=0;  /*主元为0*/
        /*主元不为0的时候*/
        else
        {
            if (s[k]!=k)
                for (i=0;i<=n-1;i++)
                {
                    p=i*n+k; q=i*n+s[k];
                    t=a[p]; a[p]=a[q]; a[q]=t;
                }
            if (m!=k)
            {
                for (j=k;j<=n-1;j++)
                {
                    p=k*n+j; q=m*n+j;
                    t=a[p]; a[p]=a[q]; a[q]=t;
                }
                t=b[k]; b[k]=b[m]; b[m]=t;
            }
        }
        if (l==0)
        {
            free(s); printf("失败 !\n");
            return(0);
        }
        d=a[k*n+k];
        /*下面为归一化部分*/
        for (j=k+1;j<=n-1;j++)
        {
            p=k*n+j; a[p]=a[p]/d;
        }
        b[k]=b[k]/d;
        /*下面为矩阵A,B消元部分*/
        for (i=k+1;i<=n-1;i++)
        {
            for (j=k+1;j<=n-1;j++)
            {
                p=i*n+j;
                a[p]=a[p]-a[i*n+k]*a[k*n+j];
            }
            b[i]=b[i]-a[i*n+k]*b[k];
        }
    }

    d=a[(n-1)*n+n-1];
    /*矩阵无解或有无限多解*/
    if (fabs(d)+1.0==1.0)
    {
        free(s); printf("该矩阵为奇异矩阵\n");
        return(0);
    }
    b[n-1]=b[n-1]/d;
    /*下面为迭代消元*/
    for (i=n-2;i>=0;i--)
    {
        t=0.0;
        for (j=i+1;j<=n-1;j++)
            t=t+a[i*n+j]*b[j];
        b[i]=b[i]-t;
    }
    s[n-1]=n-1;
    for (k=n-1;k>=0;k--)
        if (s[k]!=k)
        { t=b[k]; b[k]=b[s[k]]; b[s[k]]=t;}
    free(s);
    return(1);
}

void main()
{
    int i,n;
    double A[MAX];
    double B[MAX];
    //clrscr();
    puts("求解N阶线性代数方程组 Ax=B");
    puts("用高斯消去法求如下形式的方程组的解:");
    puts("\n    a(0,0)x0+a(0,1)x1+a(0,2)x2+...+a(0,n-1)xn-1=b0");
    puts("    a(1,0)x0+a(1,1)x1+a(1,2)x2+...+a(1,n-1)xn-1=b1");
    puts("    ......");
    puts("    a(n-1,0)x0+a(n-1,1)x1+a(n-1,2)x2+...+a(n-1,-1)xn-1=bn-1\n");
    printf(" >> 请输入阶数 n (>1): ");
    scanf("%d",&n);
    printf(" >> Please input the %d elements of matrix A(%d*%d) one by one:\n",n*n,n,n);
    for(i=0;i<n*n;i++)
    scanf("%lf",&A[i]);
    printf(" >> Please input the %d elements of matrix B(%d*1) one by one:\n",n,n);
    for(i=0;i<n;i++)
    scanf("%lf",&B[i]);
    if (Guass(A,B,n)!=0)           /*调用Guass消去,1为计算成功*/
    printf(" >> 线性方程 Ax=B 的解为 x(%d*1):\n",n);
    for (i=0;i<n;i++)              /*打印结果*/
    printf("x(%d)=%f  ",i,B[i]);
    puts("\n Press any key .......");
    //getch();
}
搜索更多相关主题的帖子: 程序设计 
2010-06-29 22:32
快速回复:请各位帮帮忙,一个比较厉害的程序设计!!
数据加载中...
 
   



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

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