




已阅读5页,还剩49页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
精选,1,第7章函数,精选,2,引例,求阶乘n!,inti,n;floatfac=1;printf(n=);scanf(%d,精选,3,引例,求任意3个正整数的阶乘的和a!+b!+c!,fa=1;for(i=1;i=a;i+)fa=fa*i;fb=1;for(i=1;i=b;i+)fb=fb*i;fc=1;for(i=1;i=c;i+)fc=fc*i;printf(%d!+%d!+%d!=%.0f,a,b,c,fa+fb+fc);,精选,4,引例,求任意3个正整数的阶乘的和a!+b!+c!,#includestdio.hintmain()floatfactorial(intn);inta,b,c;floatsum;printf(a=);scanf(%d,floatfactorial(intn)inti;floatfac;fac=1;for(i=1;iy)z=x;elsez=y;returnz;,程序必备的main函数,有返回值的函数,精选,8,函数的概念,上述问题也可只用一个main函数实现intmain()inta,b,c;scanf(%d,%d,精选,9,函数的概念,intmain()voidstars();stars();printf(Hello!n);stars();printf(Bye!n);stars();return0;,voidstars()inti;for(i=1;i=8;i+)printf(*);printf(n);,无返回值的函数,精选,10,函数的概念,intmain()voidstars(intn);intn=20;stars(10);printf(Hello!n);stars(5);printf(Bye!n);stars(n);return0;,voidstars(intn)inti;for(i=1;iy)z=x;elsez=y;returnz;,精选,21,函数的参数,形式参数和实际参数,形参在函数调用时分配内存单元,调用结束后释放;实参可以是常量、变量、表达式实参与形参的数目、类型应一致C语言中,实参向形参传递其值“值传递”,不传递地址,形参值变化不影响实参,精选,22,函数的返回值,通过函数体return语句中的表达式值获得,例如:intmax(intx,inty)returnxy?x:y;无返回值的函数可省略return语句函数执行到return语句结束,精选,23,关于例题和习题,通过本章例题、习题,不仅要掌握函数定义和调用的语法,也要掌握更多算法和编程技巧。正如学习语文、英语要大量阅读一样,学习计算机语言也要阅读例题,掌握一些基本的编程思路、技巧和表达,才可能对新的问题较快地找到解决方法;同时要多了解语法规则相当于认字。另外,还应对计算机的工作原理和方式多一些了解。,精选,24,例:最大公约数函数和最小公倍数函数,求最大公约数的算法:从1开始,逐个找公约数,直至两数中较小的一个;辗转求余(循环结构实验指导有流程图);.求最小公倍数的算法:从两数中较大的一个开始,由小到大找公倍数,直至找到;两数的乘积/两数的最大公约数。,精选,25,函数的嵌套调用,调用最小公倍数函数(两数乘积/两数的最大公约数),当中需要调用最大公倍数函数函数的嵌套调用:在一个被调用的函数中调用另一个函数例:P183例7.5,精选,26,函数的递归调用,概念:在一个被调用的函数中直接或间接地调用函数本身,精选,27,函数的递归调用,递归的另一个典型实例汉诺塔(P.189例7.8),算法讲解,精选,28,数组作为函数的参数,两个完全不同的概念以数组元素作为函数的参数实参是数组元素,对应的形参是变量以数组名作为函数的参数实参和形参都是数组名,精选,29,数组元素作为函数的参数,数组元素作为实参形参是普通变量,值传递,intmain()inta11,i;floatfac(intn);for(i=1;i=10;i+)ai=i;printf(%d!=%.0fn,ai,fac(ai);return0;,floatfac(intn)floatt=1;inti;for(i=1;i=n;i+)t=t*i;returnt;,等价于普通变量,精选,30,数组作为函数的参数,以数组名作为函数的参数实参向形参传递首元素地址,intmain()intmax(inta,intn);intx6,i;for(i=0;i=5;i+)scanf(%d,intmax(inta,intn)intm,i;m=a0;for(i=1;im)m=ai;returnm;,实参为数组名,形参为数组,不指定大小,精选,31,数组作为函数的参数,以数组名作为函数的参数注意事项,形参和实参都是数组名,类型要一致;形参中不指定数组大小,指定无实际作用;形参数组名获得实参首元素的地址,即形参第一个元素与实参第一个元素占用相同的地址这就是“地址传递”方式,形参值改变会引起实参值的变化为了使形参获得实参数组的大小(元素个数),通常在形参和实参对应地增加一个数值型的参数,精选,32,数组作为函数的参数,以数组名作为函数的参数,考虑:如何写一个排序函数?,精选,33,多个函数组成的程序中变量引用的一些规则,精选,34,C应用程序的构成,应用程序,源程序文件1,函数1,函数2,函数3,源程序文件2,函数1,函数2,精选,35,变量作用域局部变量和全局变量,局部变量只在一个函数内或只在一个复合语句内有效的变量(“花括号内有效”)全局变量(外部变量)在一个模块内多个函数中均有效扩展的外部变量在多个程序文件的函数中有效(extern),精选,36,变量作用域局部变量和全局变量,局部变量函数内定义,只在该函数有效,#includeintmain()inta,b,c;.floatfac(intn)floatt=0;.returnt;,主函数中不存在变量n和t,fac函数中不存在变量a和b,精选,37,变量作用域局部变量和全局变量,局部变量复合语句内定义,只在语句内有效,编译错误:变量k未定义,intmain()inti;for(i=0;i=10;i+)intk;k=i*2;printf(%dn,k);printf(%dn,i);printf(%dn,k);,精选,38,变量作用域局部变量和全局变量,局部变量在函数内定义,只在该函数内有效在复合语句内定义,只在该语句内有效形式参数也是局部变量,只在函数内有效,精选,39,变量作用域局部变量和全局变量,全局变量在函数外定义,在其后的多个函数中均有效,#includeintA,B,C;intmain()intX,Y;floatf1(intn)intf2(),精选,40,变量作用域局部变量和全局变量,全局变量例:,#includeintA,B,C;intmain()intf1(intn);voidf2();printf(%dn,f1(3);printf(main:%dn,A);A=88;f2();,intf1(intn)intm;m=n*n;A=n*n*n;returnm;voidf2()printf(f2:%dn,A);,精选,41,变量作用域局部变量和全局变量,扩展的外部变量在多个程序文件的函数中有效(见7.9.3节),在程序中可以调用其他文件中的函数(外部函数)可通过全局变量在函数间传递多个数据,精选,42,变量作用域局部变量和全局变量,判断下面程序的运行结果:,#includeinta,b,n;intmain()voidf1(intn);a=18;b=100;n=20;printf(main:a=%d,b=%d;n=%dn,a,b,n);f1(50);voidf1(intn)floata=13.89;printf(f1:a=%f,b=%d;n=%dn,a,b,n);,精选,43,变量作用域局部变量和全局变量,关于全局变量应用的说明,全局变量命名时通常首字母大写通过使用全局变量,使函数能够传递实参-形参和返回值之外的其他数据滥用全局变量会造成系统资源占用,降低函数可移植性和程序的清晰度(P.202-203)在函数中定义了与外部变量(全局变量)同名的局部变量时,外部变量被屏蔽,精选,44,变量的存储方式和生存期,动态存储(自动变量,形式参数)临时、动态地分配存储单元静态存储(全局变量,静态局部变量)程序运行整个过程中都存在,精选,45,局部变量的存储方式和生存期,自动局部变量(auto):函数中定义的变量和形参。函数被调用时动态分配存储空间,调用结束时释放。默认方式。静态局部变量(static):函数中加static定义的变量,编译时赋初值,调用结束时保留存储空间和当前值。P.206-207说明。寄存器变量(register):保存在CPU中,现已少用。,精选,46,全局变量的存储方式和生存期,均为静态存储在同一文件定义点之前引用全局变量引用前使用extern声明引用另一文件中的全局变量引用前使用extern声明限制全局变量的作用域在本文件中定义时增加static声明,精选,47,“定义”与“声明”的区分,精选,48,函数的“定义”和“声明”,#includeintmain()intf1(int);intf2();.a=f1(5)+f2();,intf1(intn).intf2().,函数声明(函数原型)确定要调用函数的名称、参数类型,函数调用,运行函数代码,精选,49,变量的“定义”与“声明”,#includeintmain()inta,b,c;/*定义性声明建立存储空间*/externX;/*非定义性声明不建立存储空间*/.intX;/*定义性声明建立存储空间*/intf1(),精选,50,函数的作用域问题,精选,51,内部函数和外部函数,内部函数只能在本文件中被调用,加static定义外部函数可供其他文件中的函数调用,加extern定义(或默认)。在调用前加extern声明(亦可省略extern)#include命令的实质是统一地声明调用库函数(一组已定义的外部函数),精选,52,多个源文件的程序操作步骤,精选,53,如何使多个文件中的变量、函数协同工作?(见补充材料),将它们组织
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 保险销售流程培训
- 小学禁毒安全教育主题班会记录
- 职业病诊断讲解
- 集团安全培训课件
- 城市污水管网建设工程申请报告
- 2025年扎口机项目建议书
- 五年级上册珍珠鸟教学设计
- 五年级家乡的美景500字作文
- 《GBT3367.2-2018内燃机车词汇第2部分:柴油机》深度解析
- 城市黑臭水体治理实施方案中的水环境治理工程招投标研究报告
- JGJ106-2014 建筑基桩检测技术规范
- 2023年中国石化河北石家庄石油分公司社会招聘20人笔试模拟试题及答案解析
- 太阳能热水系统设计
- 医务科岗前培训
- 共青团团课主题班会课件PPT模板PPT
- GB/T 8685-2008纺织品维护标签规范符号法
- 合成氨行业发展现状及趋势分析
- 2022年徐闻县(中小学、幼儿园)教师招聘笔试试题及答案解析
- 网电部管理重点(中)
- 新生儿复苏解析课件
- ABI7500荧光定量PCR仪标准操作规程
评论
0/150
提交评论