五:函数
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);
}
}