用函数实现模块化程序设计市公开课一等奖百校联赛特等奖课件_第1页
用函数实现模块化程序设计市公开课一等奖百校联赛特等奖课件_第2页
用函数实现模块化程序设计市公开课一等奖百校联赛特等奖课件_第3页
用函数实现模块化程序设计市公开课一等奖百校联赛特等奖课件_第4页
用函数实现模块化程序设计市公开课一等奖百校联赛特等奖课件_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

7.1函数是什么7.2函数定义和调用7.3函数嵌套调用和递归调用7.4数组作为函数参数7.5变量作用域和生存期第7章用函数实现模块化程序设计P168第1页7.1函数是什么假如程序功效比较多,规模比较大,把全部程序代码都写在一个主函数中,就会使主函数变得庞杂、头绪不清,使阅读和维护程序变得困难。P168第2页有时程序中要屡次实现某一功效,就需要屡次重复编写实现此功效程序代码。这使程序冗长,不精炼。7.1函数是什么P168第3页采取“组装”方法简化程序设计过程事先编好一批函数实现各种不一样功效用到什么函数就直接装使用就能够这就是模块化程序设计7.1函数是什么P168第4页函数就是功效(Function)每一个函数用来实现一个特定功效函数名字应反应其代表功效7.1函数是什么P168第5页在设计一个较大程序时,往往把它分为若干个程序模块,每一个模块包含一个或多个函数,每个函数实现一个特定功效。7.1函数是什么P168第6页一个C程序可由一个主函数和若干个其它函数组成。由主函数调用其它函数,其它函数也能够相互调用。同一个函数能够被一个或多个函数调用任意屡次7.1函数是什么P168第7页7.1函数是什么P168mainabcfghdeie第8页除了能够使用库函数外,还能够编写一些本事域或本单位惯用到一些专用函数,供本事域或本单位人员使用。、在程序设计中要善于利用函数,能够降低各人重复编写程序段工作量,同时能够方便地实现模块化程序设计。7.1函数是什么P168第9页说明:(1)一个C程序由一个或多个程序模块组成,每一个程序模块作为一个源程序文件。对于较大程序,一般不把全部内容全放在一个源程序文件中,而是将它们分别放在若干个源文件中,由若干个源程序文件组成一个C程序。这么便于分别编写、分别编译,提高调试效率。一个源程序文件可认为多个C程序所调用。第10页说明:(2)一个源程序文件由一个或多个函数以及其它相关内容组成。一个源程序文件是一个编译单位,在程序编译时是以源程序文件为单位进行编译,而不是以函数为单位进行编译。第11页说明:(3)不论main函数出现在什么位置,总是从main函数开始执行。假如在main函数中调用其他函数,在调用后流程返回到main函数,在main函数中结束整个程序运行。第12页说明:(4)全部函数都是平行,即在定义函数时是分别进行,是相互独立。一个函数并不隶属于另一个函数,即函数不能嵌套定义。函数间能够相互调用,但不能调用main函数。main函数是由系统调用。第13页说明:(5)从用户使用角度看,函数有两种。库函数,它是由系统提供,用户无须自己定义而直接使用它们。应该说明,不一样C语言编译系统提供库函数数量和功效会有一些不一样,当然许多基本函数是共同。用户自己定义函数。它是用以处理用户专门需要函数。第14页说明:(6)从函数形式看,函数分两类。

①无参函数。函数没有参数,普通用来执行固定一组操作。无参函数能够带回或不带回函数值,但普通以不带回函数值居多。

②有参函数。在调用函数时,要给出实参。主调函数在调用被调用函数时,经过参数向被调用函数传递数据,普通情况下,执行被调用函数时会得到一个函数值,供主调函数使用。第15页7.2函数定义和调用7.2.1为何要定义函数7.2.2函数定义7.2.3函数调用7.2.4对被调用函数申明和函数原型P170第16页C语言要求,在程序中用到全部函数,必须“先定义,后使用”指定函数名字、函数返回值类型、函数实现功效以及参数个数与类型,将这些信息通知编译系统。7.2.1为何要定义函数P170第17页指定函数名字,方便以后按名调用指定函数类型,即函数返回值类型指定函数参数名字和类型,方便在调用函数时向它们传递数据指定函数功效。这是最主要,这是在函数体中处理7.2.1为何要定义函数P170第18页假如程序中要调用库函数,只需用#include指令把相关头文件包含到本文件模块中即可。假如想使用库函数中没有函数,需要程序设计者在程序中自己定义。7.2.1为何要定义函数P170第19页7.2.2函数定义1.怎样定义无参函数函数名后面圆括号中空,没有参数定义无参函数普通形式为:

