| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2877 人关注过本帖
标题:怎样把c语言程序主程序和子程序分开后连接编译啊?请大家帮个忙,谢谢!
只看楼主 加入收藏
y0608109
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-11-6
结帖率:0
收藏
已结贴  问题点数:20 回复次数:4 
怎样把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'
请高手指点,谢谢!!!!!!


搜索更多相关主题的帖子: 子程序 c语言 主程序 编译 
2010-11-06 11:33
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:6 
要那么复杂吗?如果是VC的话直接添加到工程中去就行了。

★★★★★为人民服务★★★★★
2010-11-06 17:31
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:6 
...

[ 本帖最后由 BlueGuy 于 2010-11-6 20:37 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2010-11-06 20:33
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
...

[ 本帖最后由 BlueGuy 于 2010-11-6 20:37 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2010-11-06 20:34
浩凡儿
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:101
专家分:394
注 册:2010-10-30
收藏
得分:6 
只有两个地方出错一个是getch()
一个是m向a[i]赋值时说不能从float向double转
2010-11-06 22:39
快速回复:怎样把c语言程序主程序和子程序分开后连接编译啊?请大家帮个忙,谢谢 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026923 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved