C语言程序设计案例教程 教学课件 作者 杨旭 第5章.ppt

C语言程序设计案例教程 教学课件 作者 杨旭 第5章.ppt

ID:50321014

大小:359.00 KB

页数:19页

时间:2020-03-08

C语言程序设计案例教程 教学课件 作者 杨旭 第5章.ppt_第1页
C语言程序设计案例教程 教学课件 作者 杨旭 第5章.ppt_第2页
C语言程序设计案例教程 教学课件 作者 杨旭 第5章.ppt_第3页
C语言程序设计案例教程 教学课件 作者 杨旭 第5章.ppt_第4页
C语言程序设计案例教程 教学课件 作者 杨旭 第5章.ppt_第5页
资源描述:

《C语言程序设计案例教程 教学课件 作者 杨旭 第5章.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第5章函数本章要点5.1函数的定义与调用5.2函数参数的传递5.3函数的嵌套与递归5.4变量的作用域5.5main()函数5.6标准函数5.7程序实例习题55.1.1函数的定义1.函数定义在使用一个函数前,需要先对其进行定义。函数定义通常由两部分组成:函数首部与函数体。函数的一般定义如下:类型函数名(形参列表)/*函数首部*/{变量说明/*函数体*/语句}函数首部的类型指函数返回值类型,函数名为有效的标识符,形参列表指主调用函数传入函数的参数格式,如果有多个不同的参数,则每个参数都需要说明其类型。5.1函

2、数的定义与调用5.1.2函数的说明1.标准库函数的说明如被调用函数为C语言系统提供的标准库函数,可在程序的开头部分用#include进行文件包含,我们在前面见过的printf()、sqrt()等函数,就属于这种形式。printf()函数包含于stdio.h文件,sqrt()函数包含于math.h文件,则在使用这两个函数之前,应在程序开头部分用下面的语句进行包含。#include"stdio.h"#include"math.h"2.自定义函数的说明如果是用户自定义函数,如函数与主调函数在同一程序文件中,在调

3、用前用如下语句进行说明:类型函数名(实参列表);函数声明有点像函数定义的首部,但函数定义时,函数类型、函数名、形参表及函数体是一个整体,而函数说明仅是对被调用函数的说明,其作用是告知系统被调用函数的类型及名称(参数名称在说明时可省略)。函数说明按其位置不同,作用范围也不同。5.1函数的定义与调用(1)在所有函数外部进行说明在所有函数外部说明的函数,说明语句之后的所有函数中都可调用。通常把函数说明语句放在程序文件的头部,以方便其后的程序对其进行调用。(2)在函数内部进行说明在某一函数内说明的函数,仅可在说明

4、它的函数内部被调用。5.1.3函数的调用函数在定义和说明之后,就可以调用了。调用函数的方法有如下几种。1.单行语句调用单行语句调用是指函数作为单一的一行语句进行调用。2.在表达式中调用函数可以作为表达式的一部分使用。5.1函数的定义与调用5.2.1赋值调用赋值调用时,函数将实参的值复制一份,传递给形参,从而实现参数的传递,在程序运行过程中,形参的变化不会影响实参。赋值调用的用法如下。intmax(intm,intn);main(){inta,b;…kmax=max(a,b);/*赋值调用*/…}需要注意的

5、是,形参只在定义它的函数中存在,当从函数返回时,将释放形参所占的存储空间。5.2函数参数的传递5.2.2传址调用传址调用时,函数将把实参的地址传递给形参,通过对地址的内容进行访问,可以在被调函数中对该地址内容进行调用和修改。传址调用的用法如下。voidswap(int*m,int*n);main(){inta,b;…swap(&a,&b);…}能进行传址调用的函数,其参数一般均为指针形式,程序段中函数swap((int*m,int*n)参数前的“*”说明该项参数是一个int型指针,实参传递过来的值应该是一

6、个指向int型数据的内存地址。而在调用语句“swap(&a,&b)”中,符号“&”表示传递的是变量的内存地址。由于实参和形参都是指向同一存储空间,因此这种改变将引起实参的内容改变。5.2函数参数的传递5.3.1函数嵌套在函数调用中,允许在函数中调用另一个已声明的函数。这种在一个函数中调用另一个函数的用法称为函数的嵌套。5.3.2函数的递归调用在C语言的函数调用中,有一种特殊的用法:函数可以间接或直接地调用函数自身,这种调用称为函数的递归调用。1.递归调用(a)直接递归调用(b)间接递归调用图5.7递归调用

7、如果在函数的函数体内,又定义了语句来调用函数自身,这种调用称为直接递归调用。如果函数a()中有语句调用函数b(),而函数b()中又有语句调用了函数a(),这种调用称为函数的间接递归调用,如图5.7所示。从图中简单来看,好像递归调用是一种不休止的循环调用,在如图5.7(b)所示的间接递归调用中:函数a()在运行中将调用函数b(),函数b()在运行中又调用函数a()…这种理解当然是错误的,为了防止递归调用出现无休止的循环主调用,必须在函数内部有终止调用的语句。通常在函数内部加上一个条件判断语句,在满足条件时停

8、止递归调用,然后逐层返回。5.3函数的嵌套与递归5.3函数的嵌套与递归(a)直接递归调用(b)间接递归调用图5.7递归调用(a)直接递归调用(b)间接递归调用2.递归的条件从前面的实例分析中可以看到,一个有意义的递归算法应该满足以下条件。(1)可以将要解决的问题分解为一个新的问题,而这个新问题是原问题的一个子问题,即新问题的解法仍与原问题相同,只是原问题的处理对象有规律地变化。(2)这种转化过程可以使问题得到解决。(3)必须有

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。