周次:第 周 课次:第 课 授课时间:年 月 日 一、 章节内容: 第六章 函数与预处理 二、 教学目标: 通过本章的学习,要求能熟练函数的定义和调用方法,掌握函数的嵌套调用和递归调用,理解变量的定义域和存储类别,掌握内部函数和外部函数,并能够在不同情况下灵活选择函数来解决实际问题。掌握编译预处理命令的使用方法。函数和预处理命令是编写模块化程序的重要方法,这将为编写比较复杂的程序设计的学习打下基础。 三、 教学重点: 1) 函数的定义;函数的定义和函数调用; 2) 函数的定义和函数调用; 3) 函数的参数传递。 四、 教学难点: 1) 函数的参数传递; 2) 递归调用; 3) 变量的作用域和存储特性。 五、 教学方法和授课手段 多媒体教室,电子课件,机房实验室。 六、 教学过程: 一) 预备(复习):回顾上次课内容(5分钟) 二) 课前提问(5 分钟) 三) 课程引入:介绍本课程的学习目的、主要学习内容和学习方法。(10分钟) 四) 课程新授:(60分钟) 6.8变量的存储类别 6.8.1 动态存储和静态存储 C语言中的变量,不仅有类型特性,还有存储特性,从变量值存在的时间(即生存期)角度来分,可以分为静态存储方式和动态存储方式。: 1.动态存储方式:是在程序运行期间根据需要进行动态的分配存储空间的方式。 自动内部变量(auto)、寄存器变量(register) 2.静态存储方式:是指在程序运行期间分配固定的存储空间的方式。静态内部变量(static)、外部变量(extern) 6.8.2 动态存储 【例6.10】动态存储举例 【启动Visual C++】|【新建工程】|【新建源程序文件】:选中【C++ Source File】项 输入如下代码: /* 源文件名:Li6_10.c 功能:测试动态存储变量的空间分配情况 */ #include \void test() {
int m=10; m++;
printf(\}
void main() {
printf(\ test();
printf(\ test();
printf(\ test(); }
6.8.3 用static声明的局部变量
【例6.11】静态局部变量例题
【启动Visual C++】|【新建工程】|【新建源程序文件】:选中【C++ Source File】项 输入如下代码:
/* 源文件名:Li6_11.c 功能:测试静态局部变量的空间分配情况 */ #include \void test() {
static int m=10; //定义m为静态局部变量 m++;
printf(\}
void main() {
printf(\ test();
printf(\ test();
printf(\ test(); }
6.8.4 register变量
为了提高效率,C语言允许将局部变量得值放在CPU中的寄存器中,这种变量叫“寄存器变量”,用关键字register作声明。
【例6.12】使用寄存器变量。
【启动Visual C++】|【新建工程】|【新建源程序文件】:选中【C++ Source File】项
2 2
输入如下代码: /* 源文件名:Li6_12.c 功能:测试寄存器存储变量的空间分配情况 */ #include \int factor(int n) { register int i,f=1; for(i=1;i<=n;i++) f=f*i; return f; } void main() { int i; for(i=0;i<=5;i++) printf(\} 6.8.5 文件级外部变量和程序级外部变量 前面介绍过,在函数外部定义的变量称为外部变量。如果一个程序由多个源文件构成,根据某个源文件中定义的外部变量能否被其它源文件中的函数所引用,将外部变量分为两个作用域级别: 1. 文件级外部变量──只允许被本源文件中的函数引用,其定义方式如下: static 数据类型 外部变量表; 2. 程序级外部变量──允许被程序中各源文件内的函数引用,其定义方式如下: extern 数据类型 外部变量表; 同一程序中的其它源文件内的函数如果想引用程序级外部变量时,需要对其进行说明。 有效范围:从定义变量的位置开始到本源文件结束,及有extern说明的其它源文件。 注意: 1)extern不是变量定义,但可扩展外部变量作用域。 2)若外部变量与局部变量同名,则外部变量被屏蔽。 6.9编译预处理 在前面各章中,已多次使用过以“#”号开头的预处理命令。如包含命令#include,宏定义命令#define等。在源程序中这些命令都放在函数之外,而且一般都放在源文件的前面,它们称为编译预处理部分。 所谓编译预处理是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所作的工作。预处理是C语言的一个重要功能,它由预处理程序负责完成。当对一个源文件进行编译时,系统将自动引用预处理程序对源程序中的预处理部分作处理,处理完毕自动进入对源程序的编译。 C语言提供了多种预处理功能,如宏定义、文件包含、条件编译等。合理地使用预处理功3 3