zoukankan      html  css  js  c++  java
  • 利用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);
    }

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

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

  • 相关阅读:
    sql 行转列
    wm_concat函数 用法
    PL/SQL如何调试Oracle存储过程
    Oracle&SQLServer中实现跨库查询
    Oracle 中 decode 函数用法
    Oracle中给用户赋予debug权限
    Oracle中的NVL函数
    oracle 触发器 pragma autonomous_transaction
    ORACLE中%TYPE和%ROWTYPE的使用
    A complete example using RAISE_APPLICATION_ERROR : raise_application_error
  • 原文地址:https://www.cnblogs.com/kmliang/p/2863343.html
Copyright © 2011-2022 走看看