【PPT课件】函数与指针C语言课件

上传人:豆浆 文档编号:1128468 上传时间:2017-05-29 格式:PPT 页数:39 大小:1.25MB
返回 下载 相关 举报
【PPT课件】函数与指针C语言课件_第1页
第1页 / 共39页
【PPT课件】函数与指针C语言课件_第2页
第2页 / 共39页
【PPT课件】函数与指针C语言课件_第3页
第3页 / 共39页
【PPT课件】函数与指针C语言课件_第4页
第4页 / 共39页
【PPT课件】函数与指针C语言课件_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《【PPT课件】函数与指针C语言课件》由会员分享,可在线阅读,更多相关《【PPT课件】函数与指针C语言课件(39页珍藏版)》请在金锄头文库上搜索。

1、函数与指针,第7章,7.1 概述,第7章,1按功能划分模块 划分模块的基本原则是:各模块都要易于理解,功能尽量单一,模块间的联系尽量少。满足这些要求的模块具有以下优点:,7.1.1 模块化程序结构的概念,(1)模块间的接口关系简单,这种程序可读性和可理解性较强。(2)需要修改某一功能时,只涉及到一个模块,不会影响到其它模块。(3)脱离程序的上、下文也能单独验证一个模块的正确性。(4)扩充或建立新系统时,可充分利用已有的模块。,7.1 概述,第7章,2.按层次组织模块 结构化程序设计方法要求在设计程序时,按层次结构组织各模块。在按层次组织模块时,上层模块只需指出“做什么”,最底层的模块才精确地描

2、述“怎么做”。例如,图7-1所示的层次结构中,主模块指出总任务;模块1、模块2、模块3分别指出各自的子任务;模块4、模块5、模块6才去精确描述“怎么做”。,7.1.1 模块化程序结构的概念,图 7-1 按层次调用模块,7.1 概述,第7章,【例7.1】简单的函数调用。 # include main( ) /* 主函数*/ p1( ); /* 调用p1函数*/ P2( ); /*调用p2函数*/ P1( ); /*再次调用p1函数*/ P1( ) /* 函数p1打印一行*号*/ printf(“* * * * * * * * * * * * * n”); P2( ) /*函数p2打印一行文字*/

3、 printf(“ Welcome to C!n”); ,7.1.2 C语言程序的构成,运行结果为: * * * * * * * * * * * * * Welcome to C! * * * * * * * * * * * * *,7.2 函数的定义,第7章,1C语言函数的概念 函数就是用来完成一定的功能。所谓函数名就是给该功能起一个名字。如果该功能用来实现数学运算的,就是数学函数。在C语言中,往往把程序需要实现的一些功能分别编写为若干个函数,然后把它们组合成一个完整的程序。,7.2.1 C语言函数的概念及分类,7.2 函数的定义,第7章,2C语言函数的分类 (1)从用户使用的角度分类: 库

4、函数。它是由编译系统提供的,用户不必定义可以直接使用的函数。 用户自定义函数。用户用来实现某种功能,本章主要学习自定义函数的编写与应用。 (2)从函数完成的任务分类: 有返回值函数。该类函数在结束时,将计算结果返回到主调函数。 无返回值函数。该类函数运行结束时,没有数据返回,它只是完成某一种操作。,7.2.1 C语言函数的概念及分类,7.2 函数的定义,第7章,(3)从函数的表示形式来分类: 无参函数。 主调函数没有将数据传递给被调函数,一般用来完成某一操作。无参函数可以带回或不带回函数值到主调函数。 有参函数。 调用该类函数时,在主调函数和被调函数之间有数据传递。主调函数可以将数据传递给被调

5、函数使用,被调函数的计算结果也可以带回主调函数使用。,7.2.1 C语言函数的概念及分类,7.2 函数的定义,第7章,1.无参函数定义的一般形式,7.2.2 函数定义的一般形式,类型 函数名() 说明部分; 语句 ,7.2 函数的定义,第7章,2.有参函数定义的一般形式,7.2.2 函数定义的一般形式,类型 函数名(类型1 形参1,类型2 形参2,类型n 形参n) 说明部分; 语句部分;,7.2 函数的定义,第7章,3. 定义空函数 在程序设计中有时会用到空函数,它的形式为:,7.2.2 函数定义的一般形式,类型 函数名() ;,7.3 函数的参数和函数的值,第7章,在调用函数时,大多数情况下

6、,主调函数和被调函数之间有数据传递关系。这就是前面提到的有参函数。在定义函数时,函数名后面的括号中的变量称为“形式参数”,简称“形参”。在调用函数时,主调函数名后面括号中的参数(也可以是一个表达式)称为“实际参数”,简称“实参”。,7.3.1 形式参数和实际参数,7.3 函数的参数和函数的值,第7章,通过函数调用使主调函数得到一个值,这就是函数的返回值。函数的返回值是通过return语句来获得的,其格式为: return (返回值表达式); 或: return 返回值表达式 ; 功能:自定义函数运行结束,退出该函数,将“返回表达式”的值带给调用函数。,7.3.2 函数的返回值,7.3 函数的参

