C语言程序设计(第二版) 教学课件 ppt 作者 夏宽理 赵子正编著 第5章 函数

上传人:E**** 文档编号:89391788 上传时间:2019-05-24 格式:PPT 页数:82 大小:988.50KB
返回 下载 相关 举报
C语言程序设计(第二版) 教学课件 ppt 作者 夏宽理 赵子正编著 第5章 函数_第1页
第1页 / 共82页
C语言程序设计(第二版) 教学课件 ppt 作者 夏宽理 赵子正编著 第5章 函数_第2页
第2页 / 共82页
C语言程序设计(第二版) 教学课件 ppt 作者 夏宽理 赵子正编著 第5章 函数_第3页
第3页 / 共82页
C语言程序设计(第二版) 教学课件 ppt 作者 夏宽理 赵子正编著 第5章 函数_第4页
第4页 / 共82页
C语言程序设计(第二版) 教学课件 ppt 作者 夏宽理 赵子正编著 第5章 函数_第5页
第5页 / 共82页
点击查看更多>>
资源描述

《C语言程序设计(第二版) 教学课件 ppt 作者 夏宽理 赵子正编著 第5章 函数》由会员分享,可在线阅读,更多相关《C语言程序设计(第二版) 教学课件 ppt 作者 夏宽理 赵子正编著 第5章 函数(82页珍藏版)》请在金锄头文库上搜索。

1、1,第5章 函数,5.1 函数的基本概念 5.2 库函数的使用方法 5.3 函数定义 5.4 函数调用 5.5 函数说明,5.6 递归函数基础 5.7 函数程序设计实例 5.8 存储类别和作用域 5.9 编译预处理命令简介,2,5.1 函数的基本概念,一个较大的程序一般分为若干个程序模块,每一个模块用来实现一个特定的功能。在C语言中,每一个模块就是一个函数。 函数由一个主函数main和若干个函数构成。程序运行时先执行主函数,再由主函数调用其他函数,其他函数也可以互相调用。 函数调用时一般给出要传送的数据,称为实参;在被调用的函数应有接受这些数据的称为形参。 函数分为用户自编的函数和C语言提供的

2、库函数两种。,3,5.1 函数的基本概念,【例5.1】以下是已知圆柱体的半径和高,求圆柱体体积的程序。 #include void main() double PI = 3.1415926, radius, height, vol; printf(“输入圆柱体的半径和高n“); scanf(“%lf%lf“, ,4,5.1 函数的基本概念,#include /* 求圆柱体体积函数 */ double volume(double radius, double height) double PI = 3.1415926, vol; vol = PI * radius * radius * heig

