利用C/C++实现从文件读入到子程序中调用返回结果

主函数:

View Code
#include <stdio.h>
#include "MyLib.h"

#define C(i,j)  C[i*36+j]        //用一维数组空间来表示二维数组
//int gaus(double a[],double b[],int n);
int main(int argc,char *argv[])
{
    FILE *fptr1, *fptr2,*fptr3;    
    int i,j;
    double a[36][36];
    double b[36];

    fptr1 = fopen("input1.txt", "r");
    for (i=0; i<36; i++)
    {
        for (j=0; j<36; j++)
        {
            fscanf(fptr1,"%lf", &a[i][j]);
        }
        fscanf(fptr1,"\n");
    }
    fclose(fptr1);

    fptr2 = fopen("input2.txt", "r");
    for (i=0; i<36; i++)
    {
        fscanf(fptr2,"%lf", &b[i]);
    }    
    fclose(fptr2);

    fptr3 = fopen("output.txt", "w");
    double C[36*36];
    for (i=0; i<36; i++)
    {
        for (j=0; j<36; j++)
        {
            C(i,j)=a[i][j];
        }
    }
    if (gaus(C,b,36)!=0)
    {
        for (i=0;i<=35;i++)
        {
            printf("x(%d)=%e\n",i,b[i]);
            fprintf(fptr3,"%18.5e",b[i]);
            fprintf(fptr3,"\n");
        }
    }
    fclose(fptr3);

    return 0;
}

头文件:

View Code
#include <stdlib.h>
#include <stdio.h>
#include <math.h>

/*处理函数*/
int gaus(double a[],double b[],int n)
{ 
    int *js,l,k,i,j,is,p,q;
    double d,t;
    js=(int *)malloc(n*sizeof(int));
    l=1;
    for (k=0;k<=n-2;k++)
    { 
        d=0.0;
        for (i=k;i<=n-1;i++)
            for (j=k;j<=n-1;j++)
            { 
                t=fabs(a[i*n+j]);
                if (t>d) 
                { 
                    d=t; 
                    js[k]=j; 
                    is=i;
                }
            }

            if (d+1.0==1.0)
                l=0;
            else
            { 
                if (js[k]!=k)
                    for (i=0;i<=n-1;i++)
                    { 
                        p=i*n+k;
                        q=i*n+js[k];
                        t=a[p]; 
                        a[p]=a[q];
                        a[q]=t;
                    }
                if (is!=k)
                { 
                    for (j=k;j<=n-1;j++)
                    { 
                        p=k*n+j;
                        q=is*n+j;

                        t=a[p]; 
                        a[p]=a[q]; 
                        a[q]=t;
                    }

                    t=b[k]; 
                    b[k]=b[is]; 
                    b[is]=t;
                }
            }

            if (l==0)
            { 
                free(js); 
                printf("fail\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;
            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(js); 
            printf("fail\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;
        }
        js[n-1]=n-1;
        for (k=n-1;k>=0;k--)
            if (js[k]!=k)
            { 
                t=b[k]; 
                b[k]=b[js[k]]; 
                b[js[k]]=t;
            }
            free(js);

        return (1);
}

新建工程,即可调用成功。

此处主函数的矩阵维数还是给定的 后续版本给不定的。

posted @ 2013-01-16 21:03  liang_l  阅读(1296)  评论(0编辑  收藏  举报