C语言中多个文件的编译方法

今天刚刚搞明白这个问题,贴出来希望能给一些和我一样不是很懂的人一些参考,可惜的是我用的方法还不是特别方便, 以后有了更好的方法会继续和大家分享的。

这里我以一个经典的汉诺塔问题为例来进行说明。

【问题描述】有三个塔分别标为A、B、C。开始时,塔A上套了n个盘子。这里假定为3个。这些盘子的标号从1到3。并且在不失一般化的前提下,我们可以假设每个盘子的直径和它的标号相同。也就是说,盘子1的直径为1(采用某种长度单位),盘子2的直径为2,盘子3的直径为3。这3个盘子一开始按照1、2、3的顺序套在塔A上。现在要求把所有的盘子都移到塔C上。一次只能移动一个盘子,塔A、B和C都可以作为盘子移动的过渡位置。在每次移动之后,每个塔上的盘子必须按顺序出现。也就是说,不允许出现大盘子在小盘子上面的情况。

我们用递归来解决这一问题,下面是程序源码。

文件hanoi.h的源码:

#include<assert.h>
#include<stdio.h>
#include<stdlib.h>
extern int cnt;     /* count of the number of moves */
int get_n_from_user(void);
void move(int n,char a,char b,char c);

文件main_p.c的源码如下:

#include "hanoi.h"
int cnt=0;        /* count of the number of moves */
int main(void)
{
 int n;            /* number of disks */
 n=get_n_from_user();
 assert(n>0);
 move(n,'A','B','C');     /*  recursive fct */
 getch();
 return 0;
}

文件get.c的源码如下:

include "hanoi.h"
int get_n_from_user(void)
{
 int n;
 printf("%s",
  "---/n"
  "TOWERS OF HANOI:/n"
  "/n"
  "There are three towers:A,B and C./n"
  "/n"
  "The disks on tower A must be moved to tower C.Only one/n"
  "disk can be moved at a time,and the order on each tower/n"
  "must be preserved at each step. Any of the towers A,B,/n"
  "or C can be used for intermediate placement of a disk./n"
  "/n"
  "The problem starts with n disks on Tower A./n"
  "/n"
  "Input n: ");
 if(scanf("%d",&n)!=1||n<1)
 {
  printf("/nERROR :Positive integer not found - bye!/n/n");
  exit(1);
 }
 printf("/n");
 return n;
}

文件move.c的源码如下:

#include "hanoi.h"
void move(int n,char a,char b,char c)
{
 if(n==1)
 {
  ++cnt;
  printf("%5d: %s%d%s%c%s%c./n",cnt,"Move disk ",1," from tower ",a," to tower ",c);
 }
 else
 {
  move(n-1,a,c,b);
  ++cnt;
  printf("%5d: %s%d%s%c%s%c./n",cnt,"Move disk ",1," from tower ",a," to tower ",c);
  move(n-1,b,a,c);
 }
}

 

这时,我们要用以上几个源码文件生成一个exe文件,可以在C编译器的当前目录下新建一个工程文件(后缀名为.prj),这里我们新建hanoi.prj,在此文件中将所要编译的所有文件都包含进来,即写入以下代码:

hanoi.h
main1.c
get.c
move.c

然后打开C开发环境,载入hanoi.prj文件,打开project菜单,将project name 的值设为hanoi.prj,然后按F9编译即可生成hanoi.exe文件。

这里需要注意的是所有的源文件必须和编译器以及工程文件在同一目录下,我认为应该有办法使其在不同目录下时也能实现的,但是本人还没找到,以后找到了再告诉大家吧!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值