3、ht; return vol; void main() /*主函数 */ double PI = 3.1415926, r, h, v; printf(“输入圆柱体的半径和高n“); scanf(“%lf%lf“, ,5,5.2 库函数的使用方法,使用库函数的程序,都要在使用前写上包含其头文件的预处理命令。以下是常用的头文件: stdio.h 输入输出库函数 math.h、stdlib.h、float.h 数学库函数 time.h 时间库函数 ctype.h 字符分类和转换库函数 string.h 内存缓冲区和字符串处理库函数 graphics.h 图形处理库函数 malloc.h、stdli

4、b.h 内存动态分配库函数 signal.h、process.h 进程控制库函数,6,【例5.2】产生10个0100之间的随机数,#include /* 输入输出库函数的头文件 */ #include /* 时间库函数的头文件 */ #include /* 数学或内存分配库函数的头文件 */ void main() int k; long now; srand(time( /* 产生10个100以内的随机数 */ ,Rand()函数的返回值:0 32767,7,5.3 函数定义,一般形式: 类型符 函数名(形式参数说明表) 说明和定义部分 语句序列 说明: 1.函数头 (1)类型符:指定函数返

5、回值的类型。当函数执行不返回值时,习惯用void来标记;当函数返回int型值时,类型区分符int可以省略。,8,(2)函数名:只有一个主函数,即main()函数,其他的函数名可以随意命名。 (3)形式参数说明表:当有多个形参时,形参说明之间用逗号分隔,每个形参说明指定形参的类型和形参名。没有形参时圆括号内或空,或写上void,但圆括号不能省略。 对于函数来说,形参是一种局部变量。 形式参数说明表的一般形式如下: 类型符 形参1, 类型符 形参2, 类型符 形参n,5.3 函数定义说明,9,2. 函数体:函数体包含在函数头后一对花括号中,由说明语句(说明和定义部分)和执行语句组成。在函数体内定义

6、的变量称为函数的局部变量,只能在函数体内使用。因此,不同函数中的局部变量可以同名,互不干扰。 3. 函数返回值:函数可以有返回值,也可以没有返回值。有返回值的函数,在函数的出口处必须有带表达式的return语句: return 表达式; /* 返回结果 */,5.3 函数定义说明,10,【例5.3】求两个数中最小值的函数min(),/* 返回 double 型值,有两个形参 */ double min(double x, double y) return x y ? x : y; /* 返回x和y二者中小者的值 */ 说明:上述函数头表明,该函数名是min,它返回double型值,有两个dou

7、ble类型的形参,两个形参的名分别为x和y。,11,【例5.4】求两个正整数最大公约数的函数,两个正整数 a 和 b 的最大公约数有性质: gcd(a-b, b) a b gcd(a, b) = gcd(a, b-a) a b) a -= b; else b -= a; return a; ,12,【例5.4】采用辗转相除法 求正整数a、b的最大公约数,A. 求余数 求 a 除以 b 的余数r; B. 判结束 如 r 等于 0,b 为最大公约数,算法结 束;否则执行步骤C; C. 替换 用 ba,rb,并回到步骤A。 int gcd(int a, int b) int r; while(r =

8、 a % b) /* 求余数,并判是否结束 */ a = b; b = r; /* 替换 */ return b; ,13,5.3 函数定义 例5.5、例5.6,【例5.5】输出换行符的函数printnl。 void printnl(void) printf(“n“); 函数printnl()不返回结果,也没有形参。 【例5.6】空函数。 dummy() /* 或 dummy(void) */ ,14,5.4 函数调用,1. 函数调用的一般形式 一般形式: 函数名(实在参数表) 实在参数:按实参出现的顺序与函数定义中的形参一一对应,且类型一致。实参可以是常量、变量、表达式等。 如函数调用: w

9、 = min(u, v); 说明:调用函数名为min,提供了两个实参u和v,函数返回时结果存入变量w中。 若调用无形参的函数,调用形式变为: 函数名() 或 函数名(void) 说明:函数名之后的一对圆括号不能省略。,15,5.4 函数调用,2. 函数调用的应用 (1) 函数调用作为独立的语句 在函数调用之后加上一个分号。这种应用不要求函数有返回值,或无视函数的返回值。例如,程序中经常使用的调用格式输入函数scanf()和格式输出函数printf()等。 (2) 函数调用出现在表达式中 函数调用是利用函数的返回值,或对函数的返回值作进一步计算,或直接输出函数的返回值等。例如, minvalue

