c语言程序设计 第6章_函数.ppt
《c语言程序设计 第6章_函数.ppt》由会员分享,可在线阅读,更多相关《c语言程序设计 第6章_函数.ppt(101页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C语言程序设计教程语言程序设计教程(第(第2版)版)第第6 6章章 函数函数C程序的结构:C程序结构说明:说明:说明:说明:1 1、一个、一个、一个、一个C C程序由一个或多个源程序文件组成。对较大程序由一个或多个源程序文件组成。对较大程序由一个或多个源程序文件组成。对较大程序由一个或多个源程序文件组成。对较大的程序,一般不希望全放在一个文件中,而是将函数的程序,一般不希望全放在一个文件中,而是将函数的程序,一般不希望全放在一个文件中,而是将函数的程序,一般不希望全放在一个文件中,而是将函数和其他内容(如预定义)分别放在若干个源文件中,和其他内容(如预定义)分别放在若干个源文件中,和其他内容(
2、如预定义)分别放在若干个源文件中,和其他内容(如预定义)分别放在若干个源文件中,再由若干个源文件组成一个再由若干个源文件组成一个再由若干个源文件组成一个再由若干个源文件组成一个C C程序。这样做可以分别程序。这样做可以分别程序。这样做可以分别程序。这样做可以分别编写、分别编译,从而提高效率。编写、分别编译,从而提高效率。编写、分别编译,从而提高效率。编写、分别编译,从而提高效率。(多个源文件中只能有一个是包含主函数的)(多个源文件中只能有一个是包含主函数的)(多个源文件中只能有一个是包含主函数的)(多个源文件中只能有一个是包含主函数的)2 2、一个源程序文件由一个或多个函数组成。一个源程、一个
3、源程序文件由一个或多个函数组成。一个源程、一个源程序文件由一个或多个函数组成。一个源程、一个源程序文件由一个或多个函数组成。一个源程序文件是一个编译单位,即以源程序文件为单位进行序文件是一个编译单位,即以源程序文件为单位进行序文件是一个编译单位,即以源程序文件为单位进行序文件是一个编译单位,即以源程序文件为单位进行编译,而不是以函数为单位进行编译。编译,而不是以函数为单位进行编译。编译,而不是以函数为单位进行编译。编译,而不是以函数为单位进行编译。3 3、一个源程序文件可以为多个、一个源程序文件可以为多个、一个源程序文件可以为多个、一个源程序文件可以为多个C C程序共用。程序共用。程序共用。程
4、序共用。4 4、C C程序的执行总是从主函数程序的执行总是从主函数程序的执行总是从主函数程序的执行总是从主函数main()main()开始,调用其他开始,调用其他开始,调用其他开始,调用其他函数后返回到主函数,在主函数中结束整个程序的运函数后返回到主函数,在主函数中结束整个程序的运函数后返回到主函数,在主函数中结束整个程序的运函数后返回到主函数,在主函数中结束整个程序的运行。行。行。行。main()main()函数是系统定义的。函数是系统定义的。函数是系统定义的。函数是系统定义的。u C C语言语言是是函数式函数式语言语言;u 必须有且只能有一个名为必须有且只能有一个名为mainmain的主函
5、数的主函数,主函主函数数mainmain是必须的是必须的,其他函数的数目是不限的其他函数的数目是不限的;u C C程序的执行总是程序的执行总是从从mainmain函数开始,在函数开始,在mainmain中中结束结束;umainmain函数函数只调用其他函数只调用其他函数,但但不能被其他函数不能被其他函数所调用所调用;u如果不考虑函数的功能和逻辑如果不考虑函数的功能和逻辑,其他函数没有其他函数没有主从关系主从关系,可以相互调用可以相互调用;u所有函数所有函数都可以调用库函数都可以调用库函数;u所有函数都是平行的所有函数都是平行的,在定义时是相互独立的,在定义时是相互独立的,一个函数并不从属于另一
6、个,即一个函数并不从属于另一个,即函数函数不能嵌套定不能嵌套定义义,但但可以可以嵌套嵌套调用调用。C C语言程序的总体功能的实现:通过函数的调用来实现语言程序的总体功能的实现:通过函数的调用来实现语言程序的总体功能的实现:通过函数的调用来实现语言程序的总体功能的实现:通过函数的调用来实现C C语言的函数分为两类:语言的函数分为两类:语言的函数分为两类:语言的函数分为两类:系统定义的标准函数,又称为系统定义的标准函数,又称为系统定义的标准函数,又称为系统定义的标准函数,又称为库函数库函数库函数库函数。由系统提供由系统提供由系统提供由系统提供.此类函数此类函数此类函数此类函数不需要用户定义不需要用
7、户定义不需要用户定义不需要用户定义,也不必在程序中作说明也不必在程序中作说明也不必在程序中作说明也不必在程序中作说明,只需在程序开头只需在程序开头只需在程序开头只需在程序开头前用文件包含命令将包含有该函数原型的头文件包含进来前用文件包含命令将包含有该函数原型的头文件包含进来前用文件包含命令将包含有该函数原型的头文件包含进来前用文件包含命令将包含有该函数原型的头文件包含进来即可在程序中直接调用即可在程序中直接调用即可在程序中直接调用即可在程序中直接调用.这些函数总的可分为输入输出函数、这些函数总的可分为输入输出函数、这些函数总的可分为输入输出函数、这些函数总的可分为输入输出函数、数学函数、字符串
8、处理函数和内存函数等数学函数、字符串处理函数和内存函数等数学函数、字符串处理函数和内存函数等数学函数、字符串处理函数和内存函数等.如如如如:printfprintf()()、scanfscanf()()、putcharputchar()()、sqrtsqrt()()等。等。等。等。在调用该函数之前用在调用该函数之前用在调用该函数之前用在调用该函数之前用#include#include 命令将库函数信息包含到本程命令将库函数信息包含到本程命令将库函数信息包含到本程命令将库函数信息包含到本程序中。序中。序中。序中。常用的库函数请查阅附录常用的库函数请查阅附录常用的库函数请查阅附录常用的库函数请查阅
9、附录C C。使用使用库函数库函数应注意:应注意:1、了解函数功能、了解函数功能2、了解函数参数的数目和顺序,及各参数意义和类型、了解函数参数的数目和顺序,及各参数意义和类型3、函数返回值意义和类型、函数返回值意义和类型4、需要使用的文件包含命令,在程序的开头用、需要使用的文件包含命令,在程序的开头用#include 或或#include“*.h”说明。只有这样程序在编译、连接说明。只有这样程序在编译、连接时时Turboc才知道它是提供的库函数,否则,将认为是用才知道它是提供的库函数,否则,将认为是用户自己定义的函数而不能装配。户自己定义的函数而不能装配。(使用(使用printf()和和scan
10、f()这两函数时可省略)这两函数时可省略)自定义函数。自定义函数。自定义函数。自定义函数。按要求设计的。按要求设计的。C C语言程序设计的核心之一:语言程序设计的核心之一:语言程序设计的核心之一:语言程序设计的核心之一:自定义函数。自定义函数。自定义函数。自定义函数。按用户需求写的函数。此类函数不仅要在程序中定义按用户需求写的函数。此类函数不仅要在程序中定义按用户需求写的函数。此类函数不仅要在程序中定义按用户需求写的函数。此类函数不仅要在程序中定义函数本身,而且在主调函数模块中还必须对该被调函数进函数本身,而且在主调函数模块中还必须对该被调函数进函数本身,而且在主调函数模块中还必须对该被调函数
11、进函数本身,而且在主调函数模块中还必须对该被调函数进行类型说明才能使用。行类型说明才能使用。行类型说明才能使用。行类型说明才能使用。printstarprintstarprintstarprintstar()()()()/*/*/*/*用户自定义的函数用户自定义的函数用户自定义的函数用户自定义的函数*/printfprintfprintfprintf(“*n*n*n*n”););););printsmessageprintsmessageprintsmessageprintsmessage()()()()/*/*/*/*用户自定义的函数用户自定义的函数用户自定义的函数用户自定义的函数*/pri
12、ntfprintfprintfprintf(“how do you do!n how do you do!n how do you do!n how do you do!n”););););main()main()main()main()printstarprintstarprintstarprintstar();();();();/*/*/*/*在主函数中调用自定义函数在主函数中调用自定义函数在主函数中调用自定义函数在主函数中调用自定义函数*/printsmessageprintsmessageprintsmessageprintsmessage();();();();/*/*/*/*在主函
13、数中调用自定义函数在主函数中调用自定义函数在主函数中调用自定义函数在主函数中调用自定义函数*/printstarprintstarprintstarprintstar();();();();/*/*/*/*在主函数中调用自定义函数在主函数中调用自定义函数在主函数中调用自定义函数在主函数中调用自定义函数*/程序运行结果:程序运行结果:程序运行结果:程序运行结果:*how do you do!how do you do!how do you do!how do you do!*从从从从C C语言中的函数功能角度来看语言中的函数功能角度来看语言中的函数功能角度来看语言中的函数功能角度来看,可分为有返
14、回值函可分为有返回值函可分为有返回值函可分为有返回值函数和无返回值函数数和无返回值函数数和无返回值函数数和无返回值函数:(1)(1)有返回值函数:此类函数被调用执行完后将向调有返回值函数:此类函数被调用执行完后将向调有返回值函数:此类函数被调用执行完后将向调有返回值函数:此类函数被调用执行完后将向调用者返回一个执行结果用者返回一个执行结果用者返回一个执行结果用者返回一个执行结果,称为返回值称为返回值称为返回值称为返回值.用户定义此用户定义此用户定义此用户定义此类函数时必须在函数定义和函数说明中明确说明类函数时必须在函数定义和函数说明中明确说明类函数时必须在函数定义和函数说明中明确说明类函数时必
15、须在函数定义和函数说明中明确说明返回值的类型返回值的类型返回值的类型返回值的类型.(若返回值是整型则定义时可以省(若返回值是整型则定义时可以省(若返回值是整型则定义时可以省(若返回值是整型则定义时可以省略类型)略类型)略类型)略类型)如如如如:sin():sin()、coscos()()等数学函数即属于此类函数等数学函数即属于此类函数等数学函数即属于此类函数等数学函数即属于此类函数(2)(2)无返回值函数:此类函数用于完成某项特定的处无返回值函数:此类函数用于完成某项特定的处无返回值函数:此类函数用于完成某项特定的处无返回值函数:此类函数用于完成某项特定的处理任务,执行完后不向调用者返回函数值
16、理任务,执行完后不向调用者返回函数值理任务,执行完后不向调用者返回函数值理任务,执行完后不向调用者返回函数值.用户定用户定用户定用户定义此类函数时可指定返回值的类型为义此类函数时可指定返回值的类型为义此类函数时可指定返回值的类型为义此类函数时可指定返回值的类型为“空类型空类型空类型空类型”,空类型的说明符为,空类型的说明符为,空类型的说明符为,空类型的说明符为“void”void”。从主调函数和被调函数之间传送的角度来看从主调函数和被调函数之间传送的角度来看从主调函数和被调函数之间传送的角度来看从主调函数和被调函数之间传送的角度来看,可分为无参可分为无参可分为无参可分为无参函数和有参函数函数和
17、有参函数函数和有参函数函数和有参函数:(1)(1)无参函数:此类函数在函数定义、函数说明及函数调无参函数:此类函数在函数定义、函数说明及函数调无参函数:此类函数在函数定义、函数说明及函数调无参函数:此类函数在函数定义、函数说明及函数调用中均不带参数,主调函数和被调函数之间不进行参数用中均不带参数,主调函数和被调函数之间不进行参数用中均不带参数,主调函数和被调函数之间不进行参数用中均不带参数,主调函数和被调函数之间不进行参数传递。此类函数一般用来完成一组特定的功能,可以返传递。此类函数一般用来完成一组特定的功能,可以返传递。此类函数一般用来完成一组特定的功能,可以返传递。此类函数一般用来完成一组
18、特定的功能,可以返回或不返回函数值。回或不返回函数值。回或不返回函数值。回或不返回函数值。注:注:注:注:若定义时没有返回值是若定义时没有返回值是若定义时没有返回值是若定义时没有返回值是“空类型空类型空类型空类型”,则函数返回值是,则函数返回值是,则函数返回值是,则函数返回值是存在的。若希望函数没有返回值,则在定义时就必须说存在的。若希望函数没有返回值,则在定义时就必须说存在的。若希望函数没有返回值,则在定义时就必须说存在的。若希望函数没有返回值,则在定义时就必须说明为空类型。明为空类型。明为空类型。明为空类型。如:如:如:如:dayingdaying()()/*/*若此句改为若此句改为若此句
19、改为若此句改为“void void dayingdaying()”,()”,则后面就不能输出值则后面就不能输出值则后面就不能输出值则后面就不能输出值*/printfprintf(“*n”);(“*n”);main()main()daying();printf(“%d”,dayingdaying();printf(“%d”,daying();();则运行结果为:则运行结果为:则运行结果为:则运行结果为:*4 4 /*/*这里是一个不确定的值这里是一个不确定的值*/(2)(2)有参函数:此类函数在定义及函数说明时都有参有参函数:此类函数在定义及函数说明时都有参有参函数:此类函数在定义及函数说明时都
20、有参有参函数:此类函数在定义及函数说明时都有参数,称为形式参数(简称形参)。在函数调用时也数,称为形式参数(简称形参)。在函数调用时也数,称为形式参数(简称形参)。在函数调用时也数,称为形式参数(简称形参)。在函数调用时也必须给出参数,称为实际参数(简称实参)。必须给出参数,称为实际参数(简称实参)。必须给出参数,称为实际参数(简称实参)。必须给出参数,称为实际参数(简称实参)。进行函数调用时,主调函数把实参的值传给被进行函数调用时,主调函数把实参的值传给被进行函数调用时,主调函数把实参的值传给被进行函数调用时,主调函数把实参的值传给被调函数的形参,供被调函数使用。调函数的形参,供被调函数使用
21、。调函数的形参,供被调函数使用。调函数的形参,供被调函数使用。本章节主要讲解用户自定义函数定义、调用等。本章节主要讲解用户自定义函数定义、调用等。本章节主要讲解用户自定义函数定义、调用等。本章节主要讲解用户自定义函数定义、调用等。6.1.1 函数的定义函数的定义自定义函数的形式:自定义函数的形式:存储类型符存储类型符 返回值类型符返回值类型符 函数名函数名(形参说明表形参说明表)几点说明:1.1.存储类型符存储类型符指的是函数的作用范围,只有两种形式:static和extern。static说明的函数称为内部函数内部函数,只能作用于其所在的源文件,extern说明的函数称为外部函数外部函数,可
22、被其他源文件中的函数调用。缺省情况为缺省情况为extern。2 2.返回值类型符返回值类型符返回值类型符返回值类型符 指的是函数体语句执行完成后,函数返回值的指的是函数体语句执行完成后,函数返回值的类型。类型。如如int,float,char等。等。若函数无返回值,则用空类型若函数无返回值,则用空类型void来定义函数的返回值。来定义函数的返回值。默认情况为默认情况为int型(有些编译器不支持默认情况)。型(有些编译器不支持默认情况)。3.3.函数名函数名由任何合法的标识符构成。由任何合法的标识符构成。建议将函数名的命名与函数内容有一定关系。建议将函数名的命名与函数内容有一定关系。4.4.形参
23、说明表形参说明表是一系列用逗号分开的形参变量说明。是一系列用逗号分开的形参变量说明。如:如:int x,int y,int z 表示形参变量有表示形参变量有3个:个:x,y,z。类型都是。类型都是int型的。型的。注意:注意:不能直接写成:不能直接写成:int x,y,z。5.5.在古典式函数定义中,在古典式函数定义中,形参表形参表只要形参名,不要类型名。如:只要形参名,不要类型名。如:x,y,z 表示形参变量有表示形参变量有3个。形参的类型通过个。形参的类型通过形参说明形参说明语句说明。如:语句说明。如:int x,y,z。形参说明表形参说明表或或形参表形参表都可以缺省,缺省时表示函数无参数
24、。都可以缺省,缺省时表示函数无参数。6.函数语句体函数语句体是放在一对花括号 中,由局部数据类型描述和功能实现两部分组成。函数返回语句函数返回语句 通常用返回语句返回语句来结束函数的调用。两种形式的返回语句:函数无返回值的情况 return;函数有返回值的情况 return(表达式的值);例例 无参函数无参函数 printstar()printf(“*n”);或或 printstar(void)printf(“*n”);例:例:有参函数(现代风格)有参函数(现代风格)int max(int x,y)int z;z=xy?x:y;return(z);例例:空函数空函数dummy()函数体为空函数
25、体为空函数的定义的几种不同形式:函数的定义的几种不同形式:函数类型函数类型 函数名函数名(形参类型说明表形参类型说明表)说明部分说明部分语句部分语句部分u现代风格:现代风格:例:例:有参函数(现代风格)有参函数(现代风格)int max(int x,int y)int z;z=xy?x:y;return (z);函数类型函数类型 函数名(形参表)函数名(形参表)形参类型说明形参类型说明 说明部分说明部分 语句部分语句部分u传统风格传统风格:例例:有参函数(传统风格):有参函数(传统风格)int max(x,y)int x,y;int z;z=xy?x:y;return(z);例如,编写自定义函
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c语言程序设计 第6章_函数 语言程序设计 函数
限制150内