第八章结构、联合与枚举课件

上传人:我*** 文档编号:141170779 上传时间:2020-08-05 格式:PPT 页数:62 大小:403KB
返回 下载 相关 举报
第八章结构、联合与枚举课件_第1页
第1页 / 共62页
第八章结构、联合与枚举课件_第2页
第2页 / 共62页
第八章结构、联合与枚举课件_第3页
第3页 / 共62页
第八章结构、联合与枚举课件_第4页
第4页 / 共62页
第八章结构、联合与枚举课件_第5页
第5页 / 共62页
点击查看更多>>
资源描述

《第八章结构、联合与枚举课件》由会员分享,可在线阅读,更多相关《第八章结构、联合与枚举课件(62页珍藏版)》请在金锄头文库上搜索。

1、第八章 函 数,熟练掌握函数的定义、调用、返回值的方法及参数传递方式 掌握函数使用的常用方法 了解变量的作用域和变量的存储类别,8.1 概 述,一、C函数的概念,将一个C程序分为若干模块,每个模块实现一个特定的功能,在C语言中用函数来实现模块的功能。,函数:具有某种功能的独立程序段。,从程序设计方法看C函数:它是实现模块化程序设计的语法元素。,从C语言中程序的组成方式看C函数:它是程序的基本组成单位。,二、C函数与C程序结构,C程序由主函数(main函数)和若干个子函 数构成; 主函数调用子函数; 子函数在定义时是并列的; 子函数可相互调用,也可被多次调用。,main() /* 主函数 */

2、print_star(); /*调用print_star函数画*/ print_message(); /*调用print _message函数写字*/ print_star(); /*调用print_star函数画*/ print_star() /*定义print_star函数*/ prinf(“n*”); print_message() /*定义print_message函数*/ prinf(“n Hello! ”); ,函数调用例:,运行结果:* Hello! *,三、C函数的特点,一个源文件由一个或多个函数组成,它是一 个独立编译单元。 一个C程序由一个或多个源文件组成; C程序执行总是

3、从main函数开始,调用其 他函数后流程回到main函数,在main函数 中结束整个程序的运行。 函数不能嵌套定义,但可以互相调用。 注意不能调用main函数。,四、函数的分类,1. 从函数的参数形式看,函数可分为两类:,无参函数; 有参函数,有参函数例:(输出两数中大者) #include int max( int x, int y ); main( ) int num1,num2,a; scnaf(%d,%d, ,int max( int x, int y ) int z; if(xy) z=x; else z=y; ,2. 从用户使用的角度看,函数有两种 :,标准函数(库函数); 用户自

4、己定义的函数,库函数:是由编译系统提供的已设计好的函数, 用户只需调用而无需要去实现它。前 几章用过的scanf,printf,getchar, putchar等都是库函数。,用户自定义函数:由程序员自己定义和设计的 函数。需要程序员自己来编写函数 功能实现代码。,8.2 函数定义的一般形式,一、 无参函数的定义形式,类型标识符 函数名() 说明部分 语句 ,例如: print_message() printf(“n Hello!”); ,无参数传递,二、 有参函数的定义形式,类型标识符 函数名(形式参数表列) 说明部分 语句 ,有参数传递,例如: int max (int x, int y)

