c语言程序设计函数省公共课一等奖全国赛课获奖课件.pptx
《c语言程序设计函数省公共课一等奖全国赛课获奖课件.pptx》由会员分享,可在线阅读,更多相关《c语言程序设计函数省公共课一等奖全国赛课获奖课件.pptx(75页珍藏版)》请在咨信网上搜索。
1、第6章 函 数通常,我们将相对独立,经常使用功效抽象为函数。函数包含库函数和用户自定义函数。C语言是经过函数来实现模块化程序设计。所以较大C语言应用程序,往往是由多个函数组成,即一个主函数和若干个子函数组成,每个函数分别对应各自功效模块。6.1 函数定义函数定义6.2 函数函数参数参数6.3 函数类型函数类型6.4 函数调用函数调用6.5 局部变量与局部变量与全局变量全局变量6.6 变量存放属性变量存放属性 6.7 内部函数与内部函数与外部函数外部函数第1页6.1 函数及其定义函数及其定义在程序设计过程中,通常将一个复杂人物划分为多个功效单一子任务,并用函数实现这些任务。调用其它函数函数称为主
2、调函数,被其它函数调用函数称为被调函数。主函数调用其它函数,其它函数之间也能够相互调用,同一个函数能够被一个或多个函数调用屡次。任何函数(包含主函数main())都是由函数说明和函数体两部分组成。例:函数调用main()func1();/调用func1函数/printf(“1,hello”);/调用printf函数/func1()/func1函数定义/func2();/调用func1函数/printf(“2,hello”);/调用printf函数/func2()/func1函数定义/printf(“3,hello”);/调用printf函数/6.1.1函数概述函数概述第2页6.1.2函数定义依
3、据函数是否需要参数,可将函数分为无参函数和有参函数两种。有参函数:主调函数与被调函数之间有数据传递关系。(如字符串处理函数)无参函数:普通用来执行一组操作,能够不带回函数值。(如max函数)(1)无参函数普通形式)无参函数普通形式函数类型函数名()说明语句部分;可执行语句部分;例:前面函数调用例子中func1和func2函数。注意注意:在旧标准中,函数能够缺省参数表。但在新标准中,函数不可缺省参数表;假如不需要参数,则用“void”表示,主函数main()例外。第3页(2)有参函数普通形式)有参函数普通形式形式1:函数类型函数名(数据类型参数1,数据类型参数2)说明语句部分;可执行语句部分;例
4、:doubleadd(doublex,doubley)doublez;z=x+y;return(z);这是一个用户自定义求和函数。x和y是形参,经过return(z)来实现向调用它函数返回add函数结果。第4页形式2:函数类型函数名(参数1,参数2)数据类型参数1;数据类型参数2;.说明语句部分;可执行语句部分;例:doubleadd(x,y)doublex,y;doublez;z=x+y;return(z);有参函数比无参函数多了一个参数表。调用有参函数时,调用函数将赋予这些参数实际值。为了与调用函数提供实际参数区分开,将函数定义中参数表称为形式参数表,简称形参表。第5页关于函数定义说明:1
5、.函数定义不允许嵌套函数定义不允许嵌套。在语言中,全部函数(包含主函数main())都是平行。一个函数定义,能够放在程序中任意位置,主函数main()之前或之后。但在一个函数函数体内,不能再定义另一个函数,即不能嵌套定义。main函数不能调用.2.类型说明符要求了函数类型,既函数返回值类型。它能够是任何简单类型,如整型,字符型,双精度型和指针型。函数返回值需要返回给主调函数处理,由return语句给出,如:return1。注意:对于不返回任何值函数最好说明其类型为void,这么能够增强编译器核查能力。3.函数名是一个程序员任意选择,满足c语言语法标识符。4.c程序执行从main函数开始,调用其
6、它函数后流程回到main函数,在main函数中结束整个程序运行.main函数是系统定义.第6页4.形式参数表中形参是用户自定义变量。形参个数多于一个,中间用逗号隔开,假如函数没有形参,则称为“无参函数”,定义无参函数小括号不能省略。形式参数作用是实现主调函数和被调函数联络,通常将函数所处理数据,影响函数功效原因作为形式参数。5.函数体包含函数申明后一对花括号中。在没有特殊说明时,函数体内定义变量均为局部变量,他们只在本函数执行时有定义,所以,不一样函数中局部变量能够同名,互不干扰。即使函数体中没有语句,花括号一样不能省。没有说明语句和执行语句函数称为空函数。例:voidfunc1();程序设计
7、中第一阶段只设计最基本模块,其它一些次要功效则在以后需要时补上.在程序编写开始阶段,能够在未来准备扩充功效地方写上一个空函数,表示先占一个位置,以后用一个编好程序代替它,这么程序结构清楚,以后扩充新功效方便,对程序结构影响不大.第7页案例7.1定义一个函数,用于求两个数中大数。/*功效:定义一个求较大数函数并在主函数中调用*/intmax(intn1,intn2)/*定义一个函数max()*/return(n1n2?n1:n2);main()intmax(intn1,intn2);/*函数说明*/intnum1,num2;printf(inputtwonumbers:n);scanf(%d%d
8、,&num1,&num2);printf(max=%dn,max(num1,num2);getch();/*使程序暂停,按任一键继续*/程序演示第8页6.2 函数参数函数参数6.2.1 形式参数与实在参数形式参数与实在参数1.形式参数与实在参数概念函数参数分为形参形参和实参实参两种,作用是实现数据传送。定义函数时参数称为形参。形参出现在函数定义中,只能在该函数体内使用。调用函数时参数称为实在参数。函数形式参数与实在参数能够是c语言允许任何类型。2.形式参数与实在参数结合C语言中,主调函数和被调函数之间是数据传递关系。被调函数未被调用时,被调函数形参没有实际值,并不占有内存空间。发生函数调用时,
9、才为形参分配存放单元,实参加形参结合。调用函数把实参值复制1份,传送给被调用函数形参,从而实现主调函数向被调用函数数据传送。实参加形参类型,个数必须相符。实参加形参结合方式有单向值传递和双向地址传递。第9页6.2.2实参加形参之间单向数值传递实参加形参之间单向数值传递当常量,变量或不表示式作为实参时,对应形参应是同类型变量。当发生函数调用时,形参被分配内存空间,实参将值传递给形参,这个过程是单向值传递。形参取得值之后,便与实参脱离关系,所以,形参改变不会影响到实参。例:从键盘输入两个整数,交换次序后输出voidswap(intx,inty)intz;z=x;x=y;y=z;main()inta
10、=4,b=8;swap(a,b);printf(“a=%2d,b=%2d”,a,b);运行结果:a=4,b=8第10页函数swap中,x和y为形参,类型为int型。主调函数中用swap(a,b);来调用该函数,a,b为实参,类型一样int型,实参加形参个数类型都一致.函数调用时,采取是单向值传递.形参x取a值4,y取b值8.x与y发生交换,形参发生交换却对实参a,b不起作用,函数调用结束后,回到main函数,a,b值仍为4和8.ababxyxy44884884第11页例:数组元素作为函数参数两个数组array1,array2,各有8个元素,将他们逐一相加,结果依然保留在array1中,程序以下
11、:main()intarray18,array28;int8;printf(“enterarray1:n”);for(i=0;i8;i+)scanf(“%d”,&array1i);printf(“enterarray2:n”);for(i=0;i8;i+)scanf(“%d”,&array2i);for(i=0;i8;i+)array1i=sum(array1i,array2i)/*调用sum函数*/for(i=0;i=1;i-)n=n+i;/*改变形参值*/printf(n_x=%dn,n);/*输出改变后形参值*/第14页说明:(1)实参能够是常量、变量、表示式、函数等。不论实参是何种类型
12、量,在进行函数调用时,它们都必须含有确定值,方便把这些值传送给形参。所以,应预先用赋值、输入等方法,使实参取得确定值。(2)形参变量只有在被调用时,才分配内存单元;调用结束时,即刻释放所分配内存单元。所以,形参只有在该函数内有效。调用结束,返回调用函数后,则不能再使用该形参变量。(3)实参对形参数据传送是单向,即只能把实参值传送给形参,而不能把形参值反向地传送给实参。(4)实参和形参占用不一样内存单元,即使同名也互不影响。第15页6.2.3地址传递方式值调用是单向传递,形参改变对实参不起任何作用,若要在子函数中对形参更改能对实参有效,可采取地址传递方式,即实参加形参指向同一段地址单元,经过传递
13、一个地址值方法来到达修改实参变量目标,被调用函数依据地址将数据写入对应存放单元.1.当变量地址值或指针变量作为实参,对应形参是同类型指针变量,2.当一维数组名做实参时,对应形参应是与其类型一致指针变量,能够有以下3种表示方式:设有:main()intx10;fun(x);/一维数组名做实参/第16页1)形参定义成一个一维数组:fun(inta10)或fun(a)inta10;2)形参定义成可变一维数组:fun(inta)或fun(a)inta;3)形参定义成指针变量:fun(int*p)或fun(p)int*p;3.当二维数组名做实参时,与一维数组名做实参相同,对应形参也必须是其类型相同指针类
14、型,一样有3种表示方式第17页设有:main()intx34;disp(x);1)形参定义成一个二维数组:disp(intnum34)或disp(num)intnum34;2)形参定义成第一维可变二维数组:disp(intnum4)或disp(num)intnum4;3)形参定义成指针变量:disp(int(*num)4)或disp(num)int(*num)34;第18页4.多维数组名作为函数参数与前述大致相同5.字符串作为实参,对应形参实类型为字符指针变量.因为字符串常量被隐含处理成无名字符型一维数组,传送该字符串首地址;字符串变量实际就是字符型一维数组,所以字符串做实参情况与一维数组名做
15、实参时相同.6.函数名或指向函数指针做实参,对应形参应为指向同类型函数指针,这时传递是函数入口地址.下面分别举例下面分别举例:例:编写程序,用函数实现统计成绩为80到89个分值学生人数(使用负数结束输入)#defineN40Fun(intarray,intnum10,intn)intk,t;for(k=0;k10;k+)numk=0;/数组num存放个分值人数,首先清0/for(k=0;k=80&a=89)scorei=a;i+;/数组s用来存放原始分数/fun(score,n,i);for(i=0;in2?n1:n2);第23页注意以下几个情况:1.若被调用函数定义在主调函数之后出现,就必须
16、在主调函数中对被调用函数加以说明,反之,则无需说明.因为在调用之前,编译系统已经知道了被调用函数函数类型、参数个数、类型和次序。例:intmax(intn1,intn2)/*定义一个函数max()*/return(n1n2?n1:n2);main()intnum1,num2;printf(inputtwonumbers:n);scanf(%d%d,&num1,&num2);printf(max=%dn,max(num1,num2);getch();/*使程序暂停,按任一键继续*/被调函数max置于主调函数main之前,则在主调函数中无需对max进行说明.第24页2.若被调用函数函数和调用函数不
17、在同一编译单位,则应按上述方式进行函数说明.3.若被调用函数函数值是整型或字符型,则可省略类型说明.4.若在全部函数之前申明了函数类型,则该函数原型在本程序文件中任何地方都有效.假如在全部函数定义之前,在函数外部(比如文件开始处)预先对各个函数进行了说明,则在调用函数中可缺省对被调用函数说明。floatf1();/函数类型说明/floatf2();/函数类型说明/.main()./无须进行函数类型说明/f1(x,y);/函数f1调用/f2(x,y);/函数f2调用/floatf1(inta,intb);/函数f1定义/floatf1(inta,intb);/函数f2定义/.第25页6.3.2返
18、回语句有参函数返回值,是经过函数中return语句来取得。(1)return语句普通格式:return(返回值表示式);或return;return返回值表示式;(2)return语句功效:返回调用函数,并将“返回值表示式”值带给调用函数。注意注意:调用函数中无return语句,并不是不返回一个值,而是一个不确定值。为了明确表示不返回值,能够用“void”定义成“无(空)类型”。第26页说明:1.一个函数中能够有多个return语句,但调用一次函数时只能执行其中一个.当执行到某个return语句时,程序控制流程返回主调函数,并将return语句中表示式值作为函数值带回.2.若函数体内没有ret
19、urn语句,就一直执行到函数体末尾,然后返回主调函数,这时也有一个不确定函数值被带回.此时,普通是经过指针或外部(全局)变量来进行数据传递.使用没有表示式return语句函数必须是void类型.3.若确定不要求带回函数值,则应将函数定义为void型,这么,禁止在主调函数中使用被调函数返回值.4.return语句中表示式类型应与函数申明类型一致.不一致时,则以函数类型为准,对于数值型数据,进行自动类型转换,即:函数类型决定返回值类型.假如缺省函数类型,则系统一律按整型处理。良好程序设计习惯良好程序设计习惯:为了使程序含有良好可读性并降低犯错,凡不要求返回值函数都应定义为空类型;即使函数类型为整型
20、,也不使用系统缺省处理。第27页6.4 函数调用函数调用 6.4.1函数调用普通形式函数调用普通形式在程序中,是经过对函数调用来执行函数体,其过程与其它语言子程序调用相同。1.调用子函数普通形式:语言中,函数调用普通形式为:函数名函数名(实际参数表实际参数表)切切记记:实参表中参数多于一个时,各参数之间用逗号隔开,实参个数、类型和次序,应该与被调用函数所要求参数个数、类型和次序一致,才能正确地进行数据传递。不然编译程序并不报错,但最终止果是错误。例:分析下面例子执行结果main()intx10;intyx;printf(”%d,%d”,(x+,y),y+);分析:在printf函数输出前,x1
21、1,y10。尽管printf函数输出是从左至右,但c语言计算函数参数次序是自右向左,所以,y值是10,计算y后值为11,表示式(x,y)值是11第28页2.函数调用方式在语言中,能够用以下几个方式调用函数:(1)函数表示式函数表示式。函数作为表示式一项,出现在表示式中,以函数返回值参加表示式运算。这种方式要求函数是有返回值。例:ypower(2,3);(2)函数语句)函数语句。C语言中函数能够只进行一些操作而不返回函数值,这时函数调用可作为一条独立语句。例:func1();/调用自定义函数/printf(”d”,a);/调用标准函数/(3)函数实参函数实参。函数作为另一个函数调用实际参数出现。
22、这种情况是把该函数返回值作为实参进行传送,所以要求该函数必须是有返回值。例:ypow(5,pow(4,3);第29页说明说明:(1)调用函数时,函数名称必须与含有该功效自定义函数名称完全一致。(2)实参在类型上按次序与形参,必须一一对应和匹配。假如类型不匹配,C编译程序将按赋值兼容规则进行转换。假如实参和形参类型不赋值兼容,通常并不给出犯错信息,且程序依然继续执行,只是得不到正确结果。(3)假如实参表中包含多个参数,对实参求值次序随系统而异。有系统按自左向右次序求实参值,有系统则相反。TurboC和MSC是按自右向左次序进行。第30页3.函数调用执行过程一个c语言源程序经过编译后,生成可执行代
23、码,形成exe可执行文件。存放在外存放器上(硬盘,软盘等)。当程序被开启时,首先从外存将程序代码装入内存,从主函数main起始处开始执行,若在程序执行过程中出现了对其它函数调用,则暂停当前途序执行,保留下一条指令地址(既返回地址),保留现场,然后转到被调函数入口地址执行被调函数,当被调函数结束或碰到return语句,则恢复原来所保留现场,并从原来所保留返回地址开始继续执行,直到main函数结束。mainfunc()func()结束返回15243第31页例:编写一个求an次方函数doublepower(doublea,intn);main()printf(“6tothepower3is%f”,p
24、ower(6.0,3);doublepower(doublea,intn);doublesval=1.0;while(n-)sval*=a;return(sval);运行结果:6tothepower3is216.000000函数调用是能够嵌套,而且c语言允许函数递归调用。第32页6.4.2 函数嵌套调用函数嵌套调用C语言函数定义是独立,相互平行,不允许在定义函数时,又包含另一个函数完整定义,既函数不能嵌套定义。函数允许嵌套使用。函数嵌套调用是指,在执行被调用函数时,被调用函数又调用了其它函数。这与其它语言子程序嵌套调用情形是类似,但主函数main不可被其它任何函数调用那个。其关系可表示如图。第
25、33页案例7.4计算s=1k+2k+3k+Nk/*功效:函数嵌套调用*/#defineK4#defineN5longf1(intn,intk)/*计算nk次方*/longpower=n;inti;for(i=1;ik;i+)power*=n;returnpower;第34页longf2(intn,intk)/*计算1到nk次方之累加和*/longsum=0;inti;for(i=1;i1)f=power(n-1)*n;elsef=1;return(f);第37页main()intn;longy;printf(inputainteagernumber:n);scanf(%d,&n);y=powe
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 函数 公共课 一等奖 全国 获奖 课件
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。