c语言程序设计ch7函数的概念

上传人:shaoy****1971 文档编号:115457328 上传时间:2019-11-13 格式:PPT 页数:75 大小:799KB
返回 下载 相关 举报
c语言程序设计ch7函数的概念_第1页
第1页 / 共75页
c语言程序设计ch7函数的概念_第2页
第2页 / 共75页
c语言程序设计ch7函数的概念_第3页
第3页 / 共75页
c语言程序设计ch7函数的概念_第4页
第4页 / 共75页
c语言程序设计ch7函数的概念_第5页
第5页 / 共75页
点击查看更多>>
资源描述

《c语言程序设计ch7函数的概念》由会员分享,可在线阅读,更多相关《c语言程序设计ch7函数的概念(75页珍藏版)》请在金锄头文库上搜索。

1、第七章 函 数,7.1 函数的概念,C 语言程序完全是由函数组成。除语言本身提供的库函数和必须包含的 main 函数外,用户还可以根据需要定义任意多个自己的函数。,main() char ss10 = “12345” ; strcat(ss, “6789”); gets(ss); printf(“%sn”, ss); ,标准 库函数,一、定义格式,7.2 函数的定义和返回值,类型名 函数名(形式参数表) 形式参数说明; 说明语句; 执行语句; ,函数体,int add(x,y) int x,y; int z; z=x+y; return(z); ,二、函数的返回值,return(表达式);,1

2、、常量 2、变量 3、表达式 4、指针值,int add(x,y) int x,y; int z; z=x+y; return(z); ,add (a , b) ;,int add ( x, y ),实际参数,main() int a=100,b=200,c ; c =add(a,b); printf(“c=%dn”, c); int add ( x, y ) int x,y ; int z ; z=x+y; return(z); ,7.3 函数的调用,一、函数调用格式,函数名(实参表) ;,形式参数,二、函数的调用规则,1、调用函数时,函数名必须与调用处的函数名完全一致。,2、实参的个数必须

3、与形参的个数一致。,3、函数必须先定义,后调用。,4、函数可以直接或间接地自己调用自己,称为递归调用。,在调用函数时,一般 在主调函数和被调用函数之间有 信息传递 这是由函数中的参数来完成的。,7.4 调用函数和被调用函数之间的参数传递,实际参数,形式参数,(实参),(形参),地址传递 方式,若利用参数传递信息时 则有两种传递方式,将数据本身作为实参传 递给形式参数。,5,10,5,10,10,10,main() int a=5,b=10, c ; c=max(a,b); printf(“c=%dn”, c); ,实参与形参各占用不同的内存单元,(即形参的值不能传回给实参),main() in

4、t a=5,b=10, c ; printf(“a=%p,b=%pn”, ,练习,main() int a=100,b=200,c ; c =add(a,b); printf(“c=%dn”, c); int add ( x, y ) int x,y ; int z ; z=(+x)+(+y) ; return(z); ,101,201,add (a , b) ;,int add ( x, y ),将数据的存储地址作为实参传递给形参,main() static int a5=1,2,3,4,5,i ; add(a,5); for(i=0;i5;i+) printf(“ %d,”, ai); ,

5、2000 2002 2004 2006 2008,a0 a1 a2 a3 a4,b0 b1 b2 b3 b4,2,3,4,5,6,add ( a , 5 ) ;,int add ( b , n ),1、实参与形参占用相同的内存单元,(即实现了利用参数来返回计算结果的功能),2、可以批量地传递数据,练习,main() static int a34= 1,3,5,7,2,4,6,8,15, 17, 34, 12; printf(“max=%dn “,max(a); max (int b 4) int i , j , t ; t=b00; for(i=0; it) t=bij; return(t);

6、 ,第七章 函 数,P144,main() int a=100 ,c ; func( ,int func( int *p ) int j ; j=*p+100 ; return(j) ; ,从上面的分析中,我们可以得出,使用参数传递地址时,当 对形参作出的任何变动,都将影响实参的变化。所以,利用这个 特性,可以在被调用函数中把它的处理结果送入某个参数的存储 空间,函数返回时,通过参数的地址就会把处理结果带 回调用函数,练习,main() float s10, ave ; int i,n=10 ; for(i=0; in; i+) scanf(“%f ”, ,A) 11 B) 20 C) 21

7、D) 31,请写出下列程序的运行结果,main() int x=6,y=7,z=8,r ; r=f (x-,y+,x+y),z-); printf(“r=%dn”, r); ,C) 21,7.5 函数的递归调用,递归函数的典型例子是 计算阶乘 的函数,首先我们来分析一下阶乘计算的公式,并从中找出 递归算法和终结条件,n!=1X2X3XXn,=nX(n-1) XX3X2X1,=nX(n-1)!,1!=1,因此, 要想计算出n!,必须计算出 (n-1)!; 计算出 (n-1)!, 必 须计算出(n-2)!; ;由此类推,直到推到 1!=1,返回后即可依次计 算出 2!,3!, (n-1)!, n!

8、 。,4!=4X 3!,f(n)=nX f(n-1) f(1)=1,例如,计算4!,其递归过程是:,3!=3X 2!,2!=2X 1!,1!=1,1!=1 2!=2X 1! =2 3!=3X 2! =3X2 =6 4!=4X 3! =4X6 =24,根据上面的分析我们知道,阶乘计算 的递归算法可归纳如下:,f(n)=nX f(n-1) f(1)=1,main() int t; t=fun(4); printf(“%dn”, t); ,4!,fun(4),第七章 函 数,P111,int f(x) int x ; int y, z ; z =f(y) ; return(2*z) ; ,直接调用,

9、间接调用,递归函数的调用可分为,int f1(x) int x ; int y, z ; z =f2(y) ; return(2*z) ; ,int f2(t) int t ; int a, c ; c =f1(a) ; return(3+c) ; ,练习,age(5) =16+2=18,age(4) =14+2=16,age(3) =12+2=14,age(2) =10+2=12,设 age 表示年龄,则有如下:,age(5) =age(4)+2,age(4) =age(3)+2,age(3) =age(2)+2,age(2) =age(1)+2,age(1) =10,main() prin

10、tf(“%d”, age(5); ,age(5),练习,main() int x=4 ; float sum; sum=fac(x); printf(“%dn”,sum); ,fac(4),作业,int w=3; (97.9) main() int w=10; printf(“%dn”, fun(5)*w); ,fun(5),3*2=6,6*3=18,18*4=72,72*5=360,fun(5)*w,360*10=3600,作业,main() printf(“%dn”, fun(9); ,fun(9),p=3-3=0,作业,main() int a,b,c; a=165; b=65; c=m

11、ult(a,b); printf(“%d*%d=%dn”, a,b,c); ,作业,main() printf(“%5d n”, fun(4); ,作业,main() int x,a =2,3,4,5,6,7,8,9; x=f(a,3); printf(“%d n”, x); ,请阅读以下函数并指出该函数的功能,4,作业,fun(char s ,char t ) int i=-1 ; while(+i,si=ti ,作业,main() int x=2,i,k; for(i=0;i2;i+) k=f(a+); printf(“%d n”, k); ,7.6 变量的使用范围与存储类型,3、变量的使

12、用范围及其说明方法,4、变量的存储类别及其定义方法,变量的使用范围包括有 在一个函数内部使用的变量- 局部变量; 在 函 数 之 外部 使用的变量- 全局变量;,main() int a, b ; ,1、局部变量,在一个函数内部定义的变量称为局部变量,局部变量,局部变量,1、主函数中定义的变量也只用在主函数中有效;,2、不同函数中可以使用相同的变量名,且它们代 表不同的存储单元,互不干扰;,3、形式参数也是局部变量。其它函数是不能调用 该形参的;,4、在一个函数内部,可以在复合语句中定义变量 ,这些变量只能在本复合语句中有效。,main() int x=1; int x=2; int x=3;

13、 printf(“x1=%dn”, x); printf(“x2=%dn”, x); printf(“x3=%dn”, x); ,char c1,c2; int p=1,q=5; main() int a, b ; a=p; b=q; ,2、全局变量,在函数之外定义的变量 称为 全局变量 全局变量可以为本文件中其它函数所共用。 它的使用范围: 从定义变量的位置开始到本源程序文件结束,全局变量,举例,int a=13, b=-8; main() int m ; m=max(a,b); printf(“m=%dn”, m); ,举例,int a=3, b=5; main() int a=8,m ;

14、 m=max(a,b); printf(“m=%dn”, m); ,1、若在同一个源文件中,如有全局变量与局部 变量同名时,则在局部变量的作用范围内, 全局变量不起作用。,2、设置全局变量的作用是: 增加函数间数据联系的渠道。,由于同一个文件中的所有函数都能引用全局变量的值,因 此如果在一个函数中改变了全局变量的值,就能影响到其它函 数,相当于各个函数间有直接的传递通道。,float max,min; main() float ave, s5; int i ; for(i=0;i5;i+) scanf(“%f ”,si); ave=fun(s, 5); printf(“max=%f,min=%

15、f, ave=%f n”, max,min,ave); ,全局变量,s0 s1 s2 s3 s4,a0 a1 a2 a3 a4,88,76,90,65,68,88,88,76,68,90,65,练习,int d=1; main() int a=3; fun(a); d+=a+; printf(“%dn”, d); ,8,4,8,4,4,练习,int x,y; main() int a=7,b=5; x=a+b; y=a-b; num( ); printf(“x=%d,y=%dn”, x,y); ,5,12,2,25,在C语言中,每一个变量和函数有两个属性:数据类型和数据的存储类别。 数据类型,如整型、实型等; 存储类别,指的是数据在计算机中的存储方式, 也可以说数据的 存储地点。,内存 储 器 (memory),寄 存 器 (CPU),数 据 区(动态),数 据 区(静态),内存

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

当前位置:首页 > 中学教育 > 职业教育

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