第11章C51的函数幻灯片课件

上传人:yulij****0329 文档编号:138599342 上传时间:2020-07-16 格式:PPT 页数:21 大小:376.50KB
返回 下载 相关 举报
第11章C51的函数幻灯片课件_第1页
第1页 / 共21页
第11章C51的函数幻灯片课件_第2页
第2页 / 共21页
第11章C51的函数幻灯片课件_第3页
第3页 / 共21页
第11章C51的函数幻灯片课件_第4页
第4页 / 共21页
第11章C51的函数幻灯片课件_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《第11章C51的函数幻灯片课件》由会员分享,可在线阅读,更多相关《第11章C51的函数幻灯片课件(21页珍藏版)》请在金锄头文库上搜索。

1、第11章 C51的函数,C51语言中也引入了函数的概念。C51程序中的函数数目是不受限制的,但是,一个典型的单片机程序都必须包含且只能包含一个主函数,即main函数,它是整个程序的入口,整个程序从这个主函数开始执行。 C51语言允许用户使用一些编译环境自带的库函数,合理使用库函数可以大大简化程序设计过程。同时,为了有利于程序的模块化,促进程序资源的共享。C51也支持用户使用自定义函数。本章详细介绍了函数的概念、调用、作用域等,并对main函数和C51常用的库函数进行了详细的讲解。,11.1 函数的概念和分类,函数是能够实现特定功能的代码段。一个C51程序通常由一个主函数和若干个函数构成。其中,

2、主函数即main()函数。C51程序的执行总是从main函数开始,完成对其他函数的调用后再返回到主函数,最后由main函数结束整个程序。一个C51源程序必须有,且只能有一个主函数main()。 除了主函数外,C51还提供了极为丰富的库函数,而且还允许用户自定义函数。在C51程序中,由主函数调用其他函数,其他函数之间也可以相互调用。同一个函数可以被一个或多个函数调用任意次。 在使用C51函数时,需要注意如下几点: C51的源程序的函数数目是不限的。 在一个函数的函数体内,不能再定义另一个函数,即不能嵌套定义。 函数之间允许相互调用,也允许“嵌套调用”。 函数还可以自己调用自己,称为“递归调用”。

3、 main()函数是主函数,它可以调用其他函数,而不允许被其他函数调用。 在C51语言中,可从不同的角度对函数分类,下面分别进行介绍。,11.1.1 从函数定义角度,从函数定义的角度看,函数可分为库函数和用户自定义函数两种。分别介绍如下: 对于库函数,其是由C51系统提供,用户无须定义,只需在主程序前包含有该函数原型的头文件即可在程序中直接调用。这些库函数又可从功能角度分为如下几类。 字符类型分类函数:用于对字符按ASCII码分类:字母,数字,控制字符,分隔符,大小写字母等。 转换函数:用于字符或字符串的转换,在字符量和各类数字量(整型、实型等)之间进行转换,在大、小写之间进行转换。 输入输出

4、函数:用于完成输入输出功能,如printf、scanf等。 字符串函数:用于字符串操作和处理。 数学函数:用于数学函数计算。 其他函数:用于其他各种功能。,11.1.2 从有无返回值角度,从有无返回值角度来划分,又可把C51函数分为有返回值函数和无返回值函数两种。分别介绍如下。 有返回值函数:此类函数被调用执行完后,将向调用者返回一个执行结果,称为“函数返回值”。库函数中包含多个带有返回值的函数。另外,由用户定义的这种要返回函数值的函数,必须在函数定义和函数说明中明确返回值的类型。 无返回值函数:相当于其他高级语言中的过程。此类函数用于完成某项特定的任务,执行完成后不向调用者返回函数值。库函数

5、中包含多个不带有返回值的函数。而对于用户自定义的无返回值函数,可指定它的返回为“无值型”,其类型说明符为“void”。,11.2 函数的定义,在C51语言中,函数定义的一般一般形式如下: 类型说明符 函数名(形式参数列表) 形参类型说明 语句 return语句 其中: q “类型说明符”声明了函数返回值的类型,该返回值可以是任何有效类型。如果没有类型说明符出现,函数返回一个整型值。如果函数没有返回值,则可以采用void说明符。函数类型的说明必须处于对它的首次调用之前,这样C51程序编译时才能为返回非整型值的函数生成正确代码。 q “形式参数列表”是一个用逗号分隔的参数变量表。当函数被调用时,这