类型名

函数名()

函数体

P171包含申明部分和语句部分指定函数值类型第20页7.2.2函数定义1.怎样定义无参函数函数名后面圆括号中空,没有参数定义无参函数普通形式为:

类型名

函数名()

函数体

}P171表示不需要带回函数值void第21页7.2.2函数定义2.怎样定义有参函数定义有参函数普通形式为:类型标识符

函数名(形式参数表列)

函数体

}P171第22页7.2.2函数定义2.怎样定义有参函数intmax(intx,inty){intz;if(x>y)z=x;elsez=y;return(z);}P171求x和y二者中大者第23页7.2.3函数调用1.调用无参函数形式

函数名()

如print_star()2.调用无参函数形式

函数名(实参表列)如max(a,b)P172假如有多个参数,用逗号隔开第24页例7.2输入两个整数,输出二者中大者。要求在主函数中输入两个整数,用一个函数max求出其中大者,并在主函数中输出此值。第25页#include<stdio.h>

intmax(intx,inty){intz;if(x>y)z=x;elsez=y;return(z);}参数类型函数类型定义函数定义函数内使用变量第26页

c=max(a,b);(main函数)intmax(intx,inty)(max函数){intz;z=x>y?x:y;return(z);}第27页#include<stdio.h>voidmain(){intmax(intx,inty);inta,b,c;printf(”pleaseinputtwonumber:”);scanf(“%d,%d”,&a,&b);c=max(a,b);printf(“maxis%d\n”,c);}

intmax(intx,inty){intz;if(x>y)z=x;elsez=y;return(z);}形式参数实际参数第28页函数调用过程:在定义函数中指定形参,在未出现函数调用时,它们并不占内存中存放单元。在发生函数调用时,函数max形参被暂时分配内存单元。2a3bxy23实参形参第29页函数调用过程:2a3bxy23实参形参调用结束,形参单元被释放实参单元仍保留并维持原值,没有改变假如在执行一个被调用函数时,形参值发生改变,不会改变主调函数实参值第30页调用函数方式:按函数在程序中出现位置来分,能够有以下3种函数调用方式1.函数语句调用没有返回值函数,函数调用单独作为一个语句

如例7.1中“print_star();”第31页调用函数方式:按函数在程序中出现位置来分,能够有以下3种函数调用方式2.函数表示式函数出现在一个表示式中,这种表示式称为函数表示式

如例7.2中“c=max(a,b);”第32页调用函数方式:按函数在程序中出现位置来分,能够有以下3种函数调用方式3.函数参数函数调用作为一个函数实参

如printf(″%d″,max(a,b));第33页7.2.4对被调用函数申明和函数原型P175在一个函数中调用另一个函数需要具备以下条件:(1)被调用函数必须是已经定义函数(是库函数或用户自己定义函数)。(2)假如使用库函数,应该在本文件开头加对应#include指令。(3)假如使用自己定义函数,而该函数位置在调用它函数后面,应该进行函数申明第34页7.2.4对被调用函数申明和函数原型P175函数原型普通形式有两种:如intmax(intx,inty);intmax(int,int);原型说明能够放在文件开头,这时本文件中全部函数都能够使用此函数第35页7.3函数嵌套调用和递归调用P1777.3.1函数嵌套调用7.3.2函数递归调用第36页7.3.1函数嵌套调用调用一个函数过程中,又能够调用另一个函数P177第37页7.3.1函数嵌套调用P177main函数①调用a函数⑨结束a函数③调用b函数⑦②⑧b函数⑤④⑥第38页7.4数组作为函数参数7.4.1数组元素作函数实参7.4.2数组名作函数参数P184第39页7.4.1数组元素作函数实参

