c函数与预处理省公共课一等奖全国赛课获奖课件.pptx
《c函数与预处理省公共课一等奖全国赛课获奖课件.pptx》由会员分享,可在线阅读,更多相关《c函数与预处理省公共课一等奖全国赛课获奖课件.pptx(69页珍藏版)》请在咨信网上搜索。
1、第五章 函数与预处理J函数定义函数定义J函数调用函数调用J指针与函数指针与函数J函数嵌套调用函数嵌套调用J函数递归调用函数递归调用J局部变量和全局变量局部变量和全局变量J变量存放类型变量存放类型第1页5.1.1 函数概念引入函数概念引入#include void main()static int a20=8,12,19,23,33,39,42,55,62,69,76,85;int n=12,i,x;coutThe numbers are:n;for(i=0;in;i+)coutait;cout*n;coutx;for(i=n-1;i=0;i-)if(aix)ai+1=ai;else break
2、;ai+1=x;n+;coutThe numbers are:n;for(i=0;in;i+)coutait;cout*n;第2页函数引入函数引入#include void main()static int a20=8,12,19,23,33,39,42,55,62,69,76,85;int n=12,i,x;arrayprint(a,n);coutx;for(i=n-1;i=0;i-)if(aix)ai+1=ai;else break;ai+1=x;n+;arrayprint(a,n);void arrayprint(int a,int n)coutThe numbers are:n;for
3、(i=0;in;i+)coutait;coutab;s=add(a,b);coutsendl;第4页函数说明函数说明数据类型数据类型数据类型数据类型 函数名函数名函数名函数名(形参列表形参列表形参列表形参列表)double area(double x,double y,double z)double s;if(x+yz|x+zy|y+zab;s=add(a,b);coutsendl;double area(double x,y,z)double s;if(x+yz|x+zy|y+zx)return 0;s=(x+y+z)/2;s=sqrt(s*(s-x)*(s-y)*(s-z);return
4、s;第5页函数体函数体例例1 无参函数无参函数display_sum,用来计,用来计算两个数之和。算两个数之和。#include void display_sum()int x,y,sum;cout Enter a and b:x y;sum=x+y;cout x+y=sum endl;void main()display_sum();由由花花括括号号所所括括起起语语句句序序列列,是是完完成成函函数数功功效效所所要要执执行行详详细细操操作作。当当函函数数执执行行结结束束需需要要返返回回一一个个值值时时,在在这这个函数体中还必须有一个个函数体中还必须有一个return语句。语句。例例2 有有参参
5、函函数数sum,用用于于求求两个数之和。两个数之和。int sum(int x,int y)int temp;temp=x+y;return temp;void main()int s=sum(10,5);cout”sum=”s;第6页 N!三角形面积double power(int n)int i;double l=1;for(i=1;i=n;i+)l*=i;return l;double area(double x,double y,double z)double s;if(x+yz|x+zy|y+zx)return 0;s=(x+y+z)/2;s=sqrt(s*(s-x)*(s-y)*(
6、s-z);return s;第7页5.1.3 return语句语句_语句格式:语句格式:return;/无值无值voidreturn 表示式;表示式;/有值有值return(表示式表示式);/有值有值_函函数数体体中中流流程程控控制制语语句句。先先计计算算表表示示式式值值,然然后后从从被被调调函函数数返返回回到到主主调调函函数数,表表示示式式值值作作为为函函数数返返回回值值。(注注意意:只只能能返返回回一一个个值值)_函函数数值值类类型型:以以函函数数定定义义类类型型为为准准,若若不不一一样样,需需将将return语语句句表示式值转换类型。表示式值转换类型。_无无返返回回值值void时时,可可
7、无无return语语句,执行到函数体句,执行到函数体时返回。时返回。例例 有有参参函函数数sum,用用于于求求两个数之和。两个数之和。int sum(int x,int y)int temp;temp=x+y;return temp;void main()int s=sum(10,5);cout”sum=”s;第8页return语句语句_在在一一个个函函数数中中可可有有多多个个return语语句句,但但每每次次被被调调用用只只能能执执行行一一个个return语语句句。例例,判判断断素素数数(或求三角形面积)(或求三角形面积)#includevoid main()int i;for(i=2;i1
8、00;i+)if(sushu(i)coutti;#includeint sushu(int n)int k,i;k=sqrt(double)n);for(i=2;i=k;i+)if(n%i=0)return 0;return 1;第9页5.1.4 函数申明函数申明_函数原型形式:函数原型形式:数据类型数据类型 被调函数函数名被调函数函数名(形参类型说明形参类型说明);例:例:double area(double,double,double);_参数类型说明列表是用逗号隔开参数类型说明,其参数个数和类参数类型说明列表是用逗号隔开参数类型说明,其参数个数和类型必须和函数定义中参数个数和类型一致。也
9、能够给出参数名,型必须和函数定义中参数个数和类型一致。也能够给出参数名,但对编译器没有什么意义。但对编译器没有什么意义。_函数原型用来说明一个函数返回值类型、参数个数和类型。使编函数原型用来说明一个函数返回值类型、参数个数和类型。使编译器检验该函数被调用正确是否。译器检验该函数被调用正确是否。函数必须先说明后调用。函数必须先说明后调用。_调用库函数时,普通在文件开头用调用库函数时,普通在文件开头用#include 命令将包含该函数命令将包含该函数原型头文件加入到程序中。原型头文件加入到程序中。_调用用户自定义函数,当对一个函数调用出现在该函数定义之前调用用户自定义函数,当对一个函数调用出现在该
10、函数定义之前时,必须先对函数进行原型申明。即当被调函数定义写在主调函时,必须先对函数进行原型申明。即当被调函数定义写在主调函数后面时才需申明。数后面时才需申明。第10页_实实参参表表可可包包含含多多个个参参数数,用用逗逗号号分分开开;可可为为常常量量、变变量量、函函数数调调用用、表表示示式式(先先求求值值,再再将将值值传传递递给形参)。给形参)。_要求实参类型和个数要与形参一致。要求实参类型和个数要与形参一致。_能够没有参数,但圆括号一定要有,不能省略。能够没有参数,但圆括号一定要有,不能省略。_函数调用普通用来组成表示式。函数调用普通用来组成表示式。5.2.1 函数调用形式函数调用形式一、函
11、数调用形式:一、函数调用形式:函数名函数名(实参列表实参列表)5.2 函数调用函数调用t=sqrt(t*(t-a)*(t-b)*(t-c);s=area(a,b,c);s=sum(5,7);例例第11页二、函数调用过程1 1在主调函数中经过函数调用转到被调函数从而开始执行被在主调函数中经过函数调用转到被调函数从而开始执行被在主调函数中经过函数调用转到被调函数从而开始执行被在主调函数中经过函数调用转到被调函数从而开始执行被调函数。调函数。调函数。调函数。2 2执行被调函数时,碰到执行被调函数时,碰到执行被调函数时,碰到执行被调函数时,碰到returnreturn语句或函数体右大括号语句或函数体右
12、大括号语句或函数体右大括号语句或函数体右大括号,则,则,则,则返回主调函数继续执行下面语句。返回主调函数继续执行下面语句。返回主调函数继续执行下面语句。返回主调函数继续执行下面语句。3 3函数间相互独立:函数间相互独立:函数间相互独立:函数间相互独立:各函数中变量互不相关,可同名各函数中变量互不相关,可同名各函数中变量互不相关,可同名各函数中变量互不相关,可同名。主调函数主调函数被调函数被调函数float area(x,y,z)return smain()s=area(a,b,c);实实 参参形形 参参 参数传递?参数传递?参数传递?参数传递?返回值返回值返回值返回值第12页_在在函函数数调调
13、用用时时,按按照照书书写写参参数数先先后后次次序序(与与名名字字无无关关),将实参值,将实参值(先计算先计算)传递给对应形参。传递给对应形参。_要求实参和形参类型和个数要一致。要求实参和形参类型和个数要一致。_实实参参将将值值“单单向向性性”“值值传传递递”给给形形参参。在在被被调调函函数中对形参值修改不会影响到实参。数中对形参值修改不会影响到实参。_当当函函数数未未被被调调用用时时,形形参参不不占占内内存存。当当函函数数被被调调用用时时,为为形形参参分分配配内内存存,并并将将实实参参值值传传递递给给形形参参;函函数调用结束时,释放形参所占存放空间。数调用结束时,释放形参所占存放空间。传值调用
14、:先计算实参值,将实参值传递给形参。传值调用:先计算实参值,将实参值传递给形参。一、传递变量值一、传递变量值5.2.2 函数调用过程函数调用过程编写函数,交换编写函数,交换两个变量值两个变量值练习:练习:编写编写convert函数实现将任意一个正整数逆序,若主函数函数实现将任意一个正整数逆序,若主函数中输入中输入123,调用该函数处理,并将结果,调用该函数处理,并将结果321在主函数中输出。在主函数中输出。第13页_地址传递:地址传递:_引用调用:经过在函数中使用引用参数实现地址传递。引用调用:经过在函数中使用引用参数实现地址传递。_把形参申明为引用方式,在参数名字前加上引用运算符把形参申明为
15、引用方式,在参数名字前加上引用运算符&。引用时给已知变量起一个别名,并不占用存放空间。引用时给已知变量起一个别名,并不占用存放空间。#include void swap(int&x,int&y);void main()int a,b;cinab;swap(a,b);coutabendl;void swap(int&x,int&y)int t=x;x=y;y=t;利用引用传递机制进行参数调用,有两个优点利用引用传递机制进行参数调用,有两个优点利用引用传递机制进行参数调用,有两个优点利用引用传递机制进行参数调用,有两个优点(1)在函数内对形参修改实际是针对实参修改。)在函数内对形参修改实际是针对实
16、参修改。(2)在传递大型数据时,不再有高额内存单元与时间开销。)在传递大型数据时,不再有高额内存单元与时间开销。(3)轻易使用,易于维护)轻易使用,易于维护第14页5.3 指针与函数#includeint fun(int*);void main()int a=8,b;b=fun1(&a);couta=“a“b=“b;int fun1(int*p)int x=4;*p+=x;coutx*p“n”;return*p*x;8abpa=12b=484x48125.3.1 指针变量作为函数参数4 12第15页#includeint fun(int*);void main()int a=8,b;b=fun
17、1(&a);couta=“a“b=“b;int fun1(int*p)int x=4;*p+=x;coutx*p“n”;return*p*x;#includeint fun(int);void main()int a=8,b;b=fun1(a);couta=“a“b=“b;int fun1(int p)int x=4;p+=x;coutxp“n”;return p*x;a=12b=484 12传变量值和地址区分a=8b=484 12第16页swap(int*x,int*y)int t;t=*x;*x=*y;*y=t;#includevoid main()int a,b;a=5;b=9;swap
18、(&a,&b);cout“a=“a“b=“b;swap(int x,int y)int t;t=x;x=y;y=t;#includevoid main()int a,b;a=5;b=9;swap(a,b);cout“a=“a“b=“b;程序程序 1程序程序 2 P141P141例例5.135.13:编写函数实现两数交换:编写函数实现两数交换主调函数主调函数被调函数被调函数实实 参参形形 参参结果有何不一样?结果有何不一样?第17页主调函数主调函数被调函数被调函数includeint swap(int,int);void main()int a,b;a=5;b=9;swap(a,b);cout“
19、a=“a“b=“b;swap(int x,int y)int t;t=x;x=y;y=t;55ab实实 参参形形 参参99xyab程序程序 1xy95第18页主调函数主调函数被调函数被调函数&a实实 参参形形 参参&b*x*yabswap(int*x,int*y)int t;t=*x;*x=*y;*y=t;#includeint swap(int*,int*);void main()int a,b;a=5;b=9;swap(&a,&b);cout“a=”a“b=“b;5ab9程序程序 2xy&b&a95第19页指针变量作为函数参数_指针作为函数参数时,是以变量地址作为实参调用指针作为函数参数时
20、,是以变量地址作为实参调用一个函数,即作为参数传递不是数据本身,而是数一个函数,即作为参数传递不是数据本身,而是数据地址。据地址。_在主调函数中,要以变量存放地址作为实参来调用在主调函数中,要以变量存放地址作为实参来调用另一个函数。另一个函数。_被调用函数形参必须是能够接收地址值指针变量,被调用函数形参必须是能够接收地址值指针变量,而它数据类型应与被传送数据类型保持一致。而它数据类型应与被传送数据类型保持一致。第20页_用用数数组组名名作作实实参参,就就是是将将数数组组首首地地址址传传递递给给形形参参,实实参数组与形参数组占用同一段内存。参数组与形参数组占用同一段内存。_则则在在被被调调函函数
21、数中中对对形形参参数数组组元元素素进进行行赋赋值值,就就是是对对主主调调函函数数实实参参数数组组进进行行操操作作,会会在在函函数数返返回回时时将将对对数数组组修修改结果带回主调函数。改结果带回主调函数。_形参为一维数组名时,元素个数可省。形参为一维数组名时,元素个数可省。_普普通通将将所所处处理理数数组组中中元元素素个个数数也也作作为为形形参参,在在调调用用时时将数组中使用元素个数传递给被调函数。将数组中使用元素个数传递给被调函数。_数组名作实参时,形参也可为指针。数组名作实参时,形参也可为指针。5.3.2 函数调用中数组传递函数调用中数组传递(数组名做函数参数)(数组名做函数参数)第21页#
22、includevoid sort(int),output(int);void main()int a10,i;/*INPUT*/coutnInput data:;for(i=0;iai;output(a);sort(a);output(a);void sort(int x)int i,j,t;for(i=0;i9;i+)for(j=0;jxj+1)t=xj;xj=xj+1;xj+1=t;void output(int x)int i;coutThe datum are:n;for(i=0;i10;i+)coutxi“t”;coutn;数组名作参数例数组名作参数例1-1a0a(形参为数组名)(形
23、参为数组名)(形参为数组名)(形参为数组名)x0 x第22页#include#define SIZE 40void sort(int*),output(int*);void main()int aSIZE,i,n;coutn;for(i=0;iai;output(a,n);sort(a,n);output(a,n);void sort(int x,int n)int i,j,t;for(i=0;in-1;i+)for(j=0;jxj+1)t=xj;xj=xj+1;xj+1=t;void output(int x,int n)int i;coutThe datum are:n;for(i=0;i
24、n;i+)coutxi“t”;coutn;数组名作参数例数组名作参数例1-2(形参包含元素个数)(形参包含元素个数)(形参包含元素个数)(形参包含元素个数)第23页void sort(int*px,int n)int i,j,t;for(i=0;in-1;i+)for(j=0;jpxj+1)t=pxj;pxj=pxj+1;pxj+1=t;void output(int*px,int n)int i;coutThe datum are:n;for(i=0;in;i+)coutpxi“t”;coutn;数组名作参数例数组名作参数例1-3#include#define SIZE 40void mai
25、n()void sort(),output();int aSIZE,i,n;coutn;for(i=0;iai;output(a,n);sort(a,n);output(a,n);(形参为指针变量)(形参为指针变量)(形参为指针变量)(形参为指针变量)第24页总结总结_假如程序是对数组进行处理,应采取地址传递,因假如程序是对数组进行处理,应采取地址传递,因为实参加形参共用同一存放空间。为实参加形参共用同一存放空间。_假如程序希望从函数中返回多个值,形参应申明为假如程序希望从函数中返回多个值,形参应申明为指针或引用。指针或引用。_假如假如 程序希望形成改变能影响到对应形参,形参应程序希望形成改变
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 函数 预处理 公共课 一等奖 全国 获奖 课件
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【a199****6536】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【a199****6536】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。