6、些变量接收调用参数的值。如果函数是无参函数,这时函数表是空的,但括号仍然是必须要有的。 q “形参类型说明”声明了函数内部参数的类型。其数据类型可以为C51语言支持的数据类型。 “return语句”用于返回函数执行的结果,如果没有返回值,则可以省略该语句。,11.3 函数的参数,函数的参数用于主调函数与被调函数间进行的数据交换。在C51语言中,实参和形参都可以采用多种数据类型。函数的参数是个很重要的内容。,11.3.1 形参和实参,在函数调用过程中,函数的参数可以分为形参和实参两种。发生函数调用时,主调函数把实参的值传送给被调函数的形参,从而实现主调函数向被调函数的数据传送。函数的形参和实参在

7、使用时需要注意如下几点: 实参和形参在数量、类型、顺序上应保持严格一致,否则会因类型不匹配而导致错误。 形参只有在函数内部有效。因为形参变量只有在被调用时才分配内存单元,在调用结束后,将立即释放内存单元。因此,函数调用结束并返回主调函数后,则不能再使用该形参变量。 实参可以是常量、变量、表达式等,无论实参是何种类型的量,在进行函数调用时,它们都必须先赋予确定的值,以便把这些值传送给形参。实参出现在主调函数中,进入被调函数后,实参变量将不再能使用。 在函数调用时,数据传送是单向的从实参传送给形参,而不能把形参的值反向地传送给实参。因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。,1

8、1.3.2 数组作为函数参数,数组可以作为函数的参数使用,进行数据传送。在C51语言中,数组用作函数参数有两种形式:一种是把数组元素(下标变量)作为实参使用;另一种是把数组名作为函数的形参和实参使用。下面分别进行讲解。 1数组元素作函数实参:数组元素作函数实参是指在发生函数调用时,把作为实参的数组元素的值传送给形参,实现单向的值传送。其中数组元素就是下标变量,与普通变量是完全相同的。这里举例讲解数组元素作函数实参在程序设计中的应用。这里自定义一个函数fun(),用于判别一个整数数组中各元素的值,若是奇数则输出该值,否则不输出。 2数组名作为函数参数:数组名作为函数参数是指在发生函数调用时,把作

9、为实参的数组名传送给形参,实现单向的值传送。 在普通变量或数组元素作函数参数时,形参变量和实参变量是由编译系统分配的两个不同的内存单元。在函数调用时发生的值传送是把实参变量的值赋予形参变量。而在用数组名作函数参数时,不是把实参数组的每一个元素的值都赋予形参数组的各个元素,只是将实参数组的首地址赋予形参数组名。形参数组名取得该首地址之后,也就等于有了实在的数组。实际上是形参数组和实参数组为同一数组,共同拥有一段内存空间。,11.3.3 多维数组作为函数参数,除了一维数组外,多维数组也可以作为函数的参数。例如: int sum(int a34) 这里采用一个二维数组作为函数的形参,在函数定义时对形

10、参数组可以指定每一维的长度。在C51语言中,也可省去第一维的长度。因此,以下写法也是合法的: int sum(int a4),11.3.4 指针作为函数参数,指针作为函数参数是指在发生函数调用时,把指针变量传送给形参,实现单向的值传送。使用指针类型做函数的参数,实际向函数传递的是变量的地址。这里举例讲解指针作为函数参数的应用,程序示例如下:,11.4 函数的返回值,函数的返回值是指函数被调用之后,在函数体中执行完相应的程序,并最终返回给主调函数的值。对于函数的返回值(或称函数的值),需要注意如下几点说明: 函数的值只能通过return语句返回主调函数。return 语句的一般形式为: retu

11、rn 表达式; 或者为: return (表达式);,11.5 函数的调用,函数的调用是指函数在主调函数中的调用形式。在前面的实例中其实已经用到了函数的调用。在C51语言中,函数的调用的一般形式如下: 函数名(实参列表) 其中,函数名即被调用的函数,实参列表是主调函数传递给被调函数的数据。通常,函数可以有以下3种调用方式。 函数语句:把函数作为一个语句,主要用于无返回值的函数。示例如下: delay(); 函数表达式:函数出现在表达式中,主要用于有返回值的函数,将返回值赋值给变量。示例如下: c=min(x,y);/函数min求x、y中的最小值 函数参数:函数作为另一个函数的实参,主要用于函数

