欢迎来到天天文库
浏览记录
ID:50351044
大小:139.50 KB
页数:22页
时间:2020-03-08
《C语言程序设计 教学课件 作者 徐秋红 第5章函数的设计与应用.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第5章函数的设计与应用函数的设计与应用本章将介绍有关函数的几个内容:C语言程序设计中的函数的概念函数的定义和函数的调用函数间的信息传递机制内部函数和外部函数编译预处理的作用和使用方法函数的概念函数是完成某些特定功能的程序块。C语言规定一个C程序应该由一个称之为main()的主函数和若干个其他函数组成,程序由主函数开始执行,通常在调用其他函数后再回到主函数,并在主函数中结束整个程序的运行。【例1】有一个模块设计方案,它的函数调用关系如下主函数main()程序说明函数welcome()计算函数calc
2、()打印标志符函数pline()输入函数scan()输出函数printf()平方根函数sqrt()输出函数printf()打印标志符函数pline()输出函数printf()函数类型C语言中,函数分为以下两种:标准库函数用户自定义函数无参函数有参函数函数的定义C语言中,函数的定义形式如下:类型说明符函数名(类型名形参1,类型名形参2,……){声明部分执行的语句部分}【例2】编写一个函数,实现在三个数中挑选最大值。intsele_max(intx,inty,intz){intmax;max=x;if(
3、max4、1参数名1,参数类型2参数名2,……);函数的调用函数的调用函数调用的一般形式是:函数名(实参表)函数名是被调用的函数的名称。函数的嵌套调用和递归调用函数嵌套调用F1函数调用F2函数F2函数调用F3函数F3函数例:f1(intu)f2(inty)f3(intb){…{…{s=f2(e);w=f3(q);………}}}函数的嵌套调用和递归调用函数递归调用F函数调用F函数例:f(inta){…y=f(x);…}F1函数调用F2函数F2函数调用F1函数例:f1(inta)f2(intk){…{…y=f2(x5、);u=f1(s);……}}函数递归调用递归算法在可计算性理论中占有重要地位,它是算法设计的有力工具,对于拓展编程思路非常有用。就递归算法而言并不涉及高深数学知识,只不过初学者要建立起递归概念不十分容易。先从一个最简单的例子导入。用递归算法求n!定义:函数fact(n)=n!fact(n-1)=(n-1)!则有fact(n)=n*fact(n-1)已知fact(1)=1,则fact(2)=2*fact(1)=2*1fact(3)=3*fact(2)=3*(2*fact(1))=3*2*1函数递归调用6、设计一个求n!的函数过程fact(n),函数代码如下:longfact(intn){if(n==1)return(1);elsereturn(n*fact(n-1));}函数间的参数传递在程序的模块化设计中,一个函数调用另一个函数时一般要向被调函数传送若干参数,被调函数执行完毕后返回主调函数时,一般也会返回一个函数值,这就是函数间的参数传递。地址结合方式(传址方式)数值结合方式(传值方式)函数间的参数传递全局变量和局部变量动态存储变量与静态存储变量内部函数与外部函数C语言中规定,函数不能嵌套定义,即7、不能在一个函数模块内部又包含另一个函数模块,所以,程序中所有的函数定义均是在其他函数之外的,也就是说函数实质上都是全局的。但是,可以根据需要,把函数分为外部函数和内部函数。内部函数与外部函数外部函数同一个源文件内,如果被调函数放在了主调函数的后面,则要在主调函数中加入声明被调函数的语句。如果一个C程序是由多个源文件构成,根据函数是全局的这一概念,则每个源文件内的函数都能被其他源文件的函数所调用,但是,需要在主调函数中对不在本源文件内部的被调函数进行外部声明,声明被调函数是一个外部函数。声明格式如下:8、extern函数类型说明符函数名(参数表说明);内部函数与外部函数内部函数为了把函数的作用范围定义在本源文件模块内,不许其他源文件的函数调用,即使其他源文件中有同名函数定义,也要与其区别,C语言规定建立内部函数,也称其为静态函数。内部函数的定义格式是:static函数类型说明符函数名(类型名形参1,类型名形参2,……){函数执行的语句体}如何运行一个由多个源文件组成的程序如果一个C程序是由多个源文件组成的,那么对这些源文件的编译连接过程可以通过以下两种方式实现:利用T
4、1参数名1,参数类型2参数名2,……);函数的调用函数的调用函数调用的一般形式是:函数名(实参表)函数名是被调用的函数的名称。函数的嵌套调用和递归调用函数嵌套调用F1函数调用F2函数F2函数调用F3函数F3函数例:f1(intu)f2(inty)f3(intb){…{…{s=f2(e);w=f3(q);………}}}函数的嵌套调用和递归调用函数递归调用F函数调用F函数例:f(inta){…y=f(x);…}F1函数调用F2函数F2函数调用F1函数例:f1(inta)f2(intk){…{…y=f2(x
5、);u=f1(s);……}}函数递归调用递归算法在可计算性理论中占有重要地位,它是算法设计的有力工具,对于拓展编程思路非常有用。就递归算法而言并不涉及高深数学知识,只不过初学者要建立起递归概念不十分容易。先从一个最简单的例子导入。用递归算法求n!定义:函数fact(n)=n!fact(n-1)=(n-1)!则有fact(n)=n*fact(n-1)已知fact(1)=1,则fact(2)=2*fact(1)=2*1fact(3)=3*fact(2)=3*(2*fact(1))=3*2*1函数递归调用
6、设计一个求n!的函数过程fact(n),函数代码如下:longfact(intn){if(n==1)return(1);elsereturn(n*fact(n-1));}函数间的参数传递在程序的模块化设计中,一个函数调用另一个函数时一般要向被调函数传送若干参数,被调函数执行完毕后返回主调函数时,一般也会返回一个函数值,这就是函数间的参数传递。地址结合方式(传址方式)数值结合方式(传值方式)函数间的参数传递全局变量和局部变量动态存储变量与静态存储变量内部函数与外部函数C语言中规定,函数不能嵌套定义,即
7、不能在一个函数模块内部又包含另一个函数模块,所以,程序中所有的函数定义均是在其他函数之外的,也就是说函数实质上都是全局的。但是,可以根据需要,把函数分为外部函数和内部函数。内部函数与外部函数外部函数同一个源文件内,如果被调函数放在了主调函数的后面,则要在主调函数中加入声明被调函数的语句。如果一个C程序是由多个源文件构成,根据函数是全局的这一概念,则每个源文件内的函数都能被其他源文件的函数所调用,但是,需要在主调函数中对不在本源文件内部的被调函数进行外部声明,声明被调函数是一个外部函数。声明格式如下:
8、extern函数类型说明符函数名(参数表说明);内部函数与外部函数内部函数为了把函数的作用范围定义在本源文件模块内,不许其他源文件的函数调用,即使其他源文件中有同名函数定义,也要与其区别,C语言规定建立内部函数,也称其为静态函数。内部函数的定义格式是:static函数类型说明符函数名(类型名形参1,类型名形参2,……){函数执行的语句体}如何运行一个由多个源文件组成的程序如果一个C程序是由多个源文件组成的,那么对这些源文件的编译连接过程可以通过以下两种方式实现:利用T
此文档下载收益归作者所有