内容正文:
千锋教育
《C语言程序设计》
教学设计
课程名称: C语言程序设计教程
授课年级:
授课学期:
教师姓名:
2017年09月01日
课程名称
第9章 函数与指针
计划学时
6学时
内容分析
本章主要介绍函数的运行机理、函数的调用、函数的求参顺序、函数的嵌套调用、函数的递归调用、指针作为函数参数、数组作为函数参数、指针数组作为函数参数、内部函数、外部函数、可变参数、全局变量、外部变量、静态变量
教学目标
与
教学要求
要求学生理解函数的运行机理、指针作为函数参数,掌握函数的嵌套调用与递归调用、内部函数与外部函数、静态变量与全局变量
教学重点
函数的调用、函数的求参顺序、函数的嵌套调用、函数的递归调用、指针作为函数参数、数组作为函数参数、指针数组作为函数参数、内部函数与外部函数、可变参数、全局变量与外部变量、静态变量
教学难点
函数的运行机理、函数的递归调用、数组作为函数参数、指针数组作为函数参数
教学方式
课堂讲解及ppt演示
教
学
过
程
第一课时
(函数的运行机理、函数的调用、函数的求参顺序、函数的嵌套调用)
函数的运行机理
一个C语言的源程序经过编译以后形成与源程序主名相同但后缀为.exe的可执行文件,并且放在外存储器中。当该.exe可执行程序被运行时,首先从外存将程序代码加载到内存的代码区中,然后从main函数的起始处开始执行。在程序执行过程中,如果遇到对其他函数的调用,则暂停当前函数的执行,保存下一条指令的地址(即返回地址,作为从子函数返回后继续执行的入口点),并保存现场(主要是一些寄存器的内容),然后转到子函数的入口地址,执行子函数。当遇到return语句或子函数结束时,则恢复之前保存的现场,并从先前保存的返回地址开始继续执行。
函数的调用
按函数在程序中出现的位置,可以将函数调用分为3种方式,具体如下:
①函数语句调用方式是指把函数调用作为一条语句,它不要求函数带回返回值,只要求函数完成一定的操作。
②函数表达式调用方式是指函数出现在一个表达式中,例如“a = 3 * add(1, 2);”,这时要求函数返回一个确定的值用来参于表达式的运算。
③函数参数调用方式是指函数调用作为函数的实参。例如“printf(“%d
”, add(1, 2));”,其中add(1, 2)是一次函数调用,它的值作为printf函数的实参。
函数的求参顺序
在函数调用中应当注意函数求参顺序的问题。所谓求参顺序是指对实参表中各个变量是自左向右求值还是自右向左求值。大部分编译器按照自右向左的顺序来求值,只有极少数的编译器采取自左向右的顺序求值。
函数的嵌套调用
C语言允许在函数定义中出现函数调用,从而形成函数的嵌套调用。
第二课时
(函数的递归调用)
函数的递归调用
在调用函数时,函数直接或间接地调用函数自身,称为函数的递归调用。递归是在执行某一处理过程时,该过程的某一步要用到它自身的前一步的结果。递归调用中,执行递归函数将反复调用自身,每调用一次就执行新的一层。
· 直接调用自身
函数直接调用函数自身。
· 间接调用自身
函数调用其他函数,而其他函数又调用该函数自身。
· 终止递归调用
通过前两小节的学习,发现直接调用自身和间接调用自身都会导致函数无休止地调用,每次调用函数,都需要压栈操作,最终会导致栈空间耗尽,程序崩溃。为了使递归调用函数能够终止,应该有终止递归调用的方法。常在满足某种条件后不再作递归调用,然后逐层返回。
· 递归调用的用途
「实例说明」
用递归调用实现求n!。
「实例分析」
用递归法计算n!,可用下述公式表示:
用递归函数可将n!表示为:
「实现代码」
第三课时
(指针作为函数参数、数组作为函数参数、指针数组作为函数参数、内部函数 )
指针作为函数参数
函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针类型,它的作用是将一个地址传递到被调用函数中。C语言中函数传递参数主要分为两种:按值传递和按址传递。本节主要介绍这两种传递参数的区别。
· 按值传递
按值传递指函数形参与实参均为普通变量,函数调用时将实参的值复制一份给形参,在被调函数中,对形参的任何操作都不会影响实参的值。
· 按址传递
按址传递指函数形参定义为指针变量,实参也是指针或内存数据的地址,函数调用时将实参指针值传递给形参指针变量。在被调函数中,通过形参指针变量指向的数据进行函数的处理,此时,因为形参和实参指向共同的存储空间,因此对形参指向变量的任何修改,就是对实参指向变量的修改。
· 实现系统库函数strupr
系统库函数strupr可以将字符串中所有小写字母替换成相应的大