您的位置:首页 > 编程语言 > C语言/C++

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

2013-01-16 21:03 549 查看
主函数:

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);
}


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

此处主函数的矩阵维数还是给定的 后续版本给不定的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: