《C语言程序设计》课件第六章11.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《C语言程序设计》课件第六章11.ppt》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计 语言程序设计 课件 第六 11
- 资源描述:
-
1、函数定义函数定义函数调用函数调用函数参数及函数间的数据传递函数参数及函数间的数据传递数组与函数参数数组与函数参数函数的嵌套与递归函数的嵌套与递归变量的存储属性及作用域变量的存储属性及作用域编译预处理编译预处理 主主 要要 内内 容容函数的分类函数的分类 函数的基本结构函数的基本结构函数的定义函数的定义 基本内容:基本内容:1.1.从用户使用的角度看,函数可分为两种:从用户使用的角度看,函数可分为两种:(1)(1)标准函数标准函数(即库函数即库函数)。例如例如:sin(x):sin(x)、pow(x,y)pow(x,y)、exp(x)exp(x)、fabs(x)fabs(x)(2)(2)用户自定
2、义函数。用户自定义函数。2.2.从函数的作用上看,函数可分为两种:从函数的作用上看,函数可分为两种:(1)(1)完成某种计算并返回一个函数值。完成某种计算并返回一个函数值。(2)(2)完成某种操作不返回函数值。完成某种操作不返回函数值。3.3.从函数的形式上看,函数可分为两种:从函数的形式上看,函数可分为两种:(1)(1)无参函数,即不带参数表的函数。无参函数,即不带参数表的函数。(2)(2)有参函数,即带有参数表的函数。有参函数,即带有参数表的函数。函数的基本结构如下:函数的基本结构如下:存储类型类型说明符函数名存储类型类型说明符函数名(形式参数表形式参数表)形式参数说明;形式参数说明;内部
3、变量说明;内部变量说明;执行语句;执行语句;说明:说明:(1)(1)函数名是函数名是C C语言中任一合法的标识符。语言中任一合法的标识符。(2)(2)形式参数表可以由零个或多个形式参数组成。形式参数表可以由零个或多个形式参数组成。(3)(3)形式参数说明必须在花括号形式参数说明必须在花括号“”之前。之前。(4)(4)函数中最外层花括号括起来的部分称为函数体。函数中最外层花括号括起来的部分称为函数体。(5)(5)按照函数的基本结构可知,按照函数的基本结构可知,C C语言不允许在一个语言不允许在一个 函数内又包含另一个函数,构成程序的多个函函数内又包含另一个函数,构成程序的多个函 数在程序中都是平
4、行的。数在程序中都是平行的。(6)(6)函数返回值的数据类型为该函数的数据类型。函数返回值的数据类型为该函数的数据类型。基本概念:基本概念:函数的定义:是指按照函数的定义:是指按照C C语言所规定的函数基本结语言所规定的函数基本结 构编写一段所需功能的源程序。构编写一段所需功能的源程序。1.1.空函数的定义形式空函数的定义形式 空函数的形式为:空函数的形式为:函数名函数名()()例如:例如:merge()merge()注:空函数是没有任何操作的函数。注:空函数是没有任何操作的函数。2.2.无参函数的定义形式为:无参函数的定义形式为:类型说明符类型说明符 函数名函数名()()void print
5、star()void printstar()内部变量说明;内部变量说明;printf(”printf(”*n”);n”);执行语句;执行语句;printf(”printf(”*n”);n”);printf(”printf(”*n”);n”);打印打印:printf(”:printf(”*n”);n”);*printf(”printf(”*n”);n”);*#include#includestdio.hstdio.h *void main()void main()*printstar();printstar();说明:说明:被调用的无参函数并不是不返回值,而是不被调用的无参函数并不是不返回值,而
6、是不 返回有用的值,通常是一个不确定的值。返回有用的值,通常是一个不确定的值。例如:例如:x=printstar();x=printstar();printf(“%d”,x);printf(“%d”,x);为了表明一个被调用函数不返回值,在函数定义中为了表明一个被调用函数不返回值,在函数定义中可将它定义为可将它定义为“空类型空类型”。其一般形式为。其一般形式为 :void void 函数名函数名()()内容变量说明;内容变量说明;执行语句;执行语句;注:其中 void void 即为“空类型”的函数类 型说明符,void void 又称无类型说明符。为使程序严谨明确,防止错误 调用,凡不要求返
7、回值的无参 函数,一般应定义为“void”类型。3.3.有参函数定义的形式为:有参函数定义的形式为:存储类型存储类型 类型说明符类型说明符 函数名函数名(形式参数形式参数)形式参数说明;形式参数说明;内部变量说明;内部变量说明;执行语句;执行语句;例:例:#include power(int x,int n)#include power(int x,int n)void main()void main()int i,p;int i,p;int n,m,k;p=1;i=1;int n,m,k;p=1;i=1;scanf(scanf(”%d,%d%d,%d”,&m,&n);for(;i=n;i+)
8、,&m,&n);for(;i=n;i+)k=power(m,n);p=p k=power(m,n);p=p*x;x;printf(printf(”%d%d”,k);return(p);,k);return(p);注注:类型说明符省时类型说明符省时,其函数返回值为整型或字其函数返回值为整型或字 符型。符型。函数的调用形式函数的调用形式 函数的调用方式函数的调用方式 对被调用函数的说明对被调用函数的说明基本内容:基本内容:调用函数对被调用函数进行调用调用函数对被调用函数进行调用 一般形式为一般形式为:函数名函数名(实参表实参表);在在C C语言中,调用函数对被调用函数调用时,按函语言中,调用函数对
9、被调用函数调用时,按函数在程序中出现的位置来分,可以有以下三种调用方数在程序中出现的位置来分,可以有以下三种调用方式。式。1.1.函数调用语句由函数调用加上分号构成,函数调用语句由函数调用加上分号构成,在调用函数中可作为在调用函数中可作为 一个独立的语句。一个独立的语句。#include#includestdio.hstdio.h void main()void main()printfstar();printfstar();2.2.函数表达式的一个运算对象函数表达式的一个运算对象 函数调用作为一个运算对象直接出现在一个函数调用作为一个运算对象直接出现在一个表达式中,这时要求函数带回一个确定的
10、值以表达式中,这时要求函数带回一个确定的值以参加表达式的运算,这种表达式称为函数表达参加表达式的运算,这种表达式称为函数表达式。式。例如例如:s=3.14159:s=3.14159*pow(r,2);pow(r,2);3.3.作为函数调用的一个实际参数作为函数调用的一个实际参数 将函数调用放在另一个函数调用的实际参数将函数调用放在另一个函数调用的实际参数表中,以其值作为该函数调用的一个实参,传表中,以其值作为该函数调用的一个实参,传递给被调用函数的形序。递给被调用函数的形序。例如例如:printf(:printf(”%d%d”,power(m,n);,power(m,n);在程序中调用另一个函
11、数时,要满足以在程序中调用另一个函数时,要满足以下三个条件:下三个条件:(1)(1)被调用函数必须存在是函数调用的必被调用函数必须存在是函数调用的必 要条件,这个被调用函数可以是用户要条件,这个被调用函数可以是用户 自定义函数或库函数。自定义函数或库函数。(2)(2)若是库函数,还必须用若是库函数,还必须用#include#include命令命令 将有关库函数所需的信息包含到本文将有关库函数所需的信息包含到本文 件中。件中。例如:例如:#include#include stdio.hstdio.h(3)(3)若是用户自定义的函数,且该函数与调若是用户自定义的函数,且该函数与调 用它的函数用它的
12、函数(即调用函数即调用函数)在同一个源文在同一个源文 件中,则在调用函数中应对被调用函数件中,则在调用函数中应对被调用函数 返回值的类型加以说明。返回值的类型加以说明。这种类型说明的一般形式为:这种类型说明的一般形式为:类型说明符类型说明符 被调用函数名被调用函数名()();其中,类型说明与被调用函数在函数定其中,类型说明与被调用函数在函数定义中的函数类型说明一致。这种说明称为义中的函数类型说明一致。这种说明称为显式说明。显式说明。C C语言允许在以下三种情况下,在调用函数中,可以语言允许在以下三种情况下,在调用函数中,可以不在调用函数前对被调用函数作函数类型说明。不在调用函数前对被调用函数作
13、函数类型说明。(1)(1)当被调用函数返回值是一个整型或字符型数据时,当被调用函数返回值是一个整型或字符型数据时,可以不作说明,系统将自动按整型说明处理。可以不作说明,系统将自动按整型说明处理。(2)(2)当被调用函数的定义当被调用函数的定义(注意,不是函数类型说明注意,不是函数类型说明)在在 调用函数之前,调用函数调用它时,可以对被调用调用函数之前,调用函数调用它时,可以对被调用 函数类型不作说明。因为调用时系统已预先知道了函数类型不作说明。因为调用时系统已预先知道了 它已定义的函数类型,会自动按其类型说明处理。它已定义的函数类型,会自动按其类型说明处理。(3)(3)在文件开头,所有函数定义
14、之前,在函数外部已说在文件开头,所有函数定义之前,在函数外部已说 明了函数类型时,则各个调用函数中可以不对所调明了函数类型时,则各个调用函数中可以不对所调 用的函数再作函数用的函数再作函数 类型说明,但各个被调用函数类型说明,但各个被调用函数 的定义中,仍须对函数类型进行说明。的定义中,仍须对函数类型进行说明。#include#includestdio.hstdio.h char str(char c);char str(char c);float ct(float f);float ct(float f);int gt(ink k);int gt(ink k);void main()floa
15、t ct(float f)void main()float ct(float f).char str(char c)int gt(ink k)char str(char c)int gt(ink k).函数参数函数参数 函数间的数据传递函数间的数据传递 基本内容:基本内容:形式参数和实际参数就是函数参数,它们都是函数形式参数和实际参数就是函数参数,它们都是函数间数据传递的载体。间数据传递的载体。1.1.关于形式参数关于形式参数 凡 出 现 在 函 数 定 义 中 函 数 名 后 圆 括 号 内凡 出 现 在 函 数 定 义 中 函 数 名 后 圆 括 号 内 的参数称为形式参数,形式参数又称为
16、形参或哑元。的参数称为形式参数,形式参数又称为形参或哑元。形参说明的一般形式为:形参说明的一般形式为:形参类型说明符形参类型说明符 形参表;形参表;例如例如:int power(x,n):int power(x,n)int x,n;int x,n;或或 int power(int x,int n)int power(int x,int n)2.2.关于实际参数关于实际参数实际参数实际参数:凡出现在调用语句的函数名后圆括凡出现在调用语句的函数名后圆括 号内的参数,又称为实参或实元。号内的参数,又称为实参或实元。例如例如:y=power(2,3);:y=power(2,3);实际参数实际参数(实参
17、实参):):实参可以是常量、已赋值的变量或表达式实参可以是常量、已赋值的变量或表达式;实参在次序、类型和个数上应与相应形参实参在次序、类型和个数上应与相应形参 表中的形参保持一致。表中的形参保持一致。通常,当需要从调用函数中传值通常,当需要从调用函数中传值(或传地址或传地址)到被调用函数中的形参时,那些变量或值应到被调用函数中的形参时,那些变量或值应作为实参。作为实参。函数间的数据传递有两种情况:函数间的数据传递有两种情况:(一一)实参向形参的传递;实参向形参的传递;(二二)被调用函数向主调用函数的回传。被调用函数向主调用函数的回传。一、实参向形参的数据传递一、实参向形参的数据传递 当调用函数
18、调用有参函数时,通常需当调用函数调用有参函数时,通常需要将实参所包含的数据传递给相应的形要将实参所包含的数据传递给相应的形参。参。实参向形参的数据传递有两种不同的方式实参向形参的数据传递有两种不同的方式:1.1.值传递值传递 当实参是常数、变量、数组元素或可计算的当实参是常数、变量、数组元素或可计算的表达式时表达式时(事实上,常数、变量、数组元素都事实上,常数、变量、数组元素都是简单的表达式是简单的表达式),对应的形参是变量,此时,对应的形参是变量,此时,主调用函数将实参的值传递到为被调用函数,主调用函数将实参的值传递到为被调用函数形参设置的临时变量存储单元中,调用结束形参设置的临时变量存储单
19、元中,调用结束后,形参单元被释放,实参仍保持原值不变。后,形参单元被释放,实参仍保持原值不变。这种只能由实参向形参的数据传递称为这种只能由实参向形参的数据传递称为“值传值传递递”,即单向传递。,即单向传递。#include#includestdio.hstdio.h void main()void main()int f(int a,int b);int f(int a,int b);int x=1,y=2,z;static int a=0,1,2,3,4;int x=1,y=2,z;static int a=0,1,2,3,4;z=f(x,y);z=f(x,y);printf(“z=%d,x
20、=%d,y=%d printf(“z=%d,x=%d,y=%dn”,z,x,y);n”,z,x,y);z=f(a3,a4);z=f(a3,a4);printf(“z=%d,a3=%d,a4=%d printf(“z=%d,a3=%d,a4=%dn,”,z,a3,a4);n,”,z,a3,a4);z=f(x,y+1);z=f(x,y+1);printf(“z=%d,x=%d,y=%d printf(“z=%d,x=%d,y=%dn”,z,x,y);n”,z,x,y);运行结果运行结果:a=3,b=6 a=3,b=6f(int a,int b)z=3,x=1,y=2 f(int a,int b)z
21、=3,x=1,y=2 a=a+2;b=b+4;a=5,b=8 a=a+2;b=b+4;a=5,b=8 printf(“a=%d,b=%d printf(“a=%d,b=%dn”,a,b);z=5,a3=3,a4=4 n”,a,b);z=5,a3=3,a4=4 return(a);a=3,b=7 return(a);a=3,b=7 z=3,x=1,y=2 z=3,x=1,y=22.2.地址传递地址传递 当实参是数组名或指针型变量当实参是数组名或指针型变量(或实参变量地或实参变量地址址)时,实参向形参传递的是地址。时,实参向形参传递的是地址。#include#includestdio.hstdio
22、.h void main()void main()void swap(int void swap(int*x,int x,int*y);y);int a,b;int a,b;scanf(“%d,%d”,&a,&b);scanf(“%d,%d”,&a,&b);if(ab)swap(&a,&b);if(a0)b=sign(a);else if(x0)printf(printf(“b=%db=%dn n”,b);return(1);,b);return(1);else else return(-1);return(-1);#include#includestdio.hstdio.h void mai
23、n()void main()float a,b;float a,b;int max(float x,float y),m;int max(float x,float y),m;scanf(“%f,%f”,&a,&b);scanf(“%f,%f”,&a,&b);m=max(a,b);m=max(a,b);printf(“printf(“n max=%dn max=%dn”,m);n”,m);max(float x,float y)max(float x,float y)float n;float n;n=xy?x:y;n=xy?x:y;return(n);return(n);程序运行结果如下:程
24、序运行结果如下:2.3,4.52.3,4.5 max=4max=4 2.2.利用函数参数的利用函数参数的“地址传递地址传递”返回多个值。返回多个值。#include#include void main()void main()float a,b,c,d,e,f;float a,b,c,d,e,f;float calcu(float x,float y,float float calcu(float x,float y,float*r,float r,float*s,float s,float*t);t);scanf(“%f,%f”,&a,&b);scanf(“%f,%f”,&a,&b);f=c
25、alcu(a,b,&c,&d,&e);f=calcu(a,b,&c,&d,&e);printf(“printf(“n c=%fn c=%fn d=%fn d=%fn e=%fn e=%fn f=%fn f=%fn”,c,d,e,f);n”,c,d,e,f);float calcu(float x,float y,float float calcu(float x,float y,float*r,float r,float*s,float s,float*t)t)*r=x+y;r=x+y;*s=x-y;s=x-y;*t=xt=x*y;y;return(x/y);return(x/y);程序运行结
展开阅读全文