利用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); }
新建工程,即可调用成功。
此处主函数的矩阵维数还是给定的 后续版本给不定的。