C程序教案(第10章)由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c语言教案第10章”。
【教学课题】
预编译处理
(第10章预编译处理,1、2节)【目的要求】
了解编译预处理的特点和功能,掌握编译预处理中的宏定义,理解文件包含。【教学重点】
宏的定义与使用(无参和有参),理解带参的宏和函数的区别。【教学难点】
宏的定义与使用(无参和有参),理解带参的宏和函数的区别。【教学方法】
任务驱动法,问题引导法 【教学手段】
讲授+多媒体演示+学生动手 【作业布置】
1、定义一个带参数的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参。输出已交换的两个值。
2、分别用函数和带参的宏,从3 个数中找出最大数。
一、提出任务,引入课题 例1:#include main(){ int a„„} 例2:#include #define N 100 main(){ int a[N];„„ }。
一般C程序的开发执行过程: 编辑 → 编译 → 连接 → 执行 含有预处理命令的C程序:
编辑 → 预处理 → 编译 → 连接 → 执行
二、分析任务,讲授新课
C提供的预处理功能主要有以下三种: 宏定义、文件包含、条件编译。
分别用宏定义命令、文件包含命令、条件编译命令来实现。为了与一般C语句相区别,这些命令以符号“ #” 开头。
(一)宏替换(P172)
宏: 代表一个字符串的标识符。
宏名:被定义为“宏”的标识符。
宏代换(展开):在编译预处理时,对程序中所有出现的 “宏名”,用宏定义中的字符串去代换的过程。
不带参数的宏定义
A、一般形式: #define 标识符 替换文本 例如:#define PI 3.14159 main(){ float l,r;printf(“Input a number :”);scanf(“%f”,&r);l=2*PI*r printf(“l=%fn”,l);} 说明:
⑴宏名一般用大写表示,以便与变量名区分。⑵使用宏名使程序易读,易修改。⑶只作简单的置换,不作正确性检查。⑷宏定义不是C语句,不必在行末加分号。⑸宏名的作用域一般从自定义命令到本源文件结束。⑹可以用# undef命令终止宏定义的作用域。⑺宏定义允许嵌套,允许层层置换。
⑻宏名在源程序中用双引号括起来,则TC中预处理不对其作宏代换。
例: printf(“L=%f”, L);中双引号内L不替换。
⑼宏定义与定义的变量不同,宏只作字符替换,不分配内存空间。⑽对“输出格式”进行宏定义,可以减少书写麻烦.举例:
例
1、不带参数的宏的程序(见P173)
2、带参数的宏定义
格式:#define 宏名(参数表)替换文本
例:#define s(a,b)a*b {„„
area =s(3,2);„„}
对带参的宏展开后,为area=3*2;说明:
⑴对带参数的宏展开只是将宏名后括号内的实参字符串代替#define命令行中的形参。⑵宏定义时,在宏名与带参数的括号之间不应加空格,否则将空格以后的字符都作为替代字符串的一部分。
⑶有参宏的展开,只是将实参作为字符串,简单地置换形参字符串,而不作任何语法检查。在定义有参宏时,在所有形参和整个字符串外,均加一对圆括号。
带参宏与函数的区别:
1、函数调用时,先求实参表达式值,后代入。而带参的宏只是进行简单的字符替换。
2、函数调用是在程序运行时处理的,分配临时的内存单元。而宏展开则是在编译时进行的,不分配内存单元,不进行值的传递,也无“返回值”。
3、对函数中的实参和形参都要定义类型,类型应一致。而宏不存在类型问题,宏名和参数无类型,只是一个符号代表,展开时代入指定的字符即可。
例
2、带参数宏的使用实例(P174)
二、“文件包含”处理
“文件包含”处理是指将指定的被包含文件的全部内容插到该控制行的位置处,使其成为源文件的一部分参与编译。因此,被包含的文件应该是源文件。
通常置于源程序文件的首部,故也称为“头文件”。
C编译系统提供的头文件扩展名为“.h”,但设计者可根据实际情况,自行确定包含
文件的后缀、名字及其位置。
一般形式,#include “文件名” 或 #include 二者的区别:
用尖括号时称为标准方式,系统到存放C库头文件所在的目录中寻找要包含的文件。
用双引号时,系统先在用户当前目录中寻找要包含的文件,若找不到,再按标准方式查找。
说明:
编译预处理时,预处理程序将查找指定的被包含文件,并将其复制到#include命令出现的位置。
常用在文件头部的被包含文件,称为“标题文件”或“头部文件”,常以“h”作为后缀。
一条包含命令,只能指定一个被包含文件。如果要包含多个文件,则要用多条包含命令。
文件包含可以嵌套,即被包含文件又包含另一个文件。
三、解决任务,学生实践
C语言中如何使用宏替换,如何使用文件包含。
四、针对难点,重点突破
1、带参数宏定义的替换。
2、带参数的宏和函数的区别。
五、拓展任务,学生实践
1、输入两个整数,求它们相除的余数,用带参的宏来实现,编程序。提示:用一维数组存放所有约数。
六、检查任务,评价学生