5、 /*求x和y二者中大者,x,y为形参*/ int z; /*函数体中变量的说明*/ z=xy?x:y; return (z); /*将z的值作为函数返回值*/ ,三、 空函数的定义形式,类型标识符 函数名( ) ,例如:dummy() ,功能:调用后什么也不做。,用处:建立程序结构,在需要时补充功能。,四、 对形参说明的传统方式,上面讲的形式参数表的说明形式是新版C语言表示形式(现代方式),即形式参数说明是类型和参数在一起说明。传统的形式参数说明是类型和参数分别说明。,如:按传统方式说明形参 int max(x , y) int x,y; ,按现代方式说明形参 int max(int x ,

6、 int y) ,这两种方式都可以使用,但推荐使用现代方式。,8.3 函数参数和函数的值,一、 形式参数和实际参数,形式参数:在定义函数时函数名后面括弧中的 变量名,简称形参。,实际参数:在调用函数时函数名后面括弧中的 表达式,简称实参。,main( ) int a,b,c; scanf (“%d,%d, ,int max( int x, int y) int z; z=xy? x:y; return(z); ,形参表,实参表,上例中形参与实参、函数名与返回值之间的关系:,关于参数的几点说明:,二、函数的返回值,定义:通过函数调用使主调函数得到一个确定 的值,称为函数的返回值。,例如: c=m

7、ax(3, 5); 此时函数的返回值是5,因此c=5,2. 函数的返回值语句 return,函数的返回值是通过 return语句 获得的。 return语句将被调函数的一个确定的值带回主调函数中去。return语句的一般形式:,“函数返回值”是有确定值的常量、变量或表达式。,说明:,一个函数中可以有多个return语句,但是一次 函数执行只能执行其中的一个。当执行到某个 return语句时,则终止函数执行,并带回函数值。,若函数体内没有return语句,就一直将函数执行 完,再返回调用函数,有一个不确定的值带回。, return后面可以无“返回值”(即 return ;),则 该return语

8、句只起到 终止函数执行,返回主调函 数的作用。,三、函数值的类型,函数定义时应该指定函数的类型(即函数值的类型),应该与return语句的类型一致。,说明:,凡不加类型说明的函数,一律自动按整型处理。,如果函数类型和return语句的类型不一致,以函 数类型为准。对数值型数据,可以自动进行类型 转换。既函数类型决定返回值的类型。,如果函数不返回值,可以将函数定义为“无类 型”void (或称“空类型”)。,例如: void print_star(),8.4 函数的调用,一、函数调用的一般形式,二、函数调用的具体方式,1. 把函数调用作为一个语句,如:我们程序中对scanf函数和printf函数

9、的调用。,2. 函数调用出现在表达式(函数表达式)中。,如:a =3+ max(num1,num2);,注意:无返回值函数的调用,不能出现在表达式中。,三、对被调用函数的说明 (声明), 对被调用函数说明的前提条件,被调用函数必须是已存在的函数,如用户自定义函数或库函数。,2. 被调用函数是用户自定义函数的函数说明,同变量一样,函数的调用也应该遵循“先说明,后使用”的原则。,如果使用用户自定义函数,而且主调函数和被调用函数在同一个文件中,应该在主调函数中说明被调函数的类型。其说明格式的一般形式如下:,一般形式:,在C语言中,以上的函数说明称为函数原型。,main() float add(flo

10、at x,float y); float a, b, c; scanf(“ %f, %f”, ,/*定义add函数*/ float add (float x,float y) float z; z=x+y; return (z); ,对被调用函数的说明,作为表达式被调用,3. 被调用函数是库函数的函数说明,如果使用库函数,需要在文件的开头用#include 命令将需要的库函数包含到文件中。,现在我们清楚了,为什么在使用库函数之前必须包含相应的头文件?那是因为对这些库函数的原型说明全部都写在对应的头文件里了。,我们现在用到的头文件有: # include “stdio.h” /*调用输入输出函数

11、*/ # include “math.h” /*调用数学函数*/ # include “string.h” /*调用字符,字符串函数*/,在本书的附录C中列出了C语言可以使用的标准库函数,大约有75个。请在阅读时注意形参的要求、功能及返回值。,4. 函数说明和函数定义的区别,函数说明的作用是把函数的名字、函数类型以及形参的类型、个数和顺序通知编译系统,以便在调用该函数时系统按此进行对照检查。,旧版C语言函数说明只是对函数名极其返回类型的说明。如:float max();未进行全面检查,新版C语言兼容这种用法,但不提倡使用。,因此,下列函数说明都是合法的: float max(int x, in

12、t y); float max(int,int); float max();,函数定义是指对函数功能的确立,包括指定函数名、函数值类型、形参及其类型、函数体等,它是一个完整的、独立的函数单位。,5. 可省略被调用函数说明的三种情况,函数的返回值为整型或字符型时,可以不进行 类型说明,系统按整型处理。,main( ) int a,b,c; scanf (“%d,%d”, ,无函数说明,整型函数,被调用函数定义在主调函数之前,可以不进行 类型说明。,float add (float x, float y) float z; z=x+y; return (z); main() float a, b;

13、 scanf(“ %f, %f, “ ,被调函数在主调函数之前,主调函数在被调函数之后,如果已在所有函数定义之前,在文件的开头, 在函数的外部已说明了函数类型,则在各个主 调函数中不必对所调用的函数再做说明。,char letter( char,char); float f(float,float ); int i(float,float); main( ) . char letter (char c1,char c2) float f(float x,float y) int i(float,float) ,在所有函数之前 说明函数类型,此处不必说明,定义函数 letter、f和i,8.5

14、数组作为函数的参数,数组元素可以做函数的实参 数组名可以做函数的参数 多维数组可以做函数参数,一、数组元素可以做函数的实参,由于表达式可以做实参,数组元素可以作为表达式的组成部分,因此,数组元素可以做函数的实参,并且可以单向传递给形参。,例:有两个数组A,B。各有10个元素,将它们逐个对应相比,如果A数组中的元素大于B数组中相应的元素数目多于B数组中的元素大于A数组中相应的元素数目,则认为A数组大于B数组,并分别统计出两个数组相应元素大于,小于和等于的个数。,程序设计:,函数large(x, y) :比较两个数组元素的 大小。,主函数 :输入两个数组,调用large函数比较,计数, 输出统计结

15、果。,/*定义large函数*/ large (int x ,int y) int flag; if (xy) flag=1 else if (xy) flag= -1 else flag = 0; return (flag); ,运行输入: enter array a: 1 3 5 7 9 8 6 4 2 0 enter array b: 5 3 8 9 -1 -3 5 6 0 4,运行结果: : 4 =: 1 : 5 a b,二、数组名可以做函数的参数,由于数组名代表的就是数组在内存中存放区域的首地址。把数组名作为函数参数来实现大量数据的传递是一个非常好的数据传递方法。,在主调函数和被调函数中分别定义数组;,数组名可以做函数的参数的具体方法:,实参数组和形参数组类型应一致;,实参数组和形参数组大小不一定一致,形参数 组可以不指定大小(这里指一维数组)。,说明:数组名做函数的实参和形参时不是“值传 递”,而是“地址传递”。因此,形参数 组各元素的值如果发生变化会使实参数组 各元素的值发生同样的变化。,例:用选择法对数组中10个整数按由小到大排序.,程序设计:,函数sort(array, n) :对数组元素按由小到大排序。,主程序 :输入ar

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

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

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