10、 = min(a, min(c, d); /*函数返回值作进一步计算*/ printf(“%fn“, min(u-v, a+b); /*直接输出函数的返回值*/,16,5.4 函数调用,3. 函数调用的执行过程 (1) 为函数的形参分配内存空间; (2) 计算实参表达式的值,并将值赋值给对应的形参; (3) 为函数的局部变量分配内存空间; (4) 执行函数体内的语句序列; (5) 函数体执行完,或执行了函数体内的return语句,释放为这次函数调用分配的全部内存空间; (6) 将函数返回值(如果有)作为函数调用的结果,从函数调用处继续执行。,17,【例5.7】求两个自然数的最大公约数,#inc

11、lude /* 这里是求最大公约数函数gcd(), 函数代码见例5.4 */ void main() /* 主函数 */ int x, y, d; printf(“Enter x, y : “); scanf(“%d%d“, ,18,5.4 函数调用说明,(1)当函数执行return语句或执行完函数体的语句后,函数的这次调用结束,随之将控制返回到函数调用处继续执行。 (2)函数的返回值是通过执行return语句,计算return之后的表达式值而获得的。如果函数不提供返回值,则return语句不应包含表达式。 (3)如果函数有返回值,则函数应有确定的类型,并在函数定义时指明。return语句的表

12、达式类型应与函数定义中指明的返回值类型相一致。例如,函数gcd()的类型是int型,返回值也为int型。 (4)如果函数不提供返回值,应在函数定义时在函数名之前写上void,在函数体内所有的return语句都不应该带表达式。,19,5.4 函数调用,4. 实参向形参传递数据 C语言规定,实参对形参的数据传递是“值传递”,即单向传递。如果实参也是变量,则实参变量与形参是不同的变量,只有实参变量的值传给形参,而不能由形参直接传回给实参(通过指针间接引用除外)。实际上,实参与形参在内存中占用不同的存储单元。在函数执行过程中,形参变量的值可以改变,但这改变对原先与它对应的实参变量没有影响。,即: 实参

13、形参() 形参实参(),20,【例5.8】值传递的示意程序,#include void func(int x, int y) x += 10; y += 10; printf(“ 在func函数中:x = %d, y = %dn“, x, y); void main() int x = 5, y =8; printf(“ 在主函数中x与y的初值是:x = %d, y = %dn“, x, y); func(x, y); printf(“ 调用func函数后返回到主函数时:x = %d, y = %dn“, x, y); ,运行结果,21,5.4 函数调用,5. 函数的嵌套调用 在C语言中,所有

14、函数都是独立的又是平等的。所谓“独立的”是指,一个函数内不能包含另一个函数定义,即不能嵌套定义。所谓“平等的”是指,除程序从主函数开始执行外,所有函数都处于同一层,函数相互之间可以任意调用。 这样从主函数出发,形成了一个长长的调用链,这就是通常所说的函数嵌套调用。,22,函数嵌套调用示图,main函数,a 函数,b 函数,调用a函数,结束,调用b函数,结束,结束,23,【例5.10】函数嵌套调用的示意程序,#include #include /* 判是否可构成三角形函数 */ int istri(float a, float b, float c) if (a+b=c | a+c=b | b+

15、c=a) return 0; /* 不能构成三角形*/ if (a=0 | b=0 | c=0) return 0; /* 不能构成三角形*/ return 1; /* 能构成三角形 */ ,24,【例5.10】函数嵌套调用的示意程序,/* 求三角形面积函数 */ float triangle(float a, float b, float c) float s, area; /* 调用istri()函数,查看是否能构成三角形 */ if (istri(a, b, c) = 0) return 0; /* 返回值为0不能构成三角形 */ s = (a+b+c)/2; area = sqrt(s

16、*(s-a)*(s-b)*(s-c); return area; /* 返回已计算的三角形面积 */ ,25,【例5.10】函数嵌套调用的示意程序,void main() /* 主函数 */ float a, b, c, area; do printf(“请输入三角形三条边a, b, c:“); scanf(“%f%f%f“, ,运行结果,26,调用库函数:在文件开头用#include说明。 调用自定义函数:在调用函数中作如下说明: 类型 标识符(形参类型表); 其中: 类型:该函数返回值的类型。 形参类型表:顺序给出各形参的类型,若没有形参,用void或空表示。 下面两种情况可以不说明: 1. 被调用函数类型为整型或字符型。 2. 被调用函数放在调用函数之前。,5.5 函数说明,27,#include void main() dou

展开阅读全文
相关资源
相关搜索

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

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