12、的嵌套调用。示例如下: c=min(x,min(y,z);/函数min求x、y、z中的最小值,11.5.1 赋值调用与引用调用,赋值调用与引用调用是C51语言中最常用的参数传递方式,下面分别进行介绍。 “赋值调用”(call by value),这种方法中函数的形参是数值变量,函数调用时把参数的值复制到函数的形式参数中。赋值调用不会影响主调函数中的变量的数值。 “引用调用”(call by reference),这种方法中函数的形参是指针,函数调用时是把参数的地址复制给形式参数。在函数中,这个地址用来访问调用中所使用的实际参数。引用调用将会影响主调函数中的变量的数值。,11.5.2 递归调用,

13、递归调用一个函数在它的函数体内调用它自身的函数调用方式。这种函数也称为“递归函数”。在递归函数中,主调函数又是被调函数。执行递归函数将反复调用其自身。每调用一次就进入新的一层。 示例如下: int f(int x)/函数定义 int y; z=f(y);/递归调用 return z; ,11.5.3 嵌套调用,嵌套调用即在被调函数中又调用了其他函数的调用形式。C51语言中不允许作嵌套的函数定义。但是允许调用其他的函数,因为除了主函数外,各个函数都是平行的。这与其他高级语言的子程序嵌套的情形是类似的。示例如下:,11.6 函数及其变量的作用域,函数及其变量的作用域是指函数的有效范围,以及函数内部

14、变量的有效范围。下面分别进行讲解。,11.6.1 函数的作用域,函数的作用域是函数内部代码和数据的使用范围。在C51语言中,每一个函数都是一个独立的代码块,函数代码是隐藏于函数内部归该函数所有的。使用时需要注意如下几点: 在程序中除了对函数的调用以外,其他任何函数中的任何语句都不能访问它。例如,使用跳转语句goto,也只能在本函数内部使用,而不能从一个函数跳进其他函数内部执行。 定义在一个函数内部的数据无法与定义在另一个函数内部的数据进行作用,除非使用全程变量。 C51中所有函数的作用域都处于同一级别上,不可以在一个函数内再说明或定义另一个函数。 C51中一个函数对其他函数的调用是全程的,对于

15、整个工程都是“可见”的,即使两个函数在不同的文件中,也不必附加任何说明语句而被另一函数调用。,11.6.2 函数的变量作用域,函数的变量作用域是指函数内部定义的变量的使用范围。C51中的变量是可以在各个层次的函数开头处加以说明的,它的作用域仅在本函数内,当函数执行完毕后,变量及其分配的内存将消失。由于作用域的不同,一个函数中的变量即使与另一个函数中的变量名字相同,它们之间也是互不干扰的。这里举例讲解函数的变量作用域,程序示例如下:,11.7 main函数,main函数是C51程序中的特殊函数,是整个程序的入口。一般来说,一个C51程序都要有一个主函数main(),而且只能有一个。C51程序的执

16、行总是从main函数开始,如果有其他函数,则完成对其他函数的调用后再返回到主函数,最后由main函数结束整个程序。 一个C51程序常由一个主函数和若干个函数构成。由主函数调用其他函数,其他函数之间也可以相互调用。main()函数作为主调函数允许main()调用其他函数并传递参数。main()函数既可以是无参函数,也可以是有参的函数。对于有参的形式来说,就需要向其传递参数。但是其他任何函数均不能调用main()函数。当然也同样无法向main()函数传递参数,只能由程序之外传递而来。 带参数的main()函数的形式如下: int main(int argc,char *argv),11.8 小结,本章详细介绍了C51语言中函数的使用,包括函数的定义、形参和实参、函数的返回值、函数的调用、函数及其变量的作用域。本章还结合单片机程序设计的特点,介绍了C51程序中的main函数。函数是C51语言中的重要概念,灵活运用函数可以实现程序的模块化设计。因此,熟练掌握本章内容,是C51程序设计的基础。,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号