怎样把c语言程序主程序和子程序分开后连接编译啊?请大家帮个忙,谢谢!
这是高斯迭代程序,我用wintc编译的。当我把主程序和子程序放在一起编译时正确的,但把他们分成多个文件编译却显示这样的错误(错误 main.c 5: 无法打开包含文件 'diedailie.c')请高手指导一下,谢谢这是放在一起的程序:
#include"stdlib.h"
#include"stdio.h"
#include<math.h>
void main()
{ float arg,*point=&arg;
void readdata(float a[],float b[],int *n,int *dmax,float *eps); /*声明*/ /*读取数据*/
void compute(float a[],float b[],int n,float *x); /*高斯列主元计算*/
void outdata(float x[],int n ); /*输出数据*/
void diedailie(float a[],float b[],float x[],int n,int dmax,float eps); /*迭代求精*/
int n,i,dmax;
float *a,*b,*x,eps;
a=(float *)malloc(n*n*sizeof(float));
b=(float *)malloc(n*sizeof(float));
x=(float *)malloc(n*sizeof(float));
printf("This is a program for die dai-lie gauss:\n");
readdata(a,b,&n,&dmax,&eps);
diedailie(a,b,x,n,dmax,eps);
free(a);free(b);
outdata(x,n);
free(x);
printf("\n\nsuccessful!\n");
getch();
}
void readdata(float a[],float b[],int *n,int *dmax,float *eps) /*读取数据*/
{ int f,i,j,d;
printf("input 1,hilbert;others,esc\n");
scanf("%d",&f);
if(f==1)
{ printf("input n,dmax,eps\n");
scanf("%d %d %f",n,dmax,eps);
d=*n;
for(i=0;i<d;i++)
{
b[i]=0;
for(j=0;j<d;j++)
{ a[i*d+j]=1.0/(i+j+1);
b[i]=b[i]+a[i*d+j];
}
}
}
else exit(0);
}
void compute(float a[],float b[],int n,float *x) /*高斯计算*/
{ float arg,*point=&arg;
int i,j,k,t;
float c;
for(k=0;k<=n-2;k++)
{
for(i=k+1;i<=n-1;i++)
{
if(a[k*n+k]<a[i*n+k])
{
for(t=k;t<=n-1;t++)
{
c=a[k*n+t];
a[k*n+t]=a[i*n+t];
a[i*n+t]=c;
}
c=b[k];
b[k]=b[i];
b[i]=c;
}
}
if(a[k*n+k]==0)
{printf("\nCan not yunxin!\n");
system("pause"); exit(0); /*无法计算,程序退出*/
}
for(i=k+1;i<=n-1;i++)
{ a[i*n+k]=-a[i*n+k]/a[k*n+k];
for(j=k+1;j<=n-1;j++)
a[i*n+j]=a[i*n+j]+a[i*n+k]*a[k*n+j];
b[i]=b[i]+a[i*n+k]*b[k];
}
}
x[n-1]=b[n-1]/a[(n-1)*n+(n-1)];
for(k=n-2;k>=0;k--)
{float temp=0;
for(j=k+1;j<n;j++)
temp=temp+a[k*n+j]*x[j];
x[k]=(b[k]-temp)/a[k*n+k];
}
}
void diedailie(float a[],float b[],float x[],int n,int dmax,float eps)
{
void compute(float a[],float b[],int n,float *x);
int i,j;
float mm,temp;
float *r,*e,*aa;
float lamda;
float m;
m=fabs(a[0]);
aa=(float *)malloc(n*n*sizeof(float));
r=(float *)malloc(n*sizeof(float));
e=(float *)malloc(n*sizeof(float));
for(i=0;i<n;i++)
{ for(j=0;j<n;j++)
{ if(m>fabs(a[i*n+j]))
m=fabs(a[i*n+j]);
}
}
lamda=m*m/9;
for(i=0;i<n;i++)
{ for(j=0;j<n;j++)
{ aa[i*n+j]=a[i*n+j];
if(i==j) aa[i*n+j]+=lamda;
}
}
for(i=0;i<n;i++) x[i]=0;
mm=eps+1;
for(i=0;i<n;i++) r[i]=b[i];
j=0;
while(mm>eps)
{
j++;
if(j>dmax)
{ printf("fa san");
getch();
exit(0);
}
compute(aa,r,n,e);
for(i=0;i<n;i++) x[i]+=e[i];
for(i=0;i<n;i++)
{
temp=b[i];
for(j=0;j<n;j++) temp-=a[i*n+j]*x[j];
r[i]=temp;
}
mm=0;
for(i=0;i<n;i++)
{ if(r[i]>mm) mm=r[i];}
}
}
void outdata(float x[],int n ) /*输出数据*/
{
float arg,*point=&arg;
FILE *fp;
int i;
if((fp=fopen("out.txt","w"))==NULL)
{printf("Can not open the file\n");
system("pause"); exit(0); /*无法输出,程序退出*/
}
for(i=0;i<n;i++)
fprintf(fp,"%f\n",x[i]);
fclose(fp);
printf("\nthe result is:\n"); /*结果显示*/
for(i=0;i<n;i++)
printf("x%d=%f\t",i,x[i]);
}
我把程序分成五个部分,编译失败,显示 错误 main.c 5: 无法打开包含文件 'diedailie.c' 分开后程序如下:
第一个
main.c
#include"stdlib.h"
#include"stdio.h"
#include<math.h>
#include"readdata.c"
#include"diedailie.c"
#include"compute.c"
#include"outdata.c"
void main()
{
}
第二个
readdata.c
#include"stdlib.h"
#include"stdio.h"
#include<math.h>
void readdata(float a[],float b[],int *n,int *dmax,float *eps) /*读取数据*/
{
}
第三个
compute.c
#include"stdlib.h"
#include"stdio.h"
#include<math.h>
void compute(float a[],float b[],int n,float *x) /*高斯计算*/
{
}
第四个
diedailie.c
#include"stdlib.h"
#include"stdio.h"
#include<math.h>
void diedailie(float a[],float b[],float x[],int n,int dmax,float eps)
{
}
第五个
outdata.c
#include"stdlib.h"
#include"stdio.h"
#include<math.h>
void outdata(float x[],int n ) /*输出数据*/
{
}
但不能编译啊!!! 出现:错误 main.c 5: 无法打开包含文件 'diedailie.c'
请高手指点,谢谢!!!!!!