内容正文:
《C语言学习与应用》教学课件
任务说明
C语言源程序是由函数构成的,而函数又是由语句组成的。因此说语句是完成程序功能的最小单位,而函数则是程序的基本结构单位,即模块,每个模块都可以实现一个特定的功能,因此模块的划分应满足“低耦合、高内聚”。
C语言作为一种结构化的程序设计语言,在模块的划分上主要依据是功能。功能独立的函数,或是文件(已封装的功能模块),旨在操作分配占用内存中的数据(常量及变量),进而组成整个程序功能模块。这就是模块化程序设计理念。
对于我们初学编程而言,虽然我们不能迅速实现规模非常大的程序,但是我们可以把程序按照功能划分成模块。在实现代码阶段,这就是一个个的功能模块,我们就可以一个个的编写函数实现其功能。同学们:只要有方法,编程也不是件困难的事!本学习任务将要学习的是深层次理解函数在程序设计思想中扩展的知识,拓展程序设计思路,在编写程序过程中更加灵活地使用函数。
学习函数的拓展知识:带参数的main函数、函数指针、函数的递归调用以及带参数的宏和变量的存储类型和作用域等知识。
学习任务10 递归函数/宏/变量作用域
微课
任务说明
学习任务10 递归函数/宏/变量作用域
知识要求
理解传给main函数的参数。
理解函数指针的知识。
掌握函数的递归调用。
掌握宏的定义和使用方法。
掌握变量的存储类型和作用域知识。
学习任务10 递归函数/宏/变量作用域
‹#›
能够读懂含有递归调用的程序。
能够编写递归函数的程序。
能够运用带参数的宏编写程序。
能够依据变量的存储类型定义变量。
能够调试和排查含有相关内容的程序。
能力要求
学习任务10 递归函数/宏/变量作用域
‹#›
函数的拓展知识
01
1.函数的递归调用
(1)函数的嵌套调用
C语言的函数定义是互相平行且独立,也就是说,在定义函数,一个函数内不能再定义另一个函数,也就是不能嵌套定义函数,但是可以嵌套调用函数。嵌套调用函数就是在调用的过程中,又调用另一个函数。
(2)函数递归调用的定义
函数的递归调用就是在函数嵌套调用中直接或间接的调用自己,参见应用举例10-1中fac函数的定义。
(3)用递归方法解决的问题应具备三个条件
可以把要解决的问题转化为一个新问题,而新问题的解决与原来的解法相同,只是所处理的问题有规律的递增或递减;可以应用这个转化过程使问题得到解决;有一个明确的结束递归的判断条件。
学习任务10 递归函数/宏/变量作用域
‹#›
应用举例10-1 编写计算10!的函数
分析:如计算5!,可以通过计算5*4!求得,而计算4!仍可以采用此法,如此递归下去,直到我们已知的1!=1,再依次递推回5的阶乘值。
程序代码:
#include "stdio.h"
int fac(int n)
{int t;
if(n==0||n==1)
t=1;
else
t=n*fac(n-1); //对自身函数的调用,即递归调用。
return t;
}
void main( )
{
printf("10!=%d
",fac(10));
getchar( );
}
请思考:函数的递归调用挺简单,是不是就不用循环了?
学习任务10 递归函数/宏/变量作用域
微课
应用举例10-1
学习任务10 递归函数/宏/变量作用域
问题10-1 用递归函数编写一个程序:
计算1-100之和的程序,请将代码补充完整。
#include "stdio.h"
int fun(int n)
{
........................................
........................................
........................................
........................................
}
void main( )
{ printf("1-100之和=%d
",fun(100));
}
学习任务10 递归函数/宏/变量作用域
问题10-2 求以下程序的输出值。
#include "stdio.h"
int fun(int n)
{ if(n==1||n==2)
return 1;
else
return fun(n-1)+fun(n-2);
}
void main( )
{printf("%d",fun(6));
}