因为实参能够是表示式,而数组元素能够是表示式组成部分,所以数组元素能够作为函数实参。P185第40页7.4.2数组名作函数参数P186希望在函数中处理整个数组元素时,能够用数组名作为函数实参注意,此时只是将数组首元素地址传递给所对应形参,所以对应形参应该是指针变量(见第8章)。第41页例7.7有10个学生成绩,用一个函数求全体学生平均成绩。解题思绪:在主函数中定义一个实型数组score,将输入10个学生成绩存放在数组中设计函数average,用来求学生平均成绩需要把数组相关信息传递给average函数采取用数组名作为实参,把数组地址传给average函数,在该函数中对数组进行处理第42页#include<stdio.h>voidmain(){floataverage(floatarray[10]);floatscore[10],aver;inti;printf("input10scores:\n");for(i=0;i<10;i++)scanf("%f",&score[i]);aver=average(score);printf("averagescoreis%5.2f\n",aver);}数组名作实参第43页floataverage(floatarray[10]){inti;floataver,sum=array[0];for(i=1;i<10;i++)sum=sum+array[i];aver=sum/10;return(aver);}与score共占同一存放单元实参、形参都是float型相当于score[0]相当于score[i]第44页7.5变量作用域和生存期7.5.1变量作用域---局部变量和全局变量7.5.2变量存放方式和生存期7.5.3作用域和生存期小结P192第45页7.5.1变量作用域

——局部变量和全局变量1局部变量在函数和复合语句内定义变量,称为内部变量或局部变量只在本函数或复合语句内范围内有效(从定义点开始到函数或复合语句结束)在此函数或复合语句以外是不能使用这些变量P192第46页2全局变量一个程序可以包含一个或若干个源程序文件(即程序模块),而一个源文件可以包含一个或若干个函数在函数之外定义变量是外部变量,也称为全局变量(或全程变量)全局变量有效范围为从定义变量位置开始到根源文件结束,在此范围内可认为本文件中全部函数所共用第47页2全局变量在一个函数中既能够使用本函数中局部变量,又能够使用有效全局变量。假如在同一个源文件中,外部变量与局部变量同名,则在局部变量作用范围内,外部变量被“屏蔽”了,即它不起作用,此时局部变量是有效。第48页7.5.2变量存放方式和生存期变量生存期:变量值存在时间变量两种存放方式:静态存放方式和动态存放方式静态存放方式是指在程序运行期间由系统分配固定存放空间方式动态存放方式是在程序运行期间依据需要进行动态分配存放空间方式P195第49页7.5.2变量存放方式和生存期全局变量采取静态存放方式,在程序开始执行时给全局变量分配存放区,程序执行完成释放。在程序执行过程中它们占据固定存放单元,而不是动态地进行分配和释放。P195第50页7.5.2变量存放方式和生存期在函数中定义变量,在函数调用开始时分配动态存放空间,函数结束时释放这些空间。在程序执行过程中,这种分配和释放是动态。P195第51页7.5.2变量存放方式和生存期每一个变量和函数都有两个属性:数据类型和数据存放类别数据类型,如整型、浮点型等存放类别指是数据在内存中存放方式(如静态存放和动态存放)P195第52页1.auto—申明自动变量(auto变量)函数中形参和在函数中定义变量(包含在复合语句中定义变量),都属于这类在调用该函数时,系统给这些变量分配存放空间,在函数调用结束时就自动释放这些存放空间。所以这类局部变量称为自动变量。自动变量用关键字auto作存放类别申明第53页intf(inta){autointb,c=3;

┇}能够省略第54页2.static—申明静态变量以下情况需要指定static存放类别:希望函数中局部变量值在函数调用结束后不消失而继续保留原值,即其占用存放单元不释放,在下一次该函数调用时,该变量已经有值,就是上一次函数调用结束时值。这时就应用关键字static指定该局部变量为“静态局部变量”。第55页对静态局部变量说明:(1)静态局部变量属于静态存放类别,在静态存放区内分配存放单元。在程序整个运行期间都不释放。而自动变量(即动态局部变量)属于动态存放类别,占动态存放区空间而不占静态存放区空间,函数调用结束后即释放第56页对静态局部变量说明:(2)对静态局部变量是在编译时赋初值,即只赋初值一次,在程序运行时它已经有初值。以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时值。而对自动变量赋初值,不是在编译时进行,而是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。第57页对静态局部变量说明:(3)如在定义局部变量时不赋初值话,则对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符变量)。而对自动变量

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论