c语言程序设计(王勇)第7章函数.ppt

上传人:wuy****n92 文档编号:70103922 上传时间:2023-01-16 格式:PPT 页数:14 大小:365KB
返回 下载 相关 举报
c语言程序设计(王勇)第7章函数.ppt_第1页
第1页 / 共14页
c语言程序设计(王勇)第7章函数.ppt_第2页
第2页 / 共14页
点击查看更多>>
资源描述

《c语言程序设计(王勇)第7章函数.ppt》由会员分享,可在线阅读,更多相关《c语言程序设计(王勇)第7章函数.ppt(14页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、一一.C.C函数的分类函数的分类上一页下一页暂 停重 放系统返 回休息第七章第七章 函数函数库函数库函数用户自定义函数用户自定义函数二、二、C C函数的定义函数的定义2.2.定义格式定义格式类型标识符类型标识符 函数名函数名(形式参数表形式参数表)函数体函数体 return return 函数返回值函数返回值 1.1.概念:概念:函数的定义就是编写函数的程序块以实现函数的功能。函数的定义就是编写函数的程序块以实现函数的功能。举例:举例:int max(int x,int y);void main()int a1,a2,a;scanf(“%d,%d”,&a1,&a2);a=max(a1,a2);

2、printf(“最大值:%d”,a);int max(int x,int y)int z;if(xy)z=x;else z=y;return z;练一练练一练3.3.函数定义的外部性函数定义的外部性 函数不能嵌套定义,即一个函数不能定义函数不能嵌套定义,即一个函数不能定义在别的函数内部。也可以说函数是相互独立在别的函数内部。也可以说函数是相互独立的,是相互平行的。的,是相互平行的。三三.C.C 函数的调用函数的调用上一页下一页暂 停重 放系统返 回休息1.1.函数调用的形式函数调用的形式int max(int x,int y);void main()int a1,a2,a;scanf(%d,%

3、d”,&a1,&a2);a=max(a1,a2);printf(“最大值:%d”,a);int max(int x,int y)int z;if(xy)z=x;else z=y;return z;2.2.对被调函数的说明对被调函数的说明 同变量一样,函数的调用同变量一样,函数的调用也应该遵循也应该遵循“先说明,后使先说明,后使用用”的原则。函数的说明形的原则。函数的说明形式就是写出函数的函数头,式就是写出函数的函数头,在其后加上一个分号。在其后加上一个分号。(A A)函数名(参数表);函数名(参数表);(B B)变量变量=函数表达式函数表达式 ;说明格式()说明格式()调用练习3.3.说明位置

4、说明位置:使用之前使用之前上一页下一页暂 停重 放系统返 回休息四、四、C C函数的传值调用函数的传值调用 一般情况下,调用函数时,主调函数与被调函数之间有数据传一般情况下,调用函数时,主调函数与被调函数之间有数据传递关系。主调函数向被调函数传递数据是通过形式传数,而被调递关系。主调函数向被调函数传递数据是通过形式传数,而被调函数向主调函数传递数据是通过函数向主调函数传递数据是通过returnreturn语句实现的。语句实现的。传值调用的方式是:传值调用的方式是:1.形参与实参各占一个独立的存储空间。相互之间互不影响。2.形参的存储空间是在函数调用时才分配的。调用时,系统为形参开辟一个临时空间

5、,然后将实参的值对应地传递给形参,这时形参就得到了实参的值。3.函数返回时,临时存储单元被撤销。4.函数中对形参变量的操作不会影响到调用函数中的实参变量,即形参的值不能传回给实参。这种传值方法称为传值调用。下面我们通过调试一个程序说明这种传值方式:调试调试练习练习上一页下一页暂 停重 放系统返 回休息五、五、C C函数的函数的地址传送地址传送调用调用 传值调用方式传值调用方式,函数只有一个入口函数只有一个入口实参传值给形参,一个出实参传值给形参,一个出口口函数返回值。函数受外界的影响减小到最低限度,从而保函数返回值。函数受外界的影响减小到最低限度,从而保证了函数的独立性。但这种传值方式只能通过

6、证了函数的独立性。但这种传值方式只能通过returnreturn语句返回语句返回一个函数值。若想从被调函数获得多个数据,应该怎么办呢?一个函数值。若想从被调函数获得多个数据,应该怎么办呢?地址传送方式地址传送方式1.1.什么是地址传送什么是地址传送 所谓地址传送是从主调函数向被调函数传递数据时,不是所谓地址传送是从主调函数向被调函数传递数据时,不是将实型数据的值传递给形式参数,而是把变量的地址传给形将实型数据的值传递给形式参数,而是把变量的地址传给形式参数,使形式参数与实际参数共处同一个存储单元。这样式参数,使形式参数与实际参数共处同一个存储单元。这样该存储单元中的任何变化既会影响形式参数,又

7、会影响实际该存储单元中的任何变化既会影响形式参数,又会影响实际参数。参数。上一页下一页暂 停重 放返 回休息2.2.地址传送的描述(以数组的传递为例)地址传送的描述(以数组的传递为例)main()int a3=8,9,10;printf(“na0=%d,a1=%d,a2=%d”,a0,a1,a2);dy(a);printf(“na0=%d,a1=%d,a2=%d”,a0,a1,a2);void dy(int x3)x0=4;x1=5;x2=6;a0a1a2x0 x1x28910456屏幕显示:a0=8,a1=9,a2=10a0=4,a1=5,a2=6ax上一页下一页暂 停重 放系统返 回休息六

8、、函数的嵌套调用六、函数的嵌套调用 C C函数不允许嵌套定义,但允许嵌套调用。函数不允许嵌套定义,但允许嵌套调用。函数的嵌套调用是指在调用一个函数的过程中,该函数又调用另一函数的嵌套调用是指在调用一个函数的过程中,该函数又调用另一个函数。个函数。123456789上一页下一页暂 停重 放系统返 回休息七、函数的递归调用七、函数的递归调用 函数的递归调用是指一个函数在程序运行过程中直接或函数的递归调用是指一个函数在程序运行过程中直接或间接地调用自己。间接地调用自己。直接递归直接递归间接递归间接递归 递归调用的优点是使程序简洁、紧凑。但是,我们在使用递归调递归调用的优点是使程序简洁、紧凑。但是,我

9、们在使用递归调用时,一定要注意避免无穷递归,这就需要设定一个条件,只有在满用时,一定要注意避免无穷递归,这就需要设定一个条件,只有在满足条件时才进行递归调用,否则不再继续。足条件时才进行递归调用,否则不再继续。上一页下一页暂 停重 放系统返 回休息八、程序举例八、程序举例 判断一个数是不是素数判断一个数是不是素数 分析:素数即除其本身及分析:素数即除其本身及1 1以外不能被其他数整除的数以外不能被其他数整除的数 用用2 2n-1n-1的数依次除的数依次除n n,如果有一个能整除就不是素数,如果有一个能整除就不是素数 实际上,只要实际上,只要2 2 就可以了就可以了 int isprime(in

10、t a)isprime(int a)int i;int i;for(i=2;i=sqrt(a);i+)for(i=2;i=sqrt(a);i+)if(a%i=0)return 0;if(a%i=0)return 0;return 1;return 1;上一页下一页暂 停重 放系统返 回休息 验证任意一个偶数是两个素数的和验证任意一个偶数是两个素数的和 分析:设这个数为分析:设这个数为x x 将它分成两个数将它分成两个数 i,x-i i,x-i除的数除的数 i i从从1 1变化到变化到i/2i/2,逐一验证即可,逐一验证即可void even(int x)int i;for(i=2;i=x/2;

11、i+)if(isprime(i)if(isprime(x-i)printf(“%d,%d”,i,x-i);int isprime(int a)isprime(int a)int i;int i;for(i=2;i=sqrt(a);i+)for(i=2;i=sqrt(a);i+)if(a%i=0)return 0;if(a%i=0)return 0;return 1;return 1;上一页下一页暂 停重 放系统返 回休息 分析:可用循环求累加和分析:可用循环求累加和 其中其中x x由由0 0变化到变化到n,n,以次加以次加1 1#define f(x)=((x)*(x)+1)或f(int x)

12、return x*x+1;sum(int x)int x,s=0);for(x=0;x=n;x+)s+=f(x);return s;求求上一页下一页暂 停重 放系统返 回休息 例如梯形法求半径为例如梯形法求半径为r r的圆面积的圆面积其中h为每一步的步长,h=(b-a)/n n为分的段数#define f(x)=(r*r-x*x)sum(int x)int x,s=0);for(x=0;x=a&ch=z)ch=ch-32;return ch;main()char c;while(c=getchar()!=)c=myupper;putchar(c);上一页下一页暂 停重 放系统返 回休息 编写函

13、数统计输入字符的个数,要求按编写函数统计输入字符的个数,要求按ZZ结束结束分析:函数值类型:整型或长整型 结束方法 遇Zint count()int n=0;while(getchar()!=EOF)n+;return ch;main()int n;n=count();printf(“%d”,n);上一页下一页暂 停重 放系统返 回休息 编写函数统计输入输入文本中单词的个数编写函数统计输入输入文本中单词的个数分析:单词以空格、换行符、跳格符分开 但并非遇到这几个符号就是一个单词(有可能连续多个)countword()int c,nw,state;int c,nw,state;state=0;nw=0;state=0;nw=0;while(c=getchar()!=EOF)while(c=getchar()!=EOF)if(c=|c=n|c=t)if(c=|c=n|c=t)state=0;state=0;else if(state=0)else if(state=0)state=1;nw+;state=1;nw+;return nw;return nw;main()int n;n=countword();printf(“%d”,n);

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

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com