初识C语言五:函数,宏,递归

五:函数

C程序由函数组成,所有的C程序都有且仅有一个main函数,并且main函数是每段代码的入口,程序从main函数出开始运作,当main函数结束时,程序也就结束了。

函数是指完成一个特定工作的独立程序模块。¨库函数:由C语言系统提供定义 ,函数类型通常指函数返回值的类型,如int main(),最后结尾一定为整数,double main(), 最后结尾为实型,也可写void main ,指的是没有返回值。如scanf()、printf()等函数    调用标准库函数时,在程序的最前面用#include命令包含相应的头文件。如#include <math.h>

#include <filename.h>     用于系统头文件

#include   "filename.h"    用于用户头文件

¨自定义函数:需要用户自己定义程序中一旦调用了某个函数,该函数就会完成特定的计算,然后返回到调用它的地方。函数经过运算,得到一个明确的运算结果,并需要回送该结果。






宏定义:
#define 宏名标识符  宏定义字符串

编译时,把程序中所有与宏名相同的字符串,用宏定义字符串替代

#define PI 3.14

#define arr_size  4

说明:

¨宏名一般用大写字母,以与变量名区别

¨宏定义不是C语句,后面不得跟分号

¨宏定义可以嵌套使用

  #define PI 3.14

  #define S 2*PI*PI


宏定义可以写在程序中任何位置,它的作用范围从定义书写处到文件尾。

可以通过“#undef”强制指定宏的结束范围


编译预处理是C语言编译程序的组成部分,它用于解释处理C语言源程序中的各种预处理指令。

文件包含(#include)和宏定义(#define)都是编译预处理指令

¨在形式上都以“#”开头,不属于C语言中真正的语句

¨增强了C语言的编程功能,改进C语言程序设计环境,提高编程效率


由于#define等编译预处理指令不是C语句,不能被编译程序翻译,需要在真正编译之前作一个预处理,解释完成编译预处理指令,从而把预处理指令转换成相应的C程序段,最终成为由纯粹C语句构成的程序,经编译最后得到目标代码。



递归:

以汉诺塔问题为例

递归方法的两个要点

(1)递归出口:一个盘子的解决方法;

(2)递归式子:如何把搬动64个盘子的问题简化成搬动63个盘子的问题。

把汉诺塔的递归解法归纳成三个步骤:

n-1个盘子从座A搬到座C

第n号盘子从座A搬到座B

n-1个盘子从座C搬到座B

算法:hanio(n个盘,A→B,C为过渡)   

{ if (n == 1)

       直接把盘子A→B

   else{

        hanio(n-1个盘,A→C,B为过渡)

      把第n号盘 A→B

       hanio(n-1个盘,C→B,A为过渡)

    }

}


实现:void hanio(int n,char a,char b,char c){

if(n==1){

printf("%c->%c\n",a,b);

}

else {

hanio(n-1,a,c,b);

printf("%c->%c\n",a,b);

hanio(n-1,c,b,a);

}

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容