7、数和函数的值,第7章,【例7.2】用函数求两个整数的最大值。程序代码:#include main( ) /*主调函数main*/ int a, b, c; scanf(“%d, %d”, &a, &b); /*输入a,b的值*/ c=max(a,b); /*把a,b的值作为调用函数的实参,传递给被调用函数*/ printf(“max is %d”, c); /*打印c的值*/ int max(int x,int y) /*函数max在被调用时,形参x,y分别得到实参a,b传递的值*/ int z; z=xy? x : y; /*x=7,y=8进行计算,结果为取y的值8,赋值给变量z */ re

8、turn(z); /*退出max函数,将变量z的值8返回给主调函数main*/ ,7.3.2 函数的返回值,运行结果: 7,8 max is 8,7.4 函数的调用,第7章,1调用库函数 调用库函数时,通常在文件开头用#include命令将调用有关库函数时所需用的信息“包含”到本文件中来。如:标准输入输出库函数用#include ,数学库函数用#include 。 2调用自定义函数 调用自定义函数,而且该函数与调用它的函数在同一个文件中,应在主调函数中对被调函数作声明(说明函数类型、参数类型及个数),以便编译系统对函数调用进行语法检查。,7.4.1 函数的原型与声明,7.4 函数的调用,第7章

9、,格式:函数名(实参表列) 函数调用的执行过程: 先计算每个实参表达式的值,再赋值给所对应的形参中,然后执行被调用函数体,执行完函数后,返回到调用此函数的下一条语句,继续去执行主调程序中下面的语句。 说明: (1)如果是无参函数,则没有实参列表,但括弧不能省略。 (2)如果实参表列包含多个实参,则各参数间用逗号隔开。实参与形参的个数应相等,类型应一致。实参与形参是按顺序一一对应传递数据。,7.4.2 函数调用的一般形式,7.4 函数的调用,第7章,根据函数在程序中出现的位置,大致有3种调用方式: (1)函数语句 把函数调用作为一个语句。如: p1();这种调用不返回函数值,只要求函数完成一定的

10、操作,如【例7.1】。 (2)函数表达式 函数出现在一个表达式中,这时要求函数带回一个确定的值以参加表达式的运算。如:x=2*max(a,b); (3)函数参数 一个函数作为另一个函数的实参。,7.4.3 函数的调用方式,7.5 函数的嵌套调用,第7章,C 语言定义的函数都是互相独立的,函数间不能嵌套定义(嵌套定义是指定义一个函数时,其函数体内包含另一个函数的完整定义),但可以嵌套调用,也就是说在调用一个函数的过程中,该函数又调用另一函数。 例如:f1 和f2是分别定义的函数,但在调用函数f1的过程中又要调用函数f2。其调用过程如图7-4所示:,图7-4 函数嵌套调用过程,7.6 函数的递归调

11、用,第7章,在调用一个函数的过程中,又直接或间接地调用函数本身,称为函数的递归调用。 语言提供两种形式的递归调用: 直接递归调用:指函数直接调用函数本身的形式,其执行过程如图7-5所示。 间接递归调用:指函数调用其它函数,其它函数又调用原函数的形式, 其执行过程如图7-6所示。,图7-5 直接递归调用 图7-6 间接递归调用,7.6 函数的递归调用,第7章,递归调用的过程可以分为两个阶段: 一是从未知的向已知方向推测; 二是从已知的再向未知方向回推。在有限递归的情况下,总会有一个递归的结束条件。 递归函数的典型例子是求阶乘。下面通过求阶乘的函数,详细分析递归过程。阶乘的计算公式为: n!=n*

12、(n-1)*2*1 递归的方法是逆推,即n!等于n.(n-1)!, 而(n-1)!又等于(n-1).(n-2)!,依此类推, 一直推到1!=1,。然后,再逆推回来即可求出结果。,7.6 函数的递归调用,第7章,【例7.7】用递归调用,编写求n!的程序。 分析: 函数fact( n)的函数体中出现fact(n-1),这正是函数的自身调用。主函数调用该函数计算4!。第一次调用时,形参n接收的值是4。进入函数体后,由于40,需要调用fact(n-1),即fact(3)。从而又开始了第二次调用该函数过程。依此类推,直到条件n=1成立,本次函数的自调过程结束,程序控制开始逐步返回。首先返回1!的结果为1

13、,1乘n的当前值2,以其结果2返回到上次调用函数中。这样,以每次返回的值,乘以n的当前值的结果,作为本次调用的值返回到上次调用中。最后返回的是第一次调用fact(4)的值24,从而得到4!的计算结果。,7.6 函数的递归调用,第7章,程序代码:int fact( int n) /*递归函数*/ if(n0) printf(“n0, data error!”); else if(n=0|n=1) return 1; else return (n*fact(n-1); /*递归调用*/ #include main( ) /*主函数*/ int n, p; printf(“n=? ”); scanf(“%d”,&n); /*输入一个数*/ p=fact(n); /*调用递归函数*/ printf(“%d!=%dn”,n,p); /*打印返回的值*/,

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

最新文档


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

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