第 4 章 函数和递归 第 9 1 页 第 4章 函数和递归 【教学内容相关章节】 4.1数学函数 4.2地址的指针 4.3递归 4.4本章小结 【教学目标】 (1)掌握多参数、单返回值的数学函数的定义和使用方法; (2)学会用 typedef定义结构体; (3)学会用 assert宏帮助调试; (4)理解函数调用时用实参给形参赋值的过程; (5)学会定义局部变量和全局变量; (6)理解调用栈和栈帧,学会用 gdb查看调用栈并选择栈桢; (7)理解地址和指针; (8)理解递归定义和递归函数; (9)理解可执行文件中的正文段、数据段和 BSS段; (10)熟悉堆栈段,了解栈溢出的常见原因。 【教学要求】 掌握带参函数的调用、赋值过程及函数的返回值,理解地址和指针的概念,理解递归定义和递归函数,理解段的概念。 【教学内容提要】 运用前 3章的知识尽管在理论上已经足以写出多数算法程序了,但实际上稍微复杂一点的程序往往由多个函数组成。函数是“过程式程序设计”的产物,但也产生了局部变量、参数传递方式、递归等诸多新的知识点。本章淡化例题,重点在于理解最后的语法。同时,通过请出 gdb这一王牌,从根本上帮助读者理解,看清事物的本质。 【教学重点、难点】 教学重点: (1)掌握多参数、单返回值的数学函数的定义和使用方法; (2)理解函数调用时用实参给形参赋值的过程; (3)理解地址和指针; (4)理解递归定义和递归函数; (5)理解可执行文件中的正文段、数据段和 BSS段;。 教学难点:贪心算法的基本要素。 【课时安排(共 3学时)】 4.1数学函数 4.2地址的指针 4.3递归 4.4本章小结 (0.5学时) 第 4 章 函数和递归 第 9 2 页 4.1 数学函数 4.1.1 简单函数的编写 下面给出一个计算两点欧几里德距离的函数: double dist(double x1, double y1, double x2, double y2) { return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); } 提示 4-1:C语言中的数学函数可以定义成“返回类型 函数名(参数列表){ 函数体 }”,其中函数体的最后一条语句应该是“return 表达式;”。 提示 4-2:函数的参数和返回值最好是“一等公民”int或 double(注意 char是一种特殊的 int)。其他“非一等公民”作为以参数和返回值要复杂一些。 提示 4-3:如果函数在执行的过程中碰到了 return语句,将直接退出这个函数,不去执行后面的语句。相反,如果在执行过程中始终没有 return语句...