c语言怎么避免主程序冲突,怎样把c语言程序主程序和子程序分开后连接编译啊?请大家帮个忙,谢谢!...

已结贴√

问题点数:20 回复次数:4

ca56232b3bbedf9a539d07f37fffb99a.gif

3144d8b7615c79d9f638db40d5689d26.gif

a218af6549b45ee526caf607ebff1358.gif

0f8df0e29816ae721419de940fb833d1.gif

怎样把c语言程序主程序和子程序分开后连接编译啊?请大家帮个忙,谢谢!

这是高斯迭代程序,我用wintc编译的。当我把主程序和子程序放在一起编译时正确的,但把他们分成多个文件编译却显示这样的错误(错误 main.c 5: 无法打开包含文件 'diedailie.c')请高手指导一下,谢谢

这是放在一起的程序:

#include"stdlib.h"

#include"stdio.h"

#include

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

{

b[i]=0;

for(j=0;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]

{

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

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

{ for(j=0;j

{ if(m>fabs(a[i*n+j]))

m=fabs(a[i*n+j]);

}

}

lamda=m*m/9;

for(i=0;i

{ for(j=0;j

{ aa[i*n+j]=a[i*n+j];

if(i==j) aa[i*n+j]+=lamda;

}

}

for(i=0;i

mm=eps+1;

for(i=0;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

for(i=0;i

{

temp=b[i];

for(j=0;j

r[i]=temp;

}

mm=0;

for(i=0;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

fprintf(fp,"%f\n",x[i]);

fclose(fp);

printf("\nthe result is:\n"); /*结果显示*/

for(i=0;i

printf("x%d=%f\t",i,x[i]);

}

我把程序分成五个部分,编译失败,显示 错误 main.c 5: 无法打开包含文件 'diedailie.c' 分开后程序如下:

第一个

main.c

#include"stdlib.h"

#include"stdio.h"

#include

#include"readdata.c"

#include"diedailie.c"

#include"compute.c"

#include"outdata.c"

void main()

{

}

第二个

readdata.c

#include"stdlib.h"

#include"stdio.h"

#include

void readdata(float a[],float b[],int *n,int *dmax,float *eps) /*读取数据*/

{

}

第三个

compute.c

#include"stdlib.h"

#include"stdio.h"

#include

void compute(float a[],float b[],int n,float *x) /*高斯计算*/

{

}

第四个

diedailie.c

#include"stdlib.h"

#include"stdio.h"

#include

void diedailie(float a[],float b[],float x[],int n,int dmax,float eps)

{

}

第五个

outdata.c

#include"stdlib.h"

#include"stdio.h"

#include

void outdata(float x[],int n ) /*输出数据*/

{

}

但不能编译啊!!! 出现:错误 main.c 5: 无法打开包含文件 'diedailie.c'

请高手指点,谢谢!!!!!!

搜索更多相关主题的帖子:

子程序 c语言 主程序 编译

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值