文档详情

《Chap0函数与程序结构》-课件.ppt

发布:2018-11-09约1.02万字共51页下载文档
文本预览下载声明
编译预处理是C语言编译程序的组成部分,它用于解释处理C语言源程序中的各种预处理指令。 文件包含(#include)和宏定义(#define)都是编译预处理指令 在形式上都以“#”开头,不属于C语言中真正的语句 增强了C语言的编程功能,改进C语言程序设计环境,提高编程效率 10.4 编译预处理 C程序的编译处理,目的是把每一条C语句用若干条机器指令来实现,生成目标程序。 由于#define等编译预处理指令不是C语句,不能被编译程序翻译,需要在真正编译之前作一个预处理,解释完成编译预处理指令,从而把预处理指令转换成相应的C程序段,最终成为由纯粹C语句构成的程序,经编译最后得到目标代码。 编译预处理 编译预处理的主要功能: 文件包含(#include) 宏定义(#define) 条件编译 编译预处理功能 ctype.h 字符处理 math.h 与数学处理函数有关的说明与定义 stdio.h 输入输出函数中使用的有关说明和定义 string.h 字符串函数的有关说明和定义 stddef.h 定义某些常用内容 stdlib.h 杂项说明 time.h 支持系统时间函数 常用标准头文件 10.1.4 全局变量与程序文件模块 局部变量 作用范围:函数(复合语句)内部 生命周期:从函数调用开始-函数调用结束 全局变量 作用范围:从定义处到源文件结束 生命周期:从程序执行开始-程序运行结束 静态局部变量 作用范围:局部变量 生命周期:全局变量 外部变量(extern) 在某个程序文件模块中定义了全局变量 该全局变量可以在整个程序的所有文件模块中起作用 在其他模块中如果要使用该全局变量,必须将它声明为外部变量 说明这是一个在其他模块中定义的全局变量 int x; void main() {……… } 文件名 file1.c extern x; /*使用file1.c中的全局变量 x */ f1( ) { ……… } 文件名 file2.c 扩大全局变量的作用域 static int x; void main() {……… } 使全局变量只限于本文件引用,而不能被其他文件引用 文件名 file1.c extern x; /*使用file1.c中的全局变量 x */ int f1( ) { ……… } 文件名 file2.c 无法引用 静态全局变量 10.1.5 寄存器变量和外部变量 寄存器变量 register int 变量表; 外部变量 extern 变量名表; 只起说明作用,不分配存储单元,对应的存储单元在全局变量定义处分配。 10.1.6 函数与程序文件模块 外部函数 函数能够被程序中的其他程序文件模块调用 在其他文件模块中调用该函数前,声明为外部函数 extern 函数类型 函数名(参数表说明); extern int f1(); int main(void) { ……… f1( ); ……… } 文件名 file1.c int f1( ) { ……… } 文件名 file2.c 调用另一模块中的函数 extern int f1(); int main(void) { ……… f1( ); ……… } static int f1( ) { ……… } 内部函数 使函数只能在本程序文件模块中被调用 static 函数类型 函数名(参数表说明); 文件名 file1.c 文件名 file2.c 无法调用 10.2 递归函数 10.2.1 程序解析 10.2.2 递归函数基本概念 10.2.3 递归程序设计 10.2.1 程序解析 例10-3 用递归函数求n!。 #include stdio.h double fact(int n); int main(void) { int n; scanf (%d, n); printf (%f, fact (n) ); return 0; } double fact(int n) /* 函数定义 */ { double result; if (n==1 || n == 0) /* 递归出口 */ result = 1; else result = n * fact(n-1); return result; } 10.2.2 递归函数基本概念 递推法与递归法求阶乘 递推法 n!=1*2*3*....*n for (result = 1, i = 1
显示全部
相似文档