内容正文:
教案首页
课程:C语言程序设计 授课教师: 学年 第 学期
周次
第 周
时间
年 月 日
专业班级:
授课
章节
单元7:函数的使用(二)
授课
方式
理论课□ 实验课□ 实训课□ 教学做一体化课程√
教学
时数
2学时
教学
目的
理解函数递归调用及实现过程,会使用带参数的宏,掌握函数与变量的作用域及存储类型。
教
学
组
织
教学内容
教学过程设计及时间分配
1.函数的递归
2. 带参数的宏
3. 函数的作用域及存储类型
4. 变量的作用域及存储类型
5. 案例与实践操作
1. 复习 讲授 互动 10分
2. 函数的递归 讲授 15分
3.带参数的宏 演示、讲授 10分
4. 函数的作用域与存储类型 演示、操作 15分
5. 变量的作用域与存储类型 演示、讲授25分
6. 随堂练习 案例 10分
7.小结、作业及实验安排 讲授 5分
教学
重点
重点:函数的递归调用
难点:带参数的宏
教学
难点
教学
手段
理论讲授、演示、对比讲解、案例分析
双语
教学
recursion —递归
parameter — 参数
作业及
思考题
作业:单元总结与单元练习
知识拓展:模块化程序设计
参考
资料
1. 谭浩强主编的《C语言程序设计》(清华大学出版社)。
2. 丹尼斯·里奇《C语言程序设计》(第二版)。
3.NCRE考试用教程《C语言程序设计》(高等教育出版社)。
4.网络教学资源:国家精品课网站: http://121.26.225.5/jpkc/cyuyan/index.htm。
本讲
内容
学法
指导
对于函数递归的使用,首先要理解函数的定义,在此基础上理解自身调用自身,使用画图等形式,对递归有深刻一些的理解。
单元7-2 函数的使用(教案)
教学内容及教学过程
说明
步骤一 复习
函数的定义
函数的调用
函数的参数传递
步骤二 讲授
7.3 函数的递归
7.3.1 递归问题的引入
【例7-7】自定义函数sum实现自然数求和: 。
根据以前所学内容,编写程序代码如下:
int sum(int n)
{ return ( 1+n)*n/2;
}
或
int sum(int n)
{ int i,s;
for(i=1;i<=n;i++)
s=s+i;
return s;
}
现在从另一个角度去分析。自然数求和是一个等差数列求和,数列求和过程存在这样一个递归关系:前n项和等于前n-1项的和加上n,所以求和过程可以描述成如下公式:
根据公式可以看出:
(1) 如果n==1,则sum(1)=1,返回结果1;
(2) 如果n>1,则sum(n)=sum(n-1)+n,返回结果sum(n-1)+n。
由此可以对自定义函数sum重新描述如下:
int sum(int n)
{ if(n==1)
return(1);
else
return (sum(n-1)+n);
}
自定义函数sum在函数体中出现了对自身调用的语句return (sum(n-1)+n);,像这样的函数调用就称为函数递归调用。
将本例程序代码进行完整描述,然后分析一下函数递归调用的过程。
#include <stdio.h>
int sum(int ); //函数声明
void main()
{ int n,s=0;
scanf("%d",&n);
s=sum(n); //函数调用
printf("s=%d
",s);
}
int sum(int n) //函数定义
{ if(n==1)
return(1);
else
return (sum(n-1)+n);
}
7.3.2使用函数递归解决问题
使用递归方法解决问题的关键是如何找出递归关系,又如何使递归调用结束,不至于无限期地调用下去,即给出递归调用的终止条件。所以使用递归方法解决问题的第一步就是建立递归关系;第二步就是找出递归调用的终止条件。
【例7-8】用递归方法求fac(n)=n!。
程序实现代码如下:
#include <stdio.h>
int fac(int n) //函数定义
{ if(n==1||n==0)
return 1;
else
return n*fac(n-1);
}
vo