第8章 函数-精品文档资料整理.ppt
《第8章 函数-精品文档资料整理.ppt》由会员分享,可在线阅读,更多相关《第8章 函数-精品文档资料整理.ppt(83页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第8章 函数 C语言程序设计 第八章第八章 函数函数概述函数定义的一般形式函数参数和函数的值函数的调用函数的嵌套调用函数的递归调用数组作为函数参数局部变量和全局变量变量的存储类别内部函数和外部函数运行一个多文件的程序本章学习目标:本章学习目标: C语言程序设计 第八章第八章 函数函数认识到函数是一种简化程序结构的重要手段;认识到函数是一种简化程序结构的重要手段;理解函数调用和函数调用过程中的参数传递;理解函数调用和函数调用过程中的参数传递;理解函数原型理解函数原型(声明声明)和怎样写函数原型;和怎样写函数原型;能够用前几章的知识实现简单的函数;能够用前几章的知识实现简单的函数;能够用能够用re
2、turn语句实现函数的返回值;语句实现函数的返回值;能够理解函数调用过程中形式参数和实际参数的能够理解函数调用过程中形式参数和实际参数的关系,理解数组名作为函数参数时代表的意义;关系,理解数组名作为函数参数时代表的意义;能够理解函数的嵌套调用和递归调用机制能够理解函数的嵌套调用和递归调用机制 。8.1 概述概述函数的概念函数的概念 C语言程序设计 第八章第八章 函数函数一个大的程序一般应分为若干个程序模块,每个模块实现一个特一个大的程序一般应分为若干个程序模块,每个模块实现一个特定的功能,这些模块称为子程序,在定的功能,这些模块称为子程序,在C C语言中子程序用函数实现。语言中子程序用函数实现
3、。mainabca1abb1b2不能被调用不能被调用所有函数都是所有函数都是平行的,不能平行的,不能嵌套定义嵌套定义分为分为:库函数和库函数和自定义函数自定义函数 C语言程序设计 第八章第八章 函数函数举例:用常规、工程和文件包含三种方法打印字符串举例:用常规、工程和文件包含三种方法打印字符串 一、常规方法:一、常规方法:各函数包含在一个文件中各函数包含在一个文件中例例T8-1.c #include void main( ) void printstar( ); void print_message( ); printstar( ); print_message( ); printstar(
4、); void printstar( ) printf (“* n” ); void print_message( ) printf (“_ _ _ _ _How_do_you_do!n”) ;运行结果:运行结果: * How do you do! * * C语言程序设计 第八章第八章 函数函数二、工程的方法二、工程的方法 例:某程序由四个文件组成,其中,一个文件包含主函数,两例:某程序由四个文件组成,其中,一个文件包含主函数,两个文件包含两个被调用函数。一个为工程文件,包含这个程序个文件包含两个被调用函数。一个为工程文件,包含这个程序的三个文件名。的三个文件名。 操作:操作:Alt+p Pr
5、oject name :T8-1-4.prj Alt +R 结果同上结果同上T8-1-1.c main( ) p1( ) ; p2( ) ; p1( ) ; T8-1-2.c p1( ) printf (“* n”); T8-1-3.c p2( ) printf (“ How do you do! n”); T8-1-4.prj T8-1-1T8-1-2T8-1-3 C语言程序设计 第八章第八章 函数函数三、文件包含的方法三、文件包含的方法 在主函数中使用文件包含预编译命令,将不在本文件在主函数中使用文件包含预编译命令,将不在本文件而在其它文件中的函数进行预编译处理把各文件中的函数而在其它文件
6、中的函数进行预编译处理把各文件中的函数包含到本文件中来,然后一起进行编译、连接、运行。包含到本文件中来,然后一起进行编译、连接、运行。 T8-1-5.c #include “T8-1-2.c”#include “T8-1-3.c”main( ) p1( ); p2( ) ; p1( ) ; 运行结果同上运行结果同上几点说明:几点说明:(1)(1)一个源文件由一个或者多个函数组成。一个源文件由一个或者多个函数组成。(2)(2)一个一个C C程序由一个或者多个源文件组成。程序由一个或者多个源文件组成。(3)C(3)C程序的执行从程序的执行从main main 函数开始。函数开始。(4)(4)所有的
7、函数都是平行的。所有的函数都是平行的。(5)(5)从用户的角度看,函数分库函数和自定义函数。从用户的角度看,函数分库函数和自定义函数。(6)(6)函数形式:函数形式:主调函数无数据传送给被调函数主调函数无数据传送给被调函数,可带或不带返回值。可带或不带返回值。主调函数与被调函数间有参数传递主调函数与被调函数间有参数传递,主调函数可将实参主调函数可将实参传送给被调函数的形参传送给被调函数的形参, 被调函数的数据可返回主调函数。被调函数的数据可返回主调函数。 C语言程序设计 第八章第八章 函数函数根据根据(1)(2)(3)可知,逻辑上一个可知,逻辑上一个C语言程序是由函数构语言程序是由函数构成的,
8、成的,C语言程序从主函数开始执行,在主函数中调用其他语言程序从主函数开始执行,在主函数中调用其他函数,这些函数可能又调用别的函数,主函数执行完毕代函数,这些函数可能又调用别的函数,主函数执行完毕代表整个程序结束。而物理上一个程序由一个或者若干个文表整个程序结束。而物理上一个程序由一个或者若干个文件件(源文件源文件)构成,函数分别放置在这些文件中。构成,函数分别放置在这些文件中。8.2 函数定义的一般形式函数定义的一般形式无参函数的定义形式无参函数的定义形式v类型标识符:类型标识符:l用于指定函数带回的值的类型,不写时为用于指定函数带回的值的类型,不写时为int型。型。l不带回值时可以不写。不带
9、回值时可以不写。 C语言程序设计 第八章第八章 函数函数类型标识符类型标识符 函数名函数名()() 说明部分说明部分 语句语句例例 无参函数无参函数 printstar( ) printf(“*n”); 或或 printstar(void ) printf(“*n”); 有参函数定义的一般形式有参函数定义的一般形式 C语言程序设计 第八章第八章 函数函数类型标识符类型标识符 函数名函数名(形式参数表列形式参数表列) 说明部分说明部分 语句语句现代风格现代风格: :例例 有参函数(现代风格)有参函数(现代风格) int max(int x,int y) int z; z=xy?x:y; retu
10、rn(z); 例例 有参函数(现代风格)有参函数(现代风格) int max(int x, y) int z; z=xy?x:y; return(z); 空函数空函数v为扩充功能预留,在主调函数中先占一个位置。为扩充功能预留,在主调函数中先占一个位置。 C语言程序设计 第八章第八章 函数函数类型标识符类型标识符 函数名函数名()() 例例 空函数空函数 dummy( ) 对形参的声明的传统方式对形参的声明的传统方式v即把对形参的声明放在函数定义的下一行即把对形参的声明放在函数定义的下一行类型标识符类型标识符 函数名(形参表)函数名(形参表)形参类型说明形参类型说明 说明部分说明部分 语句语句例
11、例 有参函数(传统风格)有参函数(传统风格) int max(x,y) int x,y; int z; z=xy?x:y; return(z); 8.3 函数参数和函数的值函数参数和函数的值形式参数和实际参数形式参数和实际参数v形式参数:定义函数时函数名后面括号中的变量名形式参数:定义函数时函数名后面括号中的变量名v实际参数:调用函数时函数名后面括号中的表达式实际参数:调用函数时函数名后面括号中的表达式 C语言程序设计 第八章第八章 函数函数例例8.2比较两个数并输出大者比较两个数并输出大者#include void main() int max(int x,int y); int a,b,c
12、; scanf(%d,%d,&a,&b); c=max(a,b); printf(Max is %d,c);max(int x, int y) int z; z=xy?x:y; return(z);形参形参实参实参c=max(a,b);(main 函数)函数)(max 函数)函数)max(int x, int y) int z; z=xy?x:y; return(z); 运行:运行:7,8 Max is 8v几点说明:几点说明:l实参可以是常量、变量或表达式。必须有确定的值。实参可以是常量、变量或表达式。必须有确定的值。当函数调用时,将实参的值传递给形参,若是数组名,当函数调用时,将实参的值传
13、递给形参,若是数组名,则传送的是数组的首地址。则传送的是数组的首地址。 l形参必须指定类型形参必须指定类型l形参与实参形参与实参类型一致,个数相同,顺序相同。类型一致,个数相同,顺序相同。l若形参与实参类型不一致,自动按形参类型转换若形参与实参类型不一致,自动按形参类型转换函数调用转换函数调用转换l形参在函数被调用前不占内存形参在函数被调用前不占内存;函数调用时为形参分配函数调用时为形参分配内存;调用结束,内存释放内存;调用结束,内存释放l实参对形参的数据传送是值传送,也是单向传送,当实参对形参的数据传送是值传送,也是单向传送,当被调函数的形参发生变化时,并不改变主调函数实参被调函数的形参发生
14、变化时,并不改变主调函数实参的值。的值。形、实参占据的是不同的存储单元形、实参占据的是不同的存储单元 C语言程序设计 第八章第八章 函数函数 C语言程序设计 第八章第八章 函数函数例:例:形、实参占据的是不同的存储单元形、实参占据的是不同的存储单元#include void main( ) int a=2,b=3; printf (“a=%d, b=%d n”,a, b); printf(“&a=%x,&b=%xn” ,&a,&b); add(a,b); printf(“a=%d,b=%dn”, a,b); printf(“&a=%x,&b=%xn”, &a,&b); add(int x,in
15、t y) x=x+8; y=y+12; printf(“x=%d,y=%d n”,x,y); printf(“&x=%x,&y=%xn”,&x,&y); 2+8=103+12=1523ffd2ffd4ffd6ffd8xayb运行结果:运行结果: a=2,b=3&a=ffd6,&b=ffd8 x=10,y=15 &x=ffd2,&y=ffd4a=2, b=3&a=ffd6,&b=ffd8函数的返回值函数的返回值v返回语句形式:返回语句形式: return(表达式表达式);或或 return 表达式表达式; v功能:使程序控制从被调用函数返回到调用函数中,功能:使程序控制从被调用函数返回到调用函数
16、中,同时把返值带给调用函数同时把返值带给调用函数v说明:说明:l函数的返回值,必须用函数的返回值,必须用 return 语句带回。语句带回。lreturn 语句只能把一个返值传递给调用函数。语句只能把一个返值传递给调用函数。l函数中可有多个函数中可有多个return语句,语句,执行哪一个由程序执行情况来定。执行哪一个由程序执行情况来定。 if(ab) return(a); else return(b); lreturn 后的值可以是一个表达式,如:后的值可以是一个表达式,如:return(x y ? x : y);l返回值的类型为定义的函数类型,不指定的按整型处理。返回值的类型为定义的函数类型
17、,不指定的按整型处理。如:如: int max(int x, int y) float min(float a,float b) double abc(float d1,float d2) C语言程序设计 第八章第八章 函数函数l若若 return 语句中表达式类型与函数类型不一致,则转语句中表达式类型与函数类型不一致,则转换为函数类型。换为函数类型。l若无若无return语句,遇语句,遇时,自动返回调用函数。时,自动返回调用函数。可能返可能返回一个不确定或无用的值回一个不确定或无用的值 。l无返回值的函数,定义为无返回值的函数,定义为 void 类型。类型。 C语言程序设计 第八章第八章 函
18、数函数 printstar() printf(*);main() int a; a=printstar(); printf(%d,a);例:例:无无return语句,语句,函数带回不确定值函数带回不确定值输出:输出:10void printstar() printf(*);main() int a; a=printstar(); printf(%d,a);编译错误!编译错误! C语言程序设计 第八章第八章 函数函数 void swap(int x,int y ) int temp; temp=x; x=y; y=temp; 例:无返回值函数例:无返回值函数例例8.3: 函数返回值类型转换函数返
19、回值类型转换#include void main() int max(float x,float y); float a,b; int c; scanf(%f,%f,&a,&b); c=max(a,b); printf(Max is %dn,c);max(float x, float y) float z; z=xy?x:y; return(z);输入:输入:1.5,2.5输出:输出:Max is 28.4 函数的调用函数的调用主调函数:主调函数:主动去调用其它函数主动去调用其它函数 被调函数:被其它函数所调用被调函数:被其它函数所调用函数调用的一般形式函数调用的一般形式函数名(实参表列)函数
20、名(实参表列)v说明:说明:l实参表列:有确定值的数据或表达式实参表列:有确定值的数据或表达式l实参与形参实参与形参个数相等,类型一致,按顺序一一对应,个数相等,类型一致,按顺序一一对应,当有多个实参时,实参间用当有多个实参时,实参间用“ ,”分隔分隔l实参表求值顺序,因系统而定(实参表求值顺序,因系统而定(Turbo C 自右向左自右向左)l调用无参函数时,实参表列为空,但调用无参函数时,实参表列为空,但( )不能省不能省 C语言程序设计 第八章第八章 函数函数 C语言程序设计 第八章第八章 函数函数#include void main() int f(int a,int b); int i
21、=2,p; p=f(i,+i); printf(%d,p);int f(int a, int b) int c; if(ab) c=1; else if(a=b) c=0; else c=-1; return(c);例例8.4 参数求值顺序参数求值顺序按自右向左求值按自右向左求值函数调用等于函数调用等于f(3,3)运行结果:运行结果:0按自左向右求值按自左向右求值函数调用等于函数调用等于f(2,3)运行结果:运行结果:- 1为使程序有通用性:为使程序有通用性:Printf(“%d,%d”,i,i+); /*同样存在此情况同样存在此情况*/函数调用的方式函数调用的方式按函数在程序中出现的位置,有
22、三种调用方式:按函数在程序中出现的位置,有三种调用方式:v函数语句:函数语句:以独立的语句去调用函数。以独立的语句去调用函数。 例例 printstar(); printf(“Hello,World!n”);v函数表达式:函数表达式: 函数返回一个确定值,以参加表达式的运算。函数返回一个确定值,以参加表达式的运算。例例 m=max(a,b)*2;v函数参数:函数参数:函数调用作为另一个函数的参数。函数调用作为另一个函数的参数。 例例 printf(“%d”,max(a,b); /*输出大数输出大数*/ m=max(a,max(b,c); /*三数比大小三数比大小*/ C语言程序设计 第八章第八
23、章 函数函数对被调用函数的声明和函数原型对被调用函数的声明和函数原型v对被调用函数要求:对被调用函数要求:l必须是必须是已存在已存在的函数的函数l库函数库函数: #include l用户自定义函数:用户自定义函数:在主调函数中对被调函数作声明。在主调函数中对被调函数作声明。v函数声明函数声明l一般形式:一般形式:函数类型函数类型 函数名函数名(形参类型形参类型 形参名形参名,. ); 或或 函数类型函数类型 函数名函数名();l作用:告诉编译系统作用:告诉编译系统函数类型、参数个数及类型,以便检验函数类型、参数个数及类型,以便检验lC语言中函数声明称为语言中函数声明称为函数原型函数原型。l函数
24、定义函数定义与与函数声明函数声明不同,声明只与函数定义的第一行相同。不同,声明只与函数定义的第一行相同。声明可以不写声明可以不写形参名形参名,只写,只写形参类型形参类型。l函数说明位置:函数说明位置:程序的数据说明部分(函数内或外)程序的数据说明部分(函数内或外) C语言程序设计 第八章第八章 函数函数 C语言程序设计 第八章第八章 函数函数#include void main() float add(float x,float y ); /*对被调用函数的声明对被调用函数的声明*/ float a,b,c; scanf(%f,%f,&a,&b); c=add(a,b); printf(sum
25、 is %f,c);float add(float x, float y) /*函数首部函数首部*/ float z; /*函数体函数体 z=x+y; return(z); float add(float,float);例例8.5 对被调用的函数作声明对被调用的函数作声明输入:输入:3.6 ,6.5输出:输出:sum is 10.100000v说明:说明:l旧版本旧版本C中函数声明不采用函数原型,只声明中函数声明不采用函数原型,只声明函数名函数名和和函数类型函数类型。如:。如: float add( )l函数调用之前,如果未对函数作声明,则编译系统把函数调用之前,如果未对函数作声明,则编译系统
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第8章 函数-精品文档资料整理 函数 精品 文档 资料 整理
限制150内