c语言宏定义教学设计.docx
- 文档编号:25681710
- 上传时间:2023-06-11
- 格式:DOCX
- 页数:7
- 大小:56.61KB
c语言宏定义教学设计.docx
《c语言宏定义教学设计.docx》由会员分享,可在线阅读,更多相关《c语言宏定义教学设计.docx(7页珍藏版)》请在冰豆网上搜索。
c语言宏定义教学设计
教学计划
课题
宏定义
教学目标
1.让学生了解预处理命令定义及分类
2.让学生掌握宏定义的概念及分类
3.让学生掌握无参宏的展开方法及注意事项
重点难点
1.预处理命令的意义
2.无参宏的展开方法及运用
教学方法
1.任务驱动法
2.讲练法
3.讨论法
教学资源
教材、多媒体课件、板书
教学活动流程设计
一、导入新课
1.复习提问
例1:
#include
intmain()
{printf(”ThisisaCprogram.\n”);
return0;}
上述例题是我们学习c语言来碰到的第一个完整的c程序,请问同学们,这个程序的输出结果是什么?
(请学生起立回答)
答案:
2.导入新课
好,这个程序是最简单的程序,也是最完整的程序,我们看这个程序的第一句#include
(请学生起立回答)
答案:
预处理命令。
是的,这就是预处理命令,那么预处理命令的意义何在?
它为什么需要写在程序开头呢?
让我们带着这些问题,一起进行今天的学习。
二、讲授新课
1.展示课件,呈现教学目标,让学生了解当前所学知识主题,积极参与探索求知。
2.创设情境,提出驱动任务:
任务1:
预处理的定义
提问:
“预处理”的字面意思?
(请学生起立回答)
答:
提前进行处理。
所谓预处理是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所作的工作。
预处理是C语言的一个重要功能,它由预处理程序负责完成。
当对一个源文件进行编译时,系统将自动引用预处理程序对源程序中的预处理部分作处理,处理完毕自动进入对源程序的编译。
对于上述定义,可能有点难以理解,我们可以用做红烧鱼来理解这个过程。
要做红烧鱼,不能直接下锅烹调,而是先需要小工对鱼进行一个预先处理,比如刮鱼鳞、去鱼鳃、腌制等步骤,这样一些提前处理的过程,我们称之为预处理,预处理完成后,才可以由大厨开始正式烹调;在计算机中,预处理的过程不被包含在编译过程中,它发生在正式编译前。
任务2:
预处理的分类
实现
宏定义命令文件包含命令
条件编译命令
C提供的预处理功能:
宏定义
文件包含条件编译
预处理功能分为三类,分别用来实现宏定义命令、文件包含命令、条件编译命令,今天我们来学习第一种:
宏定义。
任务3:
宏定义概念
在c语言源程序中,允许用一个标识符来表示一个字符串,这种规则称之为“宏”。
如:
#definePI3.14159表示用PI这个标识符来表示字符串3.14159,这个语句就被称为宏。
宏定义的目的,通常是用于简化程序,用一个简单的标识符替代一长串字符串、表达式,这样我们之后再用到这个字符串/表达式时,就可以不用再写这么长的字符串/表达式,程序中所有的设置,都是为了使程序进一步优化。
任务4:
宏定义的注意点
(1)标识符被称为“宏名”。
在预处理的时候,对程序中所有出现的宏名,都用宏定义中的字符串代替,这种替换过程,称为“宏展开”或“宏替换”。
提问:
标识符由什么组成?
有什么特点?
(请学生起立回答)
答案:
标识符右字母、数字、下划线组成,且首字符只能、是字母或者下划线。
如定义宏名为a,字符串为”student”,则之后程序中凡是出现”student”的地方,系统都会用a进行替换,可以参考office里的“替换”功能。
(2)宏定义是由源程序中的宏定义命令完成的,宏替换是由预处理程序自动完成的,#define就是一个宏定义命令。
宏替换不在正式编译的过程中,不占用正式编译运行时间。
任务5:
无参宏的一般格式
#define标识符字符串如:
#definePI3.14159说明:
(1)#表示这是一条预处理命令;
(2)#define表示这是宏定义命令;
(3)标识符表示定义的宏名;如上例里的PI
(4)字符串可以是常数、表达式、格式串等。
如上例的3.14159
练习:
1.当输入为3时,以下程序结果是:
#include
");scanf("%d",&y);s=3*M+4*M+5*M;printf("s=%d\n",s);}
解释:
上例程序中首先进行宏定义,定义M来替代表达式(y*y+3*y),在s=3*M+4*M+5*M中作了宏调用。
在预处理时经宏展开后该语句变为:
s=3*(y*y+3*y)+4*(y*y+3*y)+5*(y*y+3*y);
但要注意的是,在宏定义中表达式(y*y+3*y)两边的括号不能少。
否则会发生错误。
如当作以下定义后:
#difineMy*y+3*y
在宏展开时将得到下述语句:
s=3*y*y+3*y+4*y*y+3*y+5*y*y+3*y;
这相当于:
3y2+3y+4y2+3y+5y2+3y;
显然与原题意要求不符。
计算结果当然是错误的。
因此在作宏定义时必须十分注意。
应保证在宏代换之后不发生错误。
2.当输入为3时,以下程序结果是:
#include
");scanf("%d",&y);s=3*M+4*M+5*M;printf("s=%d\n",s);}
解释:
上例程序中首先进行宏定义,定义M来替代表达式y*y+3*y,在s=3*M+4*M+5*M中作了宏调用。
在预处理时经宏展开后该语句变为:
s=3*y*y+3*y+4*y*y+3*y+5*y*y+3*y;
这相当于:
3y2+3y+4y2+3y+5y2+3y;
所以结果为135.
任务6:
无参宏的几点说明
(1)宏名一般习惯用大写字母表示,以便于变量名区分,但也可用小写字母表示;
(2)用宏名代替一个字符串,当需要改变程序中字符串内容时,只需在宏定义中进行改变即可;
(3)宏定义只做简单置换,不做正确性检查,即预处理时不做任何语法检查,不占用内存运行时间;
如:
#definePI3.14A26即使语句发生了错误,但预处理时不会报错,仍会用3.14A26替代所有的PI。
(4)宏定义不是c语句,不必在行末加分号;若加了分号,则会连分号一起置换;如:
#definePI3.14;则宏展开时,会用3.14;替代所有的PI。
(5)#define命令出现在程序中函数的外面,宏名的有效范围为定义命令之后到本源文件结束。
通常,#define命令写在文件开头,函数之前,作为文件的一部分,在此文件范围内有效。
可对比之前学的全局变量的有效范围。
三、巩固练习
1.以下关于宏的描述正确的是:
(C)
A.宏名必须用大写字母表示B.宏替换时要进行语法检查C.宏替换不占用运行时间D.宏定义中不允许引用已有的宏名
2.c语言编译系统对宏定义是:
(D)
A.在程序运行时进行代换处理的B.在程序连接时进行处理的C.和源程序中其它c语句同时进行编译的D.在对源程序中其他成分正式编译之前进行处理的
四、归纳小结
1.宏定义一般形式:
#define标识符字符串
标识符被称为“宏名”,一般用大写字母表示;字符串可以是常数、表达式、格式串等,编译时将宏名替换成字符串,此过程称为“宏替换”,替换过程不做正确性检查;
2.宏定义不是c语句,宏定义不必在行末加分号;3.#define命令出现在程序中函数的外面,宏名的有效范围为定义命令之后到本源文件结束。
五、课堂作业
《c程序试题汇编》P141,T8.2
P142,T8.10,8.11P144,T8.19
P145,T8.26
板书设计
一、预处理的定义
二、预处理的分类
宏定义
文件包含条件编译
三、宏定义概念
四、宏定义的注意点
五、无参宏的一般格式
#define标识符字符串
六、无参宏的几点说明
教学后记
本节主要讲解了预处理命令的概念及宏定义的概念和用法,重点在于让学生理解预处理命令处理的流程及无参宏展开的方法,通过两个例题,让学生在练习中领会宏展开的方法,比单纯地讲概念更能加深学生的印象,学生通过预习,能带着疑问听课,比不加预习直接听课更有效果,做题也顺畅许多,课后需多布置习题,能让学生加以巩固。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 定